summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-05-09 04:53:16 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-05-09 04:53:16 +0000
commit0fb30e32b8e785b3804f7e78da3806ea1614dfcb (patch)
tree8ca11a61af0311dda461853cc8961a9bca899124 /parse.y
parente8bf824c5cf7cacf8b088f07d173346b5ec6bc0c (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.y27
1 files changed, 20 insertions, 7 deletions
diff --git a/parse.y b/parse.y
index ff94cca7b2..893a3c8675 100644
--- a/parse.y
+++ b/parse.y
@@ -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 ||