diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-05-09 04:53:16 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-05-09 04:53:16 +0000 |
commit | 0fb30e32b8e785b3804f7e78da3806ea1614dfcb (patch) | |
tree | 8ca11a61af0311dda461853cc8961a9bca899124 /parse.y | |
parent | e8bf824c5cf7cacf8b088f07d173346b5ec6bc0c (diff) |
2000-05-09
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 27 |
1 files changed, 20 insertions, 7 deletions
@@ -531,6 +531,10 @@ mlhs_node : variable { $$ = attrset($1, $3); } + | primary '.' tCONSTANT + { + $$ = attrset($1, $3); + } | backref { rb_backref_error($1); @@ -553,6 +557,10 @@ lhs : variable { $$ = attrset($1, $3); } + | primary '.' tCONSTANT + { + $$ = attrset($1, $3); + } | backref { rb_backref_error($1); @@ -3172,13 +3180,16 @@ yylex() case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + tokadd('$'); while (ISDIGIT(c)) { tokadd(c); c = nextc(); } + if (is_identchar(c)) + break; pushback(c); tokfix(); - yylval.node = NEW_NTH_REF(atoi(tok())); + yylval.node = NEW_NTH_REF(atoi(tok()+1)); return tNTH_REF; default: @@ -3232,7 +3243,7 @@ yylex() tokfix(); { - int result; + int result = 0; switch (tok()[0]) { case '$': @@ -3260,14 +3271,10 @@ yylex() } } - if (ISUPPER(tok()[0])) { - result = tCONSTANT; - } - else if (toklast() == '!' || toklast() == '?') { + if (toklast() == '!' || toklast() == '?') { result = tFID; } else { - result = tIDENTIFIER; if (lex_state == EXPR_FNAME) { if ((c = nextc()) == '=' && !peek('=') && !peek('~')) { tokadd(c); @@ -3276,6 +3283,12 @@ yylex() pushback(c); } } + if (result == 0 && ISUPPER(tok()[0])) { + result = tCONSTANT; + } + else { + result = tIDENTIFIER; + } } if (lex_state == EXPR_BEG || lex_state == EXPR_DOT || |