diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-11-02 08:41:43 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-11-02 08:41:43 +0900 |
| commit | 13d0832965a36d2c16a71acf982b7c98c4c37af6 (patch) | |
| tree | 782a3a264606362d7310c5da5ffe12a30c1d2438 | |
| parent | 9a126278b6f0fcfbec9c4a2ee391290d3ce2122f (diff) | |
| download | mruby-13d0832965a36d2c16a71acf982b7c98c4c37af6.tar.gz mruby-13d0832965a36d2c16a71acf982b7c98c4c37af6.zip | |
allow quoted labels in hashes; fix #3231
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index fc2c65b7c..a00fd0c49 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -1089,7 +1089,7 @@ heredoc_end(parser_state *p) %token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL %token <nd> tINTEGER tFLOAT tCHAR tXSTRING tREGEXP -%token <nd> tSTRING tSTRING_PART tSTRING_MID +%token <nd> tSTRING tSTRING_PART tSTRING_MID tLABEL_END %token <nd> tNTH_REF tBACK_REF %token <num> tREGEXP_END @@ -3241,6 +3241,14 @@ assoc : arg_value tASSOC arg_value { $$ = cons(new_sym(p, $1), $2); } + | tSTRING_BEG tLABEL_END arg_value + { + $$ = cons(new_sym(p, new_strsym(p, $2)), $3); + } + | tSTRING_BEG string_rep tLABEL_END arg_value + { + $$ = cons(new_dsym(p, push($2, $3)), $4); + } ; operation : tIDENTIFIER @@ -4080,8 +4088,13 @@ parse_string(parser_state *p) return tREGEXP; } - yylval.nd = new_str(p, tok(p), toklen(p)); + if (IS_LABEL_SUFFIX(0)) { + p->lstate = EXPR_BEG; + nextc(p); + return tLABEL_END; + } + return tSTRING; } |
