diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index ee779e10b88d3d4c49f579492b49463541697e52..b0d9a6b283ff78c3a88107323b63df1a3206f184 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -11366,6 +11366,7 @@ cobol_dialect_set( cbl_dialect_t dialect ) { cbl_dialect = dialect; if( dialect == dialect_ibm_e ) cobol_gcobol_feature_set(feature_embiggen_e); } +cbl_dialect_t cobol_dialect() { return cbl_dialect; } static bool internal_ebcdic_locked = false; diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l index 2eb0373408949b3d89de10440773fda235ff1a54..b5c0978ee594320bc45e228e6d2362961764b3a2 100644 --- a/gcc/cobol/scan.l +++ b/gcc/cobol/scan.l @@ -969,11 +969,15 @@ USE({SPC}FOR)? { return USE; } OBJECT{SPC}REFERENCE { yyerror("error: unimplemented USAGE type: OBJECT REFERENCE"); } PACKED-DECIMAL { return PACKED_DECIMAL; } + POINTER { return POINTER; } FUNCTION-POINTER { return POINTER; } PROGRAM-POINTER { return POINTER; } - PROCEDURE-POINTER { if( !dialect_ibm() ) yyerror("%s requires '-dialect ibm'"); - return POINTER; } // return it anyway - POINTER { return POINTER; } + + PROCEDURE-POINTER { if( dialect_gcc() ) { + yyerror("%s requires -dialect ibm or mf"); + } + return POINTER; // return it anyway + } ZEROE?S? { return ZERO; } SPACES? { yylval.string = NULL; return SPACES; } diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h index aff38a8eaa3ee3693af8eefe96411ca21e9894b6..5f265b3956395da6d62d412e00d6e2670fc6fe48 100644 --- a/gcc/cobol/symbols.h +++ b/gcc/cobol/symbols.h @@ -87,8 +87,13 @@ enum cbl_dialect_t { extern cbl_dialect_t cbl_dialect; void cobol_dialect_set( cbl_dialect_t dialect ); +cbl_dialect_t dialect_is(); //// bool dialect_gnu() { return dialect_gnu_e == (cbl_dialect & dialect_gnu_e); } +static inline bool dialect_gcc() { + return dialect_gcc_e == cbl_dialect; +} + static inline bool dialect_ibm() { return dialect_ibm_e == (cbl_dialect & dialect_ibm_e); }