1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* parse.y (yylex): operators in the "op" rule should make

lex_state EXPR_ARG on EXPR_FNAME and EXPR_DOT.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2090 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2002-02-19 05:39:06 +00:00
parent d1ca5e6d6a
commit 87bf8b1dc3
2 changed files with 92 additions and 27 deletions

View file

@ -1,3 +1,8 @@
Tue Feb 19 14:24:36 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* parse.y (yylex): operators in the "op" rule should make
lex_state EXPR_ARG on EXPR_FNAME and EXPR_DOT.
Tue Feb 19 13:38:10 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (rb_eval_string_wrap): should hide the toplevel local

114
parse.y
View file

@ -3004,31 +3004,38 @@ yylex()
case '*':
if ((c = nextc()) == '*') {
lex_state = EXPR_BEG;
if (nextc() == '=') {
lex_state = EXPR_BEG;
yylval.id = tPOW;
return tOP_ASGN;
}
pushback(c);
return tPOW;
}
if (c == '=') {
yylval.id = '*';
lex_state = EXPR_BEG;
return tOP_ASGN;
}
pushback(c);
if (IS_ARG() && space_seen && !ISSPACE(c)){
rb_warning("`*' interpreted as argument prefix");
c = tSTAR;
}
else if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
c = tSTAR;
c = tPOW;
}
else {
c = '*';
if (c == '=') {
yylval.id = '*';
lex_state = EXPR_BEG;
return tOP_ASGN;
}
pushback(c);
if (IS_ARG() && space_seen && !ISSPACE(c)){
rb_warning("`*' interpreted as argument prefix");
c = tSTAR;
}
else if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
c = tSTAR;
}
else {
c = '*';
}
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
lex_state = EXPR_BEG;
return c;
case '!':
@ -3064,7 +3071,12 @@ yylex()
}
}
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
if ((c = nextc()) == '=') {
if ((c = nextc()) == '=') {
return tEQQ;
@ -3099,7 +3111,12 @@ yylex()
}
pushback(c2);
}
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
if (c == '=') {
if ((c = nextc()) == '>') {
return tCMP;
@ -3109,6 +3126,7 @@ yylex()
}
if (c == '<') {
if (nextc() == '=') {
lex_state = EXPR_BEG;
yylval.id = tLSHFT;
return tOP_ASGN;
}
@ -3119,12 +3137,18 @@ yylex()
return '<';
case '>':
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
if ((c = nextc()) == '=') {
return tGEQ;
}
if (c == '>') {
if ((c = nextc()) == '=') {
lex_state = EXPR_BEG;
yylval.id = tRSHFT;
return tOP_ASGN;
}
@ -3193,12 +3217,17 @@ yylex()
else {
c = '&';
}
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG;
}
return c;
case '|':
lex_state = EXPR_BEG;
if ((c = nextc()) == '|') {
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
yylval.id = tOROP;
return tOP_ASGN;
@ -3206,16 +3235,24 @@ yylex()
pushback(c);
return tOROP;
}
else if (c == '=') {
if (c == '=') {
lex_state = EXPR_BEG;
yylval.id = '|';
return tOP_ASGN;
}
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
}
else {
lex_state = EXPR_BEG;
}
pushback(c);
return '|';
case '+':
c = nextc();
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
if (c == '@') {
return tUPLUS;
}
@ -3245,6 +3282,7 @@ yylex()
case '-':
c = nextc();
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
if (c == '@') {
return tUMINUS;
}
@ -3509,15 +3547,26 @@ yylex()
return parse_regx('/', '/');
}
}
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
return '/';
case '^':
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
lex_state = EXPR_BEG;
yylval.id = '^';
return tOP_ASGN;
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
pushback(c);
return '^';
@ -3533,7 +3582,12 @@ yylex()
pushback(c);
}
}
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
return '~';
case '(':
@ -3557,6 +3611,7 @@ yylex()
case '[':
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
if ((c = nextc()) == ']') {
if ((c = nextc()) == '=') {
return tASET;
@ -3656,7 +3711,12 @@ yylex()
if (IS_ARG() && space_seen && !ISSPACE(c)) {
goto quotation;
}
lex_state = EXPR_BEG;
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
pushback(c);
return '%';