diff --git a/src/language.yacc b/src/language.yacc index ffc29194d3b4214ef23aac6534b88bc8e4cc6435..0acfd26da91974b2d747c10dfe713f0aba9cad61 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -112,7 +112,7 @@ %token TOK_WHILE "while" %token TOK_XOR_EQ "^=" %token TOK_OPTIONAL "optional" -%token TOK_SAFE_INDEX "?->" +%token TOK_SAFE_INDEX "->?" %token TOK_SAFE_START_INDEX "[?" %token TOK_BITS "bits" %token TOK_AUTO_ID "auto" @@ -4227,7 +4227,7 @@ expr5: literal_expr } | expr4 TOK_SAFE_INDEX line_number_info TOK_IDENTIFIER { - /* A?->B to ((tmp=A) && tmp->B) */ + /* A->?B to ((tmp=A) && tmp->B) */ int temporary; if( $1 && ($1->token == F_LOCAL) ) { diff --git a/src/lexer.h b/src/lexer.h index 9b47ba85ee83c9059e9b59e0bd311657ba1def07..139a80850ae14f0af7c9cba2e160cdb94b22355e 100644 --- a/src/lexer.h +++ b/src/lexer.h @@ -1096,7 +1096,11 @@ unknown_directive: case '-': if(GOBBLE('=')) return TOK_SUB_EQ; - if(GOBBLE('>')) return TOK_ARROW; + if(GOBBLE('>')) + if(GOBBLE('?') ) /* ->? */ + return TOK_SAFE_INDEX; + else + return TOK_ARROW; if(GOBBLE('-')) return TOK_DEC; return '-'; @@ -1171,24 +1175,14 @@ unknown_directive: if(GOBBLE(':')) return TOK_LOR; - if(GOBBLE('-') ) /* safe index: ?-> or ?[] */ + if(GOBBLE('-') ) { - if( GOBBLE( '>' ) ) /* ?-> */ - return TOK_SAFE_INDEX; + if( GOBBLE( '>' ) ) { /* ?-> */ + return TOK_SAFE_INDEX; + } SKIPN(-1); /* Undo GOBBLE('-') above */ } - /* Probably wanted: - - ?. for safe constant index - ?[] for safe [] index - - They however conflict with valid ?: syntaxes. - */ - - /* if( GOBBLE('.' ) ) */ - /* return TOK_SAFE_INDEX; */ - /* FALLTHRU */ case ']':