Skip to content

Commit 3429ebd

Browse files
committed
FUNCTION LENGTH-AN関数をサポートする設定の追加です。
Add option to enable function LENGTH-AN.
1 parent b6677eb commit 3429ebd

File tree

7 files changed

+55
-3
lines changed

7 files changed

+55
-3
lines changed

cobc/config.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ CB_CONFIG_BOOLEAN (cb_enable_sort_status_register, "enable-sort-status-register"
4848
CB_CONFIG_BOOLEAN (cb_enable_special_names_argument_clause, "enable-special-names-argument-clause")
4949
CB_CONFIG_BOOLEAN (cb_enable_special_names_environment_clause, "enable-special-names-environment-clause")
5050
CB_CONFIG_BOOLEAN (cb_enable_leng_intrinsic_function, "enable-leng-intrinsic-function")
51+
CB_CONFIG_BOOLEAN (cb_enable_length_an_intrinsic_function, "enable-length-an-intrinsic-function")
5152
CB_CONFIG_BOOLEAN (cb_enable_national_intrinsic_function, "enable-national-intrinsic-function")
5253
CB_CONFIG_SUPPORT (cb_author_paragraph, "author-paragraph")
5354
CB_CONFIG_SUPPORT (cb_memory_size_clause, "memory-size-clause")

cobc/reserved.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,9 @@ static const struct cb_intrinsic_table function_list[] = {
733733
{ "LENGTH", 1, 1, CB_INTR_LENGTH,
734734
"cob_intr_length",
735735
CB_CATEGORY_NUMERIC, 0 },
736+
{ "LENGTH-AN", 1, 1, CB_INTR_LENGTH_AN,
737+
"cob_intr_length",
738+
CB_CATEGORY_NUMERIC, 0 },
736739
{ "LOCALE-COMPARE", -1, 0, CB_INTR_LOCALE_COMPARE,
737740
NULL,
738741
CB_CATEGORY_ALPHANUMERIC, 0 },

cobc/tree.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2620,13 +2620,15 @@ cb_build_intrinsic (cb_tree name, cb_tree args, cb_tree refmod)
26202620
}
26212621
#endif /*I18N_UTF8*/
26222622
}
2623+
2624+
case CB_INTR_BYTE_LENGTH:
26232625
case CB_INTR_LENG:
2624-
if (!cb_enable_leng_intrinsic_function) {
2626+
case CB_INTR_LENGTH_AN:
2627+
if ((cbp->intr_enum == CB_INTR_LENG && !cb_enable_leng_intrinsic_function) ||
2628+
(cbp->intr_enum == CB_INTR_LENGTH_AN && !cb_enable_length_an_intrinsic_function)) {
26252629
cb_error_x (name, _("FUNCTION %s not implemented"), CB_NAME (name));
26262630
return cb_error_node;
26272631
}
2628-
/* do same as CB_INTR_BYTE_LENGTH continue. */
2629-
case CB_INTR_BYTE_LENGTH:
26302632
x = CB_VALUE (args);
26312633
if (CB_INTRINSIC_P (x)) {
26322634
return make_intrinsic (name, cbp, args, NULL, NULL);

cobc/tree.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,7 @@ enum cb_intr_enum {
873873
CB_INTR_INTEGER_PART,
874874
CB_INTR_LENG,
875875
CB_INTR_LENGTH,
876+
CB_INTR_LENGTH_AN,
876877
CB_INTR_LOCALE_COMPARE,
877878
CB_INTR_LOCALE_DATE,
878879
CB_INTR_LOCALE_TIME,

config/default.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,5 @@ enable-sort-status-register: no
129129
enable-special-names-argument-clause: no
130130
enable-special-names-environment-clause: no
131131
enable-leng-intrinsic-function: no
132+
enable-length-an-intrinsic-function: no
132133
enable-national-intrinsic-function: no

config/jp-compat.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ enable-sort-status-register: yes
1313
enable-special-names-argument-clause: yes
1414
enable-special-names-environment-clause: yes
1515
enable-leng-intrinsic-function: yes
16+
enable-length-an-intrinsic-function: yes
1617
enable-national-intrinsic-function: yes

tests/jp-compat.src/intr-funcs.at

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,46 @@ AT_CHECK([./prog], [0], [04])
4141

4242
AT_CLEANUP
4343

44+
AT_SETUP([FUNCTION LENGTH-AN (fixed)])
45+
46+
AT_DATA([prog.cob], [
47+
IDENTIFICATION DIVISION.
48+
PROGRAM-ID. prog.
49+
DATA DIVISION.
50+
WORKING-STORAGE SECTION.
51+
77 FIXED_FLD PIC X(8) USAGE DISPLAY.
52+
77 NLEN PIC 9(2) USAGE DISPLAY.
53+
PROCEDURE DIVISION.
54+
MOVE FUNCTION LENGTH-AN (FIXED_FLD) TO NLEN.
55+
DISPLAY NLEN WITH NO ADVANCING.
56+
STOP RUN.
57+
])
58+
59+
AT_CHECK([${COMPILE_JP_COMPAT} -x prog.cob])
60+
AT_CHECK([./prog], [0], [08])
61+
62+
AT_CLEANUP
63+
64+
AT_SETUP([FUNCTION LENGTH-AN (occur. depending)])
65+
66+
AT_DATA([prog.cob], [
67+
IDENTIFICATION DIVISION.
68+
PROGRAM-ID. prog.
69+
DATA DIVISION.
70+
WORKING-STORAGE SECTION.
71+
01 DEP_FLD.
72+
03 DEP_ITEM PIC X(2) OCCURS 1 TO 10 DEPENDING ON NDEP.
73+
77 NDEP PIC 9(2) USAGE DISPLAY.
74+
77 NLEN PIC 9(2) USAGE DISPLAY.
75+
PROCEDURE DIVISION.
76+
MOVE 2 TO NDEP.
77+
MOVE FUNCTION LENGTH-AN (DEP_FLD) TO NLEN.
78+
DISPLAY NLEN WITH NO ADVANCING.
79+
STOP RUN.
80+
])
81+
82+
AT_CHECK([${COMPILE_JP_COMPAT} -x prog.cob])
83+
AT_CHECK([./prog], [0], [04])
84+
85+
AT_CLEANUP
86+

0 commit comments

Comments
 (0)