Skip to content

Commit eafbf14

Browse files
authored
Merge pull request #19 from opensourcecobol/dev/y-sakamoto
COBOL85のFUNCTIONをすべて実装した
2 parents 46b58c4 + a82e2a0 commit eafbf14

File tree

16 files changed

+1740
-119
lines changed

16 files changed

+1740
-119
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ java [PROGRAM-ID]
2828
## The progress of the development
2929

3030
The functions in the following "implemented" list are tested using [NIST COBOL85 test suite](https://www.itl.nist.gov/div897/ctg/cobol_form.htm)
31-
and **95%** of the test cases are passed.
31+
and **96%** of the test cases are passed.
3232

3333
Implemented.
3434

@@ -39,11 +39,11 @@ Implemented.
3939
* Sequential files
4040
* Indexed files
4141
* Sort statements
42+
* Embedded functions (ACOS, LENGTH, MAX, ...)
4243

4344
Not Implemented.
4445

4546
* Relative files
46-
* Embedded functions (ACOS, LENGTH, MAX, ...)
4747

4848
Known bugs
4949

README_JP.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ java [PROGRAM-ID]
2626

2727
## The progress of the development
2828

29-
下記の実装済みリストにある機能は[NIST COBOL85 test suite](https://www.itl.nist.gov/div897/ctg/cobol_form.htm)でテストされており,**95%** のテストケースをパスしています.
29+
下記の実装済みリストにある機能は[NIST COBOL85 test suite](https://www.itl.nist.gov/div897/ctg/cobol_form.htm)でテストされており,**96%** のテストケースをパスしています.
3030

3131
実装済み
3232

@@ -37,11 +37,11 @@ java [PROGRAM-ID]
3737
* SEQUENTIALファイルの入出力機能
3838
* INDEXEDファイルの入出力機能
3939
* SORT文
40+
* 組み込み関数 (ACOS, LENGTH, MAX, ...)
4041

4142
実装予定
4243

4344
* RELATIVEファイルの入出力機能
44-
* 組み込み関数 (ACOS, LENGTH, MAX, ...)
4545

4646
既知の不具合
4747

cobc/codegen.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1361,7 +1361,7 @@ joutput_param (cb_tree x, int id)
13611361
break;
13621362
case CB_TAG_BINARY_OP:
13631363
bp = CB_BINARY_OP (x);
1364-
joutput ("cob_intr_binop (");
1364+
joutput ("CobolIntrinsic.intrBinop (");
13651365
joutput_param (bp->x, id);
13661366
joutput (", ");
13671367
joutput ("%d", bp->op);

cobc/reserved.c

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -640,55 +640,55 @@ static const struct reserved reserved_words[] = {
640640

641641
static const struct cb_intrinsic_table function_list[] = {
642642
{ "ABS", 1, 1, CB_INTR_ABS,
643-
"cob_intr_abs",
643+
"CobolIntrinsic.funcAbs",
644644
CB_CATEGORY_NUMERIC, 0 },
645645
{ "ACOS", 1, 1, CB_INTR_ACOS,
646-
"cob_intr_acos",
646+
"CobolIntrinsic.funcAcos",
647647
CB_CATEGORY_NUMERIC, 0 },
648648
{ "ANNUITY", 2, 1, CB_INTR_ANNUITY,
649-
"cob_intr_annuity",
649+
"CobolIntrinsic.funcAnnuity",
650650
CB_CATEGORY_NUMERIC, 0 },
651651
{ "ASIN", 1, 1, CB_INTR_ASIN,
652-
"cob_intr_asin",
652+
"CobolIntrinsic.funcAsin",
653653
CB_CATEGORY_NUMERIC, 0 },
654654
{ "ATAN", 1, 1, CB_INTR_ATAN,
655-
"cob_intr_atan",
655+
"CobolIntrinsic.funcAtan",
656656
CB_CATEGORY_NUMERIC, 0 },
657657
{ "BOOLEAN-OF-INTEGER", 2, 0, CB_INTR_BOOLEAN_OF_INTEGER,
658658
NULL,
659659
CB_CATEGORY_NUMERIC, 0 },
660660
{ "BYTE-LENGTH", 1, 1, CB_INTR_BYTE_LENGTH,
661-
"cob_intr_length",
661+
"CobolIntrinsic.funcLength",
662662
CB_CATEGORY_NUMERIC, 0 },
663663
{ "CHAR", 1, 1, CB_INTR_CHAR,
664-
"cob_intr_char",
664+
"CobolIntrinsic.funcChar",
665665
CB_CATEGORY_ALPHANUMERIC, 0 },
666666
{ "CHAR-NATIONAL", 1, 0, CB_INTR_CHAR_NATIONAL,
667667
NULL,
668668
CB_CATEGORY_ALPHANUMERIC, 0 },
669669
{ "COMBINED-DATETIME", 2, 1, CB_INTR_COMBINED_DATETIME,
670-
"cob_intr_combined_datetime",
670+
"CobolIntrinsic.funcCombinedDatetime",
671671
CB_CATEGORY_NUMERIC, 0 },
672672
{ "CONCATENATE", -1, 1, CB_INTR_CONCATENATE,
673-
"cob_intr_concatenate",
673+
"CobolIntrinsic.funcConcatenate",
674674
CB_CATEGORY_ALPHANUMERIC, 1 },
675675
{ "COS", 1, 1, CB_INTR_COS,
676-
"cob_intr_cos",
676+
"CobolIntrinsic.funcCos",
677677
CB_CATEGORY_NUMERIC, 0 },
678678
{ "CURRENT-DATE", 0, 1, CB_INTR_CURRENT_DATE,
679-
"cob_intr_current_date",
679+
"CobolIntrinsic.funcCurrentDate",
680680
CB_CATEGORY_ALPHANUMERIC, 1 },
681681
{ "DATE-OF-INTEGER", 1, 1, CB_INTR_DATE_OF_INTEGER,
682-
"cob_intr_date_of_integer",
682+
"CobolIntrinsic.funcDateOfInteger",
683683
CB_CATEGORY_NUMERIC, 0 },
684684
{ "DATE-TO-YYYYMMDD", -1, 1, CB_INTR_DATE_TO_YYYYMMDD,
685-
"cob_intr_date_to_yyyymmdd",
685+
"CobolIntrinsic.funcDateToYyyymmdd",
686686
CB_CATEGORY_NUMERIC, 0 },
687687
{ "DAY-OF-INTEGER", 1, 1, CB_INTR_DAY_OF_INTEGER,
688-
"cob_intr_day_of_integer",
688+
"CobolIntrinsic.funcDayOfInteger",
689689
CB_CATEGORY_NUMERIC, 0 },
690690
{ "DAY-TO-YYYYDDD", -1, 1, CB_INTR_DAY_TO_YYYYDDD,
691-
"cob_intr_day_to_yyyyddd",
691+
"CobolIntrinsic.funcDayToYyyyddd",
692692
CB_CATEGORY_NUMERIC, 0 },
693693
{ "DISPLAY-OF", -1, 0, CB_INTR_DISPLAY_OF,
694694
NULL,
@@ -697,187 +697,187 @@ static const struct cb_intrinsic_table function_list[] = {
697697
NULL,
698698
CB_CATEGORY_NUMERIC, 0 },
699699
{ "EXCEPTION-FILE", 0, 1, CB_INTR_EXCEPTION_FILE,
700-
"cob_intr_exception_file",
700+
"CobolIntrinsic.funcExceptionFile",
701701
CB_CATEGORY_ALPHANUMERIC, 0 },
702702
{ "EXCEPTION-FILE-N", 0, 0, CB_INTR_EXCEPTION_FILE_N,
703703
NULL,
704704
CB_CATEGORY_ALPHANUMERIC, 0 },
705705
{ "EXCEPTION-LOCATION", 0, 1, CB_INTR_EXCEPTION_LOCATION,
706-
"cob_intr_exception_location",
706+
"CobolIntrinsic.funcExceptionLocation",
707707
CB_CATEGORY_ALPHANUMERIC, 0 },
708708
{ "EXCEPTION-LOCATION-N", 0, 0, CB_INTR_EXCEPTION_LOCATION_N,
709709
NULL,
710710
CB_CATEGORY_ALPHANUMERIC, 0 },
711711
{ "EXCEPTION-STATEMENT", 0, 1, CB_INTR_EXCEPTION_STATEMENT,
712-
"cob_intr_exception_statement",
712+
"CobolIntrinsic.funcExceptionStatement",
713713
CB_CATEGORY_ALPHANUMERIC, 0 },
714714
{ "EXCEPTION-STATUS", 0, 1, CB_INTR_EXCEPTION_STATUS,
715-
"cob_intr_exception_status",
715+
"CobolIntrinsic.funcExceptionStatus",
716716
CB_CATEGORY_ALPHANUMERIC, 0 },
717717
{ "EXP", 1, 1, CB_INTR_EXP,
718-
"cob_intr_exp",
718+
"CobolIntrinsic.funcExp",
719719
CB_CATEGORY_NUMERIC, 0 },
720720
{ "EXP10", 1, 1, CB_INTR_EXP10,
721-
"cob_intr_exp10",
721+
"CobolIntrinsic.funcExp10",
722722
CB_CATEGORY_NUMERIC, 0 },
723723
{ "FACTORIAL", 1, 1, CB_INTR_FACTORIAL,
724-
"cob_intr_factorial",
724+
"CobolIntrinsic.funcFactorial",
725725
CB_CATEGORY_NUMERIC, 0 },
726726
{ "FRACTION-PART", 1, 1, CB_INTR_FRACTION_PART,
727-
"cob_intr_fraction_part",
727+
"CobolIntrinsic.funcFractionPart",
728728
CB_CATEGORY_NUMERIC, 0 },
729729
{ "HIGHEST-ALGEBRAIC", 1, 0, CB_INTR_HIGHEST_ALGEBRAIC,
730730
NULL,
731731
CB_CATEGORY_NUMERIC, 0 },
732732
{ "INTEGER", 1, 1, CB_INTR_INTEGER,
733-
"cob_intr_integer",
733+
"CobolIntrinsic.funcInteger",
734734
CB_CATEGORY_NUMERIC, 0 },
735735
{ "INTEGER-OF-BOOLEAN", 1, 0, CB_INTR_INTEGER_OF_BOOLEAN,
736736
NULL,
737737
CB_CATEGORY_NUMERIC, 0 },
738738
{ "INTEGER-OF-DATE", 1, 1, CB_INTR_INTEGER_OF_DATE,
739-
"cob_intr_integer_of_date",
739+
"CobolIntrinsic.funcIntegerOfDate",
740740
CB_CATEGORY_NUMERIC, 0 },
741741
{ "INTEGER-OF-DAY", 1, 1, CB_INTR_INTEGER_OF_DAY,
742-
"cob_intr_integer_of_day",
742+
"CobolIntrinsic.funcIntegerOfDay",
743743
CB_CATEGORY_NUMERIC, 0 },
744744
{ "INTEGER-PART", 1, 1, CB_INTR_INTEGER_PART,
745-
"cob_intr_integer_part",
745+
"CobolIntrinsic.funcIntegerPart",
746746
CB_CATEGORY_NUMERIC, 0 },
747747
{ "LENG", 1, 1, CB_INTR_LENG,
748-
"cob_intr_length",
748+
"CobolIntrinsic.funcLength",
749749
CB_CATEGORY_NUMERIC, 0 },
750750
{ "LENGTH", 1, 1, CB_INTR_LENGTH,
751-
"cob_intr_length",
751+
"CobolIntrinsic.funcLength",
752752
CB_CATEGORY_NUMERIC, 0 },
753753
{ "LENGTH-AN", 1, 1, CB_INTR_LENGTH_AN,
754-
"cob_intr_length",
754+
"CobolIntrinsic.funcLength",
755755
CB_CATEGORY_NUMERIC, 0 },
756756
{ "LOCALE-COMPARE", -1, 0, CB_INTR_LOCALE_COMPARE,
757757
NULL,
758758
CB_CATEGORY_ALPHANUMERIC, 0 },
759759
{ "LOCALE-DATE", 2, 1, CB_INTR_LOCALE_DATE,
760-
"cob_intr_locale_date",
760+
"CobolIntrinsic.funcLocaleDate",
761761
CB_CATEGORY_ALPHANUMERIC, 1 },
762762
{ "LOCALE-TIME", 2, 1, CB_INTR_LOCALE_TIME,
763-
"cob_intr_locale_time",
763+
"CobolIntrinsic.funcLocaleTime",
764764
CB_CATEGORY_ALPHANUMERIC, 1 },
765765
{ "LOCALE-TIME-FROM-SECONDS", 2, 1, CB_INTR_LOCALE_TIME_FROM_SECS,
766-
"cob_intr_lcl_time_from_secs",
766+
"CobolIntrinsic.funcLclTimeFromSecs",
767767
CB_CATEGORY_ALPHANUMERIC, 1 },
768768
{ "LOG", 1, 1, CB_INTR_LOG,
769-
"cob_intr_log",
769+
"CobolIntrinsic.funcLog",
770770
CB_CATEGORY_NUMERIC, 0 },
771771
{ "LOG10", 1, 1, CB_INTR_LOG10,
772-
"cob_intr_log10",
772+
"CobolIntrinsic.funcLog10",
773773
CB_CATEGORY_NUMERIC, 0 },
774774
{ "LOWER-CASE", 1, 1, CB_INTR_LOWER_CASE,
775-
"cob_intr_lower_case",
775+
"CobolIntrinsic.funcLowerCase",
776776
CB_CATEGORY_ALPHANUMERIC, 1 },
777777
{ "LOWEST-ALGEBRAIC", 1, 0, CB_INTR_LOWEST_ALGEBRAIC,
778778
NULL,
779779
CB_CATEGORY_NUMERIC, 0 },
780780
{ "MAX", -1, 1, CB_INTR_MAX,
781-
"cob_intr_max",
781+
"CobolIntrinsic.funcMax",
782782
CB_CATEGORY_NUMERIC, 0 },
783783
{ "MEAN", -1, 1, CB_INTR_MEAN,
784-
"cob_intr_mean",
784+
"CobolIntrinsic.funcMean",
785785
CB_CATEGORY_NUMERIC, 0 },
786786
{ "MEDIAN", -1, 1, CB_INTR_MEDIAN,
787-
"cob_intr_median",
787+
"CobolIntrinsic.funcMedian",
788788
CB_CATEGORY_NUMERIC, 0 },
789789
{ "MIDRANGE", -1, 1, CB_INTR_MIDRANGE,
790-
"cob_intr_midrange",
790+
"CobolIntrinsic.funcMidrange",
791791
CB_CATEGORY_NUMERIC, 0 },
792792
{ "MIN", -1, 1, CB_INTR_MIN,
793-
"cob_intr_min",
793+
"CobolIntrinsic.funcMin",
794794
CB_CATEGORY_NUMERIC, 0 },
795795
{ "MOD", 2, 1, CB_INTR_MOD,
796-
"cob_intr_mod",
796+
"CobolIntrinsic.funcMod",
797797
CB_CATEGORY_NUMERIC, 0 },
798798
{ "NATIONAL", 1, 1, CB_INTR_NATIONAL,
799-
"cob_intr_national",
799+
"CobolIntrinsic.funcNational",
800800
CB_CATEGORY_NATIONAL, 0 },
801801
{ "NATIONAL-OF", -1, 0, CB_INTR_NATIONAL_OF,
802802
NULL,
803803
CB_CATEGORY_ALPHANUMERIC, 0 },
804804
{ "NUMVAL", 1, 1, CB_INTR_NUMVAL,
805-
"cob_intr_numval",
805+
"CobolIntrinsic.funcNumval",
806806
CB_CATEGORY_NUMERIC, 0 },
807807
{ "NUMVAL-C", 2, 1, CB_INTR_NUMVAL_C,
808-
"cob_intr_numval_c",
808+
"CobolIntrinsic.funcNumvalC",
809809
CB_CATEGORY_NUMERIC, 0 },
810810
{ "NUMVAL-F", 1, 0, CB_INTR_NUMVAL_F,
811811
NULL,
812812
CB_CATEGORY_NUMERIC, 0 },
813813
{ "ORD", 1, 1, CB_INTR_ORD,
814-
"cob_intr_ord",
814+
"CobolIntrinsic.funcOrd",
815815
CB_CATEGORY_NUMERIC, 0 },
816816
{ "ORD-MAX", -1, 1, CB_INTR_ORD_MAX,
817-
"cob_intr_ord_max",
817+
"CobolIntrinsic.funcOrdMax",
818818
CB_CATEGORY_NUMERIC, 0 },
819819
{ "ORD-MIN", -1, 1, CB_INTR_ORD_MIN,
820-
"cob_intr_ord_min",
820+
"CobolIntrinsic.funcOrdMin",
821821
CB_CATEGORY_NUMERIC, 0 },
822822
{ "PI", 0, 1, CB_INTR_PI,
823823
NULL,
824824
CB_CATEGORY_NUMERIC, 0 },
825825
{ "PRESENT-VALUE", -1, 1, CB_INTR_PRESENT_VALUE,
826-
"cob_intr_present_value",
826+
"CobolIntrinsic.funcPresentValue",
827827
CB_CATEGORY_NUMERIC, 0 },
828828
{ "RANDOM", -1, 1, CB_INTR_RANDOM,
829-
"cob_intr_random",
829+
"CobolIntrinsic.funcRandom",
830830
CB_CATEGORY_NUMERIC, 0 },
831831
{ "RANGE", -1, 1, CB_INTR_RANGE,
832-
"cob_intr_range",
832+
"CobolIntrinsic.funcRange",
833833
CB_CATEGORY_NUMERIC, 0 },
834834
{ "REM", 2, 1, CB_INTR_REM,
835-
"cob_intr_rem",
835+
"CobolIntrinsic.funcRem",
836836
CB_CATEGORY_NUMERIC, 0 },
837837
{ "REVERSE", 1, 1, CB_INTR_REVERSE,
838-
"cob_intr_reverse",
838+
"CobolIntrinsic.funcReverse",
839839
CB_CATEGORY_ALPHANUMERIC, 1 },
840840
{ "SECONDS-FROM-FORMATTED-TIME", 2, 1, CB_INTR_SECONDS_PAST_MIDNIGHT,
841-
"cob_intr_seconds_from_formatted_time",
841+
"CobolIntrinsic.funcSecondsFromFormattedTime",
842842
CB_CATEGORY_NUMERIC, 0 },
843843
{ "SECONDS-PAST-MIDNIGHT", 0, 1, CB_INTR_SECONDS_PAST_MIDNIGHT,
844-
"cob_intr_seconds_past_midnight",
844+
"CobolIntrinsic.funcSecondsPastMidnight",
845845
CB_CATEGORY_NUMERIC, 0 },
846846
{ "SIGN", 1, 1, CB_INTR_SIGN,
847-
"cob_intr_sign",
847+
"CobolIntrinsic.funcSign",
848848
CB_CATEGORY_NUMERIC, 0 },
849849
{ "SIN", 1, 1, CB_INTR_SIN,
850-
"cob_intr_sin",
850+
"CobolIntrinsic.funcSin",
851851
CB_CATEGORY_NUMERIC, 0 },
852852
{ "SQRT", 1, 1, CB_INTR_SQRT,
853-
"cob_intr_sqrt",
853+
"CobolIntrinsic.funcSqrt",
854854
CB_CATEGORY_NUMERIC, 0 },
855855
{ "STANDARD-COMPARE", -1, 0, CB_INTR_STANDARD_COMPARE,
856856
NULL,
857857
CB_CATEGORY_ALPHANUMERIC, 0 },
858858
{ "STANDARD-DEVIATION", -1, 1, CB_INTR_STANDARD_DEVIATION,
859-
"cob_intr_standard_deviation",
859+
"CobolIntrinsic.funcStandardDeviation",
860860
CB_CATEGORY_NUMERIC, 0 },
861861
{ "STORED-CHAR-LENGTH", 1, 1, CB_INTR_STORED_CHAR_LENGTH,
862-
"cob_intr_stored_char_length",
862+
"CobolIntrinsic.funcStoredCharLength",
863863
CB_CATEGORY_NUMERIC, 0 },
864864
{ "SUBSTITUTE", -1, 1, CB_INTR_SUBSTITUTE,
865-
"cob_intr_substitute",
865+
"CobolIntrinsic.funcSubstitute",
866866
CB_CATEGORY_ALPHANUMERIC, 1 },
867867
{ "SUBSTITUTE-CASE", -1, 1, CB_INTR_SUBSTITUTE_CASE,
868-
"cob_intr_substitute_case",
868+
"CobolIntrinsic.funcSubstituteCase",
869869
CB_CATEGORY_ALPHANUMERIC, 1 },
870870
{ "SUM", -1, 1, CB_INTR_SUM,
871-
"cob_intr_sum",
871+
"CobolIntrinsic.funcSum",
872872
CB_CATEGORY_NUMERIC, 0 },
873873
{ "TAN", 1, 1, CB_INTR_TAN,
874-
"cob_intr_tan",
874+
"CobolIntrinsic.funcTan",
875875
CB_CATEGORY_NUMERIC, 0 },
876876
{ "TEST-DATE-YYYYMMDD", 1, 1, CB_INTR_TEST_DATE_YYYYMMDD,
877-
"cob_intr_test_date_yyyymmdd",
877+
"CobolIntrinsic.funcTestDateYyyymmdd",
878878
CB_CATEGORY_NUMERIC, 0 },
879879
{ "TEST-DAY-YYYYDDD", 1, 1, CB_INTR_TEST_DAY_YYYYDDD,
880-
"cob_intr_test_day_yyyyddd",
880+
"CobolIntrinsic.funcTestDayYyyyddd",
881881
CB_CATEGORY_NUMERIC, 0 },
882882
{ "TEST-NUMVAL", 1, 0, CB_INTR_TEST_NUMVAL,
883883
NULL,
@@ -889,19 +889,19 @@ static const struct cb_intrinsic_table function_list[] = {
889889
NULL,
890890
CB_CATEGORY_NUMERIC, 0 },
891891
{ "TRIM", 2, 1, CB_INTR_TRIM,
892-
"cob_intr_trim",
892+
"CobolIntrinsic.funcTrim",
893893
CB_CATEGORY_ALPHANUMERIC, 1 },
894894
{ "UPPER-CASE", 1, 1, CB_INTR_UPPER_CASE,
895-
"cob_intr_upper_case",
895+
"CobolIntrinsic.funcUpperCase",
896896
CB_CATEGORY_ALPHANUMERIC, 1 },
897897
{ "VARIANCE", -1, 1, CB_INTR_VARIANCE,
898-
"cob_intr_variance",
898+
"CobolIntrinsic.funcVariance",
899899
CB_CATEGORY_NUMERIC, 0 },
900900
{ "WHEN-COMPILED", 0, 1, CB_INTR_WHEN_COMPILED,
901-
"cob_intr_when_compiled",
901+
"CobolIntrinsic.funcWhenCompiled",
902902
CB_CATEGORY_ALPHANUMERIC, 1 },
903903
{ "YEAR-TO-YYYY", -1, 1, CB_INTR_YEAR_TO_YYYY,
904-
"cob_intr_year_to_yyyy",
904+
"CobolIntrinsic.funcYearToYyyy",
905905
CB_CATEGORY_NUMERIC, 0 }
906906
};
907907

0 commit comments

Comments
 (0)