Skip to content

Commit

Permalink
- parse{23,24,25}.y: use only CMDARG/COND _PUSH/POP for cmdarg/cond m…
Browse files Browse the repository at this point in the history
…anagement. (bug #481)

This commit tracks upstream commit ruby/ruby@9c5d90b.
  • Loading branch information
iliabylich authored and whitequark committed Mar 30, 2018
1 parent 5ad9b91 commit ebcd32c
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 83 deletions.
16 changes: 9 additions & 7 deletions lib/parser/lexer.rl
Original file line number Diff line number Diff line change
Expand Up @@ -1021,6 +1021,13 @@ class Parser::Lexer
if current_literal.end_interp_brace_and_try_closing
if version?(18, 19)
emit(:tRCURLY, '}'.freeze, p - 1, p)
if @version < 24
@cond.lexpop
@cmdarg.lexpop
else
@cond.pop
@cmdarg.pop
end
else
emit(:tSTRING_DEND, '}'.freeze, p - 1, p)
end
Expand All @@ -1029,12 +1036,6 @@ class Parser::Lexer
@herebody_s = current_literal.saved_herebody_s
end

@cond.lexpop
if @version < 24
@cmdarg.lexpop
else
@cmdarg.pop
end

fhold;
fnext *next_state_for_literal(current_literal);
Expand Down Expand Up @@ -2228,10 +2229,11 @@ class Parser::Lexer
=> {
emit_table(PUNCTUATION)

@cond.lexpop
if @version < 24
@cond.lexpop
@cmdarg.lexpop
else
@cond.pop
@cmdarg.pop
end

Expand Down
38 changes: 18 additions & 20 deletions lib/parser/ruby24.y
Original file line number Diff line number Diff line change
Expand Up @@ -946,12 +946,11 @@ rule
}
| kBEGIN
{
result = @lexer.cmdarg.dup
@lexer.cmdarg.clear
@lexer.cmdarg.push(false)
}
bodystmt kEND
{
@lexer.cmdarg = val[1]
@lexer.cmdarg.pop
result = @builder.begin_keyword(val[0], val[2], val[3])
}
Expand Down Expand Up @@ -1116,7 +1115,7 @@ rule
| kCLASS cpath superclass
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.cmdarg.push(false)
@context.push(:class)
}
bodystmt kEND
Expand All @@ -1130,29 +1129,29 @@ rule
lt_t, superclass,
val[4], val[5])
@lexer.pop_cmdarg
@lexer.cmdarg.pop
@static_env.unextend
@context.pop
}
| kCLASS tLSHFT expr term
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.cmdarg.push(false)
@context.push(:sclass)
}
bodystmt kEND
{
result = @builder.def_sclass(val[0], val[1], val[2],
val[5], val[6])
@lexer.pop_cmdarg
@lexer.cmdarg.pop
@static_env.unextend
@context.pop
}
| kMODULE cpath
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.cmdarg.push(false)
}
bodystmt kEND
{
Expand All @@ -1163,21 +1162,21 @@ rule
result = @builder.def_module(val[0], val[1],
val[3], val[4])
@lexer.pop_cmdarg
@lexer.cmdarg.pop
@static_env.unextend
}
| kDEF fname
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.cmdarg.push(false)
@context.push(:def)
}
f_arglist bodystmt kEND
{
result = @builder.def_method(val[0], val[1],
val[3], val[4], val[5])
@lexer.pop_cmdarg
@lexer.cmdarg.pop
@static_env.unextend
@context.pop
}
Expand All @@ -1188,15 +1187,15 @@ rule
fname
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.cmdarg.push(false)
@context.push(:defs)
}
f_arglist bodystmt kEND
{
result = @builder.def_singleton(val[0], val[1], val[2],
val[4], val[6], val[7], val[8])
@lexer.pop_cmdarg
@lexer.cmdarg.pop
@static_env.unextend
@context.pop
}
Expand Down Expand Up @@ -1638,15 +1637,14 @@ opt_block_args_tail:
@static_env.extend_dynamic
}
{
result = @lexer.cmdarg.dup
@lexer.cmdarg.clear
@lexer.cmdarg.push(false)
}
opt_block_param compstmt
{
result = [ val[2], val[3] ]
@static_env.unextend
@lexer.cmdarg = val[1]
@lexer.cmdarg.pop
}
case_body: kWHEN args then compstmt cases
Expand Down Expand Up @@ -1845,13 +1843,13 @@ regexp_contents: # nothing
}
| tSTRING_DBEG
{
@lexer.push_cmdarg
@lexer.push_cond
@lexer.cmdarg.push(false)
@lexer.cond.push(false)
}
compstmt tSTRING_DEND
{
@lexer.pop_cmdarg
@lexer.pop_cond
@lexer.cmdarg.pop
@lexer.cond.pop
result = @builder.begin(val[0], val[2], val[3])
}
Expand Down
54 changes: 26 additions & 28 deletions lib/parser/ruby25.y
Original file line number Diff line number Diff line change
Expand Up @@ -956,12 +956,11 @@ rule
}
| kBEGIN
{
result = @lexer.cmdarg.dup
@lexer.cmdarg.clear
@lexer.cmdarg.push(false)
}
bodystmt kEND
{
@lexer.cmdarg = val[1]
@lexer.cmdarg.pop
result = @builder.begin_keyword(val[0], val[2], val[3])
}
Expand Down Expand Up @@ -1098,8 +1097,8 @@ rule
| kCLASS cpath superclass
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.push_cond
@lexer.cmdarg.push(false)
@lexer.cond.push(false)
@context.push(:class)
}
bodystmt kEND
Expand All @@ -1113,32 +1112,32 @@ rule
lt_t, superclass,
val[4], val[5])
@lexer.pop_cmdarg
@lexer.pop_cond
@lexer.cmdarg.pop
@lexer.cond.pop
@static_env.unextend
@context.pop
}
| kCLASS tLSHFT expr term
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.push_cond
@lexer.cmdarg.push(false)
@lexer.cond.push(false)
@context.push(:sclass)
}
bodystmt kEND
{
result = @builder.def_sclass(val[0], val[1], val[2],
val[5], val[6])
@lexer.pop_cmdarg
@lexer.pop_cond
@lexer.cmdarg.pop
@lexer.cond.pop
@static_env.unextend
@context.pop
}
| kMODULE cpath
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.cmdarg.push(false)
}
bodystmt kEND
{
Expand All @@ -1149,23 +1148,23 @@ rule
result = @builder.def_module(val[0], val[1],
val[3], val[4])
@lexer.pop_cmdarg
@lexer.cmdarg.pop
@static_env.unextend
}
| kDEF fname
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.push_cond
@lexer.cmdarg.push(false)
@lexer.cond.push(false)
@context.push(:def)
}
f_arglist bodystmt kEND
{
result = @builder.def_method(val[0], val[1],
val[3], val[4], val[5])
@lexer.pop_cmdarg
@lexer.pop_cond
@lexer.cmdarg.pop
@lexer.cond.pop
@static_env.unextend
@context.pop
}
Expand All @@ -1176,17 +1175,17 @@ rule
fname
{
@static_env.extend_static
@lexer.push_cmdarg
@lexer.push_cond
@lexer.cmdarg.push(false)
@lexer.cond.push(false)
@context.push(:defs)
}
f_arglist bodystmt kEND
{
result = @builder.def_singleton(val[0], val[1], val[2],
val[4], val[6], val[7], val[8])
@lexer.pop_cmdarg
@lexer.pop_cond
@lexer.cmdarg.pop
@lexer.cond.pop
@static_env.unextend
@context.pop
}
Expand Down Expand Up @@ -1635,15 +1634,14 @@ opt_block_args_tail:
@static_env.extend_dynamic
}
{
result = @lexer.cmdarg.dup
@lexer.cmdarg.clear
@lexer.cmdarg.push(false)
}
opt_block_param bodystmt
{
result = [ val[2], val[3] ]
@static_env.unextend
@lexer.cmdarg = val[1]
@lexer.cmdarg.pop
}
case_body: kWHEN args then compstmt cases
Expand Down Expand Up @@ -1842,13 +1840,13 @@ regexp_contents: # nothing
}
| tSTRING_DBEG
{
@lexer.push_cmdarg
@lexer.push_cond
@lexer.cmdarg.push(false)
@lexer.cond.push(false)
}
compstmt tSTRING_DEND
{
@lexer.pop_cmdarg
@lexer.pop_cond
@lexer.cmdarg.pop
@lexer.cond.pop
result = @builder.begin(val[0], val[2], val[3])
}
Expand Down
Loading

0 comments on commit ebcd32c

Please sign in to comment.