diff --git a/src/lex.ll b/src/lex.ll --- a/src/lex.ll +++ b/src/lex.ll @@ -935,6 +935,7 @@ "^" { LEXER_DEBUG ("^"); BIN_OP_RETURN (POW, false, false); } "**" { LEXER_DEBUG ("**"); XBIN_OP_RETURN (POW, false, false); } "=" { LEXER_DEBUG ("="); BIN_OP_RETURN ('=', true, false); } +":=" { LEXER_DEBUG (":="); BIN_OP_RETURN (INIT_ASSIGN, true, false); } "&&" { LEXER_DEBUG ("&&"); BIN_OP_RETURN (EXPR_AND_AND, false, false); } "||" { LEXER_DEBUG ("||"); BIN_OP_RETURN (EXPR_OR_OR, false, false); } "<<" { LEXER_DEBUG ("<<"); XBIN_OP_RETURN (LSHIFT, false, false); } @@ -3624,6 +3625,7 @@ switch (tok) { case '=': std::cerr << "'='\n"; break; + case INIT_ASSIGN: std::cerr << "':='\n"; break; case ':': std::cerr << "':'\n"; break; case '-': std::cerr << "'-'\n"; break; case '+': std::cerr << "'+'\n"; break; diff --git a/src/oct-parse.yy b/src/oct-parse.yy --- a/src/oct-parse.yy +++ b/src/oct-parse.yy @@ -429,7 +429,7 @@ } // Tokens with line and column information. -%token '=' ':' '-' '+' '*' '/' +%token '=' INIT_ASSIGN ':' '-' '+' '*' '/' %token ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ POW_EQ %token EMUL_EQ EDIV_EQ ELEFTDIV_EQ EPOW_EQ AND_EQ OR_EQ %token LSHIFT_EQ RSHIFT_EQ LSHIFT RSHIFT @@ -1024,6 +1024,16 @@ { $$ = new tree_decl_elt ($1); } | identifier '=' decl_param_init expression { + // FIXME -- should we warn about using '=' in + // initialization expression instead of ':='? + // Should '=' in this context be deprecated and + // eventually removed? + + Lexer_flags.looking_at_initializer_expression = false; + $$ = new tree_decl_elt ($1, $4); + } + | identifier INIT_ASSIGN decl_param_init expression + { lexer_flags.looking_at_initializer_expression = false; $$ = new tree_decl_elt ($1, $4); }