summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-21 02:31:40 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-21 02:31:40 +0000
commitf8e51f7e5958a4962d620c66af2e93cbf6f52f11 (patch)
tree1629dcf996f5e8de230c686fbbb14f11c3c1664d /parse.y
parent8a269f85a0e6aaaecfdadcd185df7a686b45696e (diff)
* parse.y (parser_yylex): abandoned EXPR_VCALL.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27427 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y22
1 files changed, 11 insertions, 11 deletions
diff --git a/parse.y b/parse.y
index d22253bff5..f8ff74e406 100644
--- a/parse.y
+++ b/parse.y
@@ -68,7 +68,6 @@ enum lex_state_e {
EXPR_DOT, /* right after `.' or `::', no reserved words. */
EXPR_CLASS, /* immediate after `class', no here document. */
EXPR_VALUE, /* alike EXPR_BEG but label is disallowed. */
- EXPR_VCALL, /* immediate after vcall */
EXPR_MAX_STATE
};
@@ -6415,9 +6414,9 @@ parser_prepare(struct parser_params *parser)
}
#define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
-#define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_VCALL)
+#define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG)
#define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
-#define IS_SPCARG(c) ((IS_ARG() || lex_state == EXPR_VCALL) && space_seen && !ISSPACE(c))
+#define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
static int
parser_yylex(struct parser_params *parser)
@@ -6662,7 +6661,8 @@ parser_yylex(struct parser_params *parser)
if (c == '<' &&
lex_state != EXPR_DOT &&
lex_state != EXPR_CLASS &&
- (!(IS_ARG() || IS_END()) || space_seen)) {
+ !IS_END() &&
+ (!IS_ARG() || space_seen)) {
int token = heredoc_identifier();
if (token) return token;
}
@@ -6737,11 +6737,11 @@ parser_yylex(struct parser_params *parser)
return tSTRING_BEG;
case '?':
- c = nextc();
- if (IS_END() && (!space_seen || ISSPACE(c))) {
+ if (IS_END()) {
lex_state = EXPR_VALUE;
return '?';
}
+ c = nextc();
if (c == -1) {
compile_error(PARSER_ARG "incomplete character syntax");
return 0;
@@ -7315,7 +7315,7 @@ parser_yylex(struct parser_params *parser)
CMDARG_PUSH(0);
return tLAMBEG;
}
- if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_VCALL)
+ if (IS_ARG() || lex_state == EXPR_END)
c = '{'; /* block (primary) */
else if (lex_state == EXPR_ENDARG)
c = tLBRACE_ARG; /* block (expr) */
@@ -7623,7 +7623,7 @@ parser_yylex(struct parser_params *parser)
}
if ((lex_state == EXPR_BEG && !cmd_state) ||
- IS_ARG() || lex_state == EXPR_VCALL) {
+ IS_ARG()) {
if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
lex_state = EXPR_BEG;
nextc();
@@ -7685,9 +7685,9 @@ parser_yylex(struct parser_params *parser)
ID ident = TOK_INTERN(!ENC_SINGLE(mb));
set_yylval_name(ident);
- if (last_state != EXPR_DOT && last_state != EXPR_FNAME && is_local_id(ident)) {
- lex_state = EXPR_VCALL;
- }
+ if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
+ lex_state = EXPR_END;
+ }
}
return result;
}