Skip to content

Commit 18c757e

Browse files
committed
+ Added tLABEL. (brynary)
[git-p4: depot-paths = "//src/ruby_parser/dev/": change = 6728]
1 parent 8c54563 commit 18c757e

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

lib/ruby19_parser.y

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
77
kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER
88
kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD
99
kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
10-
k__FILE__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tNTH_REF
10+
k__FILE__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF
1111
tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS
1212
tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
1313
tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT
@@ -1845,9 +1845,9 @@ xstring_contents: none
18451845
{
18461846
result = s(:array, val[0], val[2])
18471847
}
1848-
| variable tCOLON arg_value
1848+
| tLABEL arg_value
18491849
{
1850-
result = s(:array, s(:lit, val[0].to_sym), val[2])
1850+
result = s(:array, s(:lit, val[0][0].to_sym), val[1])
18511851
}
18521852

18531853
operation: tIDENTIFIER | tCONSTANT | tFID

lib/ruby_lexer.rb

+14
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,20 @@ def process_token(command_state)
12651265
end
12661266
end
12671267

1268+
if lex_state == :expr_beg || lex_state == :expr_arg || lex_state == :expr_cmdarg
1269+
colon = src.scan(/:/)
1270+
1271+
if colon && src.peek(1) != ":"
1272+
src.unscan
1273+
self.lex_state == :expr_beg
1274+
src.scan(/:/)
1275+
self.yacc_value = [token, src.lineno]
1276+
return :tLABEL
1277+
end
1278+
1279+
src.unscan if colon
1280+
end
1281+
12681282
unless lex_state == :expr_dot then
12691283
# See if it is a reserved word.
12701284
keyword = RubyParser::Keyword.keyword token

test/test_ruby_lexer.rb

+11
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,17 @@ def test_yylex_assoc
127127
util_lex_token "=>", :tASSOC, "=>"
128128
end
129129

130+
def test_yylex_label
131+
util_lex_token "{a:", :tLBRACE, "{", :tLABEL, "a"
132+
end
133+
134+
def test_yylex_label_in_params
135+
util_lex_token "foo(a:",
136+
:tIDENTIFIER, "foo",
137+
:tLPAREN2, "(",
138+
:tLABEL, "a"
139+
end
140+
130141
def test_yylex_back_ref
131142
util_lex_token("[$&, $`, $', $+]",
132143
:tLBRACK, "[",

0 commit comments

Comments
 (0)