Skip to content

Commit e0b7894

Browse files
authored
Handle SJIS hyphens in group item variable names correctly (#624)
This pull request addresses a bug where SJIS hyphens in variable names within group items were not being correctly converted during Cobol to Java code generation, leading to incorrect variable names in the generated Java code.
1 parent 5792add commit e0b7894

File tree

2 files changed

+72
-30
lines changed

2 files changed

+72
-30
lines changed

cobj/codegen.c

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -807,45 +807,16 @@ static int is_call_parameter(const struct cb_field *f) {
807807
}
808808

809809
static int joutput_field_storage(struct cb_field *f, struct cb_field *top) {
810-
const char *p;
811810
int flag_call_parameter = is_call_parameter(top);
812811
if (flag_call_parameter ||
813812
(f->offset == 0 && strcmp(f->name, top->name) == 0)) {
814813
char *base_name = get_java_identifier_base(top);
815814
joutput(base_name);
816815
free(base_name);
817816
return flag_call_parameter;
818-
} else if (cb_flag_short_variable) {
819-
joutput(CB_PREFIX_BASE);
820-
for (p = f->name; *p != '\0'; ++p) {
821-
if (*p == '-') {
822-
joutput("_");
823-
} else {
824-
joutput("%c", *p);
825-
}
826-
}
827-
} else if (cb_flag_serial_variable) {
817+
} else {
828818
char *base_name = get_java_identifier_base(f);
829819
joutput(base_name);
830-
} else {
831-
joutput(CB_PREFIX_BASE);
832-
struct cb_field *field = f;
833-
int flag_first_iteration = 1;
834-
while (field) {
835-
if (flag_first_iteration) {
836-
flag_first_iteration = 0;
837-
} else {
838-
joutput("__");
839-
}
840-
for (p = field->name; *p != '\0'; ++p) {
841-
if (*p == '-') {
842-
joutput("_");
843-
} else {
844-
joutput("%c", *p);
845-
}
846-
}
847-
field = field->parent;
848-
}
849820
}
850821
return 0;
851822
}

tests/i18n_sjis.src/user-defined-word.at

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,77 @@ AT_CHECK([java prog], [0], [OK])
177177

178178
AT_CLEANUP
179179

180+
181+
AT_SETUP([Nihongo field name with SJIS hyphens])
182+
183+
AT_DATA([prog.cob], [
184+
IDENTIFICATION DIVISION.
185+
PROGRAM-ID. prog.
186+
DATA DIVISION.
187+
WORKING-STORAGE SECTION.
188+
01 �s�d�r�s�|�c�`�s�`�P PIC X(10) VALUE "test-data1".
189+
01 �s�d�r�s�|�q�d�b�n�q�c�P.
190+
03 �s�d�r�s�|�c�`�s�`�Q PIC X(10) VALUE "test-data2".
191+
03 �s�d�r�s�|�q�d�b�n�q�c�Q.
192+
05 �s�d�r�s�|�c�`�s�`�R PIC X(10) VALUE "test-data3".
193+
PROCEDURE DIVISION.
194+
DISPLAY �s�d�r�s�|�c�`�s�`�P.
195+
DISPLAY �s�d�r�s�|�c�`�s�`�Q.
196+
DISPLAY �s�d�r�s�|�c�`�s�`�R.
197+
])
198+
199+
AT_CHECK([cobj prog.cob])
200+
AT_CHECK([java prog], [0],
201+
[test-data1
202+
test-data2
203+
test-data3
204+
])
205+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�Q�c�`�s�`�P' > /dev/null], [0])
206+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�Q�c�`�s�`�Q__�s�d�r�s�Q�q�d�b�n�q�c�P' > /dev/null], [0])
207+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�Q�c�`�s�`�R__�s�d�r�s�Q�q�d�b�n�q�c�Q__�s�d�r�s�Q�q�d�b�n�q�c�P' > /dev/null], [0])
208+
209+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�|�c�`�s�`�P' > /dev/null], [1])
210+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�|�c�`�s�`�Q__�s�d�r�s�|�q�d�b�n�q�c�P' > /dev/null], [1])
211+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�|�c�`�s�`�R__�s�d�r�s�|�q�d�b�n�q�c�Q__�s�d�r�s�|�q�d�b�n�q�c�P' > /dev/null], [1])
212+
213+
AT_CLEANUP
214+
215+
216+
AT_SETUP([Nihongo field name with SJIS hyphens using -fshort-variable ])
217+
218+
AT_DATA([prog.cob], [
219+
IDENTIFICATION DIVISION.
220+
PROGRAM-ID. prog.
221+
DATA DIVISION.
222+
WORKING-STORAGE SECTION.
223+
01 �s�d�r�s�|�c�`�s�`�P PIC X(10) VALUE "test-data1".
224+
01 �s�d�r�s�|�q�d�b�n�q�c�P.
225+
03 �s�d�r�s�|�c�`�s�`�Q PIC X(10) VALUE "test-data2".
226+
03 �s�d�r�s�|�q�d�b�n�q�c�Q.
227+
05 �s�d�r�s�|�c�`�s�`�R PIC X(10) VALUE "test-data3".
228+
PROCEDURE DIVISION.
229+
DISPLAY �s�d�r�s�|�c�`�s�`�P.
230+
DISPLAY �s�d�r�s�|�c�`�s�`�Q.
231+
DISPLAY �s�d�r�s�|�c�`�s�`�R.
232+
])
233+
234+
AT_CHECK([cobj -fshort-variable prog.cob])
235+
AT_CHECK([java prog], [0],
236+
[test-data1
237+
test-data2
238+
test-data3
239+
])
240+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�Q�c�`�s�`�P' > /dev/null], [0])
241+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�Q�c�`�s�`�Q' > /dev/null], [0])
242+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�Q�c�`�s�`�R' > /dev/null], [0])
243+
244+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�|�c�`�s�`�P' > /dev/null], [1])
245+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�|�c�`�s�`�Q' > /dev/null], [1])
246+
AT_CHECK([cat prog.java | grep 'f_�s�d�r�s�|�c�`�s�`�R' > /dev/null], [1])
247+
248+
AT_CLEANUP
249+
250+
180251
AT_SETUP([Nihongo field name in numeric test msg.])
181252

182253
AT_DATA([prog.cob], [

0 commit comments

Comments
 (0)