diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index 5be51cf8ee42e4cb7e863d1c3278f605a3efd15e..440c75dc3ea5c412d6d2ee8e0cd1de68bed2f733 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -11332,6 +11332,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 10cb2654caa41aa386eaff7c52c6b377d2415bf9..ab023df251f431e55f089622e86d12cb4b97c4ce 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..70db95b01c7d6b6dfea28c0a85950ace8690605d 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 & dialect_gcc_e ); +} + static inline bool dialect_ibm() { return dialect_ibm_e == (cbl_dialect & dialect_ibm_e); }