diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y index 6e53f1b64907bda8323a13904a4e9e6095b57847..d38f3fb6703a6c3b727c92ba10ccea3f8b99e85c 100644 --- a/gcc/cobol/cdf.y +++ b/gcc/cobol/cdf.y @@ -249,7 +249,7 @@ apply_cdf_turn( exception_turns_t& turns ) { %type <cdfarg> namelit name_any name_one %type <string> name subscript subscripts inof %token <boolean> BOOL -%token <number> FEATURE 361 NUMBER EXCEPTION_NAME 279 +%token <number> FEATURE 361 NUMBER 302 EXCEPTION_NAME 279 %type <cdfval> cdf_expr %type <cdfval> cdf_relexpr cdf_reloper cdf_and cdf_bool_expr @@ -280,18 +280,18 @@ apply_cdf_turn( exception_turns_t& turns ) { %token AS 451 CONSTANT 357 DEFINED 359 %type <boolean> DEFINED %token OTHER 671 PARAMETER_kw 364 OFF 660 OVERRIDE 365 -%token THRU 908 -%token TRUE_kw 782 +%token THRU 909 +%token TRUE_kw 783 -%token TURN 784 CHECKING 475 LOCATION 623 ON 662 WITH 809 +%token TURN 785 CHECKING 475 LOCATION 623 ON 662 WITH 811 -%left OR 909 -%left AND 910 -%right NOT 911 -%left '<' '>' '=' NE 912 LE 913 GE 914 +%left OR 910 +%left AND 911 +%right NOT 912 +%left '<' '>' '=' NE 913 LE 914 GE 915 %left '-' '+' %left '*' '/' -%right NEG 915 +%right NEG 916 %define api.prefix {ydf} %define api.token.prefix{YDF_} diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index bec4ad4fb8033fe413bac0a1e5d31f675128bdb6..a549db5cd8c08f4525c685b4e35109a8b2bd23f5 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -14756,7 +14756,6 @@ parser_symbol_add(struct cbl_field_t *new_var ) if( new_var->type == FldClass && new_var->level != 88 ) { new_var->data.initial = get_class_condition_string(new_var); - //// new_var->attr |= class_is_string_e; not used? } if( new_var->type == FldLiteralA ) diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index 1cbeba64eb6005cbe3215ca66ef3e028de01eff7..848dbc9ab899e82fe72b6aff22429f767f40a4c5 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -721,7 +721,7 @@ SEPARATE SEQUENCE SEQUENTIAL SHARING SIGN SIN SIZE SIZE_ERROR SOURCE SOURCE_COMPUTER SPACES SPECIAL_NAMES SQRT STANDARD STANDARD_ALPHABET - STANDARD_1 STANDARD_DEVIATION STATUS + STANDARD_1 STANDARD_DEVIATION STATUS STRONG STDERR STDIN STDOUT LITERAL SUBSTITUTE SUM SWITCH SYMBOL SYMBOLIC SYNCHRONIZED SYSIN SYSIPT SYSLST SYSOUT SYSPCH SYSPUNCH @@ -730,7 +730,7 @@ TEST_DAY_YYYYDDD TEST_FORMATTED_DATETIME TEST_NUMVAL TEST_NUMVAL_C TEST_NUMVAL_F THAN TIME TIMES TO TOP TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw TRY - TURN TYPE + TURN TYPE TYPEDEF ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL UP UPON UPOS UPPER_CASE UPSI USAGE USING USUBSTR USUPPLEMENTARY @@ -759,7 +759,7 @@ PREFIXED PREVIOUS PROHIBITED RELATION REQUIRED REVERSE_VIDEO ROUNDING SECONDS SECURE SHORT SIGNED STANDARD_BINARY - STANDARD_DECIMAL STATEMENT STEP STRONG STRUCTURE + STANDARD_DECIMAL STATEMENT STEP STRUCTURE TOWARD_GREATER TOWARD_LESSER TRUNCATION UCS_4 UNDERLINE UNSIGNED UTF_16 UTF_8 @@ -3299,6 +3299,7 @@ data_clause: any_length { $$ = any_length_e; } | same_clause { $$ = same_clause_e; } | sign_clause { $$ = sign_clause_e; } | synched_clause { $$ = synched_clause_e; } + | typedef_clause { $$ = typedef_clause_e; } | usage_clause { $$ = usage_clause_e; } | value_clause { $$ = value_clause_e; cbl_field_t *field = current_field(); @@ -3841,6 +3842,14 @@ sign_separate: %empty { $$ = false; } | SEPARATE { $$ = true; } ; +typedef_clause: is TYPEDEF strong + { + cbl_field_t *field = current_field(); + field->attr |= typedef_e; + yywarn("warning: TYPEDEF not implemented"); + } + ; + volatile_clause: VOLATILE { @@ -9360,14 +9369,16 @@ record: %empty sign: %empty | SIGN ; - status: %empty | STATUS ; +strong: %empty + | STRONG + ; + times: %empty | TIMES ; - then: %empty | THEN ; diff --git a/gcc/cobol/parse_ante.h b/gcc/cobol/parse_ante.h index ae62c9b741e36ca845ec969056286cf3558ed730..f185636d3941cb86c09c12b9ea1f6cdfb17ba5ec 100644 --- a/gcc/cobol/parse_ante.h +++ b/gcc/cobol/parse_ante.h @@ -200,6 +200,7 @@ enum data_clause_t { based_clause_e = 0x0800, same_clause_e = 0x1000, volatile_clause_e = 0x2000, + typedef_clause_e = 0x4000, }; static inline bool diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l index d1fd0b9edfca5515f0369c9ce8c487d70cdd366b..3cdfd0f75317665a1d1dfb19bfd0c41df2b0cb64 100644 --- a/gcc/cobol/scan.l +++ b/gcc/cobol/scan.l @@ -1046,12 +1046,14 @@ USE({SPC}FOR)? { return USE; } SIGN { return SIGN; } SIZE { return SIZE; } STANDARD { return STANDARD; } + STRONG { return STRONG; } SYNC(HRONIZED)? { return SYNCHRONIZED; } TIMES { return TIMES; } TIMES[[:space::]]+DEPENDING { return DEPENDING; } TO { return TO; } TRAILING { return TRAILING; } TRUE { return TRUE_kw; } + TYPEDEF { return TYPEDEF; } VARYING { return VARYING; } VOLATILE { return VOLATILE; } WHEN { return WHEN; } diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc index 73dd70c93a3ac8b5a4e8b670d8d47bebb43ccc6e..ee1170a25f5bbf9702dd153b6ee36c3a5dccfddb 100644 --- a/gcc/cobol/symbols.cc +++ b/gcc/cobol/symbols.cc @@ -3004,7 +3004,6 @@ temporaries_t::literal( const char value[], uint32_t len, cbl_field_attr_t attr __func__, __LINE__, field->data.initial, field->attr, attr); } - assert(field->data.capacity == len); return field; } return literals[key] = new_literal_add(value, len, attr); diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h index cd4dca5a888e8dc3724ef9559b727609869d1a21..18aada2201ebd693f3b4e7b8f359e5828fc028c8 100644 --- a/gcc/cobol/symbols.h +++ b/gcc/cobol/symbols.h @@ -273,7 +273,6 @@ enum cbl_field_attr_t { intermediate_e = 0x0000001000, // Used for intermediate arithmetic anyhow_e = 0x0000004000, // compares true to anything. (Note the break in the bit pattern) otherhow_e = 0x0000006000, // compares true and returns true - class_is_string_DNU = 0x0000008000, // as opposed to numeric embiggened_e = 0x0000008000, // redefined numeric made 64-bit by USAGE POINTER thru_fact_e = 0x0000010000, // logical value was established by THRU scaled_e = 0x0000020000, @@ -299,6 +298,7 @@ enum cbl_field_attr_t { big_endian_e = 0x1000000000, // Indicates a value is big-endian same_as_e = 0x2000000000, // Field produced by SAME AS (cannot take new members) record_key_e = 0x4000000000, + typedef_e = 0x8000000000, // IS TYPEDEF }; // This constant establishes the maximum number of digits in a fixed point