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:
		
							parent
							
								
									d1ca5e6d6a
								
							
						
					
					
						commit
						87bf8b1dc3
					
				
					 2 changed files with 92 additions and 27 deletions
				
			
		| 
						 | 
				
			
			@ -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
									
										
									
									
									
								
							
							
						
						
									
										114
									
								
								parse.y
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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 '%';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue