diff --git a/lib/yarp.rb b/lib/yarp.rb index 01c0d5ec71..d74ad47db3 100644 --- a/lib/yarp.rb +++ b/lib/yarp.rb @@ -44,6 +44,10 @@ module YARP @length = length end + def inspect + "#" + end + # The source code that this location represents. def slice source.slice(start_offset, length) diff --git a/test/yarp/fixtures/global_variables.txt b/test/yarp/fixtures/global_variables.txt index d2a631136f..3dc52722a0 100644 --- a/test/yarp/fixtures/global_variables.txt +++ b/test/yarp/fixtures/global_variables.txt @@ -36,6 +36,8 @@ $DEBUG $FILENAME +$0 + $-0 $LOADED_FEATURES @@ -80,6 +82,8 @@ $-K :$FILENAME +:$0 + :$-0 :$LOADED_FEATURES diff --git a/test/yarp/parse_test.rb b/test/yarp/parse_test.rb index 4d108ddfab..3eff7d447f 100644 --- a/test/yarp/parse_test.rb +++ b/test/yarp/parse_test.rb @@ -42,6 +42,11 @@ class ParseTest < Test::Unit::TestCase end end + def test_parse_dollar0 + parsed_result = YARP.parse("$0", "-e") + assert_equal 2, parsed_result.value.location.length + end + def test_parse_takes_file_path filepath = "filepath.rb" parsed_result = YARP.parse("def foo; __FILE__; end", filepath) diff --git a/test/yarp/snapshots/global_variables.txt b/test/yarp/snapshots/global_variables.txt index 2b3e1447fd..d0a9f782e0 100644 --- a/test/yarp/snapshots/global_variables.txt +++ b/test/yarp/snapshots/global_variables.txt @@ -1,6 +1,6 @@ -ProgramNode(0...340)( +ProgramNode(0...349)( [], - StatementsNode(0...340)( + StatementsNode(0...349)( [GlobalVariableReadNode(0...16)(), GlobalVariableReadNode(18...20)(), GlobalVariableReadNode(22...25)(), @@ -20,31 +20,33 @@ ProgramNode(0...340)( GlobalVariableReadNode(101...103)(), GlobalVariableReadNode(105...111)(), GlobalVariableReadNode(113...122)(), - GlobalVariableReadNode(124...127)(), - GlobalVariableReadNode(129...145)(), - GlobalVariableReadNode(147...155)(), - GlobalVariableReadNode(157...160)(), - SymbolNode(162...179)((162...163), (163...179), nil, "$global_variable"), - SymbolNode(181...184)((181...182), (182...184), nil, "$_"), - SymbolNode(186...190)((186...187), (187...190), nil, "$-w"), - SymbolNode(192...203)((192...193), (193...203), nil, "$LOAD_PATH"), - SymbolNode(205...212)((205...206), (206...212), nil, "$stdin"), - SymbolNode(214...222)((214...215), (215...222), nil, "$stdout"), - SymbolNode(224...232)((224...225), (225...232), nil, "$stderr"), - SymbolNode(234...237)((234...235), (235...237), nil, "$!"), - SymbolNode(239...242)((239...240), (240...242), nil, "$?"), - SymbolNode(244...247)((244...245), (245...247), nil, "$~"), - SymbolNode(249...252)((249...250), (250...252), nil, "$&"), - SymbolNode(254...257)((254...255), (255...257), nil, "$`"), - SymbolNode(259...262)((259...260), (260...262), nil, "$'"), - SymbolNode(264...267)((264...265), (265...267), nil, "$+"), - SymbolNode(269...272)((269...270), (270...272), nil, "$:"), - SymbolNode(274...277)((274...275), (275...277), nil, "$;"), - SymbolNode(279...286)((279...280), (280...286), nil, "$DEBUG"), - SymbolNode(288...298)((288...289), (289...298), nil, "$FILENAME"), - SymbolNode(300...304)((300...301), (301...304), nil, "$-0"), - SymbolNode(306...323)((306...307), (307...323), nil, "$LOADED_FEATURES"), - SymbolNode(325...334)((325...326), (326...334), nil, "$VERBOSE"), - SymbolNode(336...340)((336...337), (337...340), nil, "$-K")] + GlobalVariableReadNode(124...126)(), + GlobalVariableReadNode(128...131)(), + GlobalVariableReadNode(133...149)(), + GlobalVariableReadNode(151...159)(), + GlobalVariableReadNode(161...164)(), + SymbolNode(166...183)((166...167), (167...183), nil, "$global_variable"), + SymbolNode(185...188)((185...186), (186...188), nil, "$_"), + SymbolNode(190...194)((190...191), (191...194), nil, "$-w"), + SymbolNode(196...207)((196...197), (197...207), nil, "$LOAD_PATH"), + SymbolNode(209...216)((209...210), (210...216), nil, "$stdin"), + SymbolNode(218...226)((218...219), (219...226), nil, "$stdout"), + SymbolNode(228...236)((228...229), (229...236), nil, "$stderr"), + SymbolNode(238...241)((238...239), (239...241), nil, "$!"), + SymbolNode(243...246)((243...244), (244...246), nil, "$?"), + SymbolNode(248...251)((248...249), (249...251), nil, "$~"), + SymbolNode(253...256)((253...254), (254...256), nil, "$&"), + SymbolNode(258...261)((258...259), (259...261), nil, "$`"), + SymbolNode(263...266)((263...264), (264...266), nil, "$'"), + SymbolNode(268...271)((268...269), (269...271), nil, "$+"), + SymbolNode(273...276)((273...274), (274...276), nil, "$:"), + SymbolNode(278...281)((278...279), (279...281), nil, "$;"), + SymbolNode(283...290)((283...284), (284...290), nil, "$DEBUG"), + SymbolNode(292...302)((292...293), (293...302), nil, "$FILENAME"), + SymbolNode(304...307)((304...305), (305...307), nil, "$0"), + SymbolNode(309...313)((309...310), (310...313), nil, "$-0"), + SymbolNode(315...332)((315...316), (316...332), nil, "$LOADED_FEATURES"), + SymbolNode(334...343)((334...335), (335...343), nil, "$VERBOSE"), + SymbolNode(345...349)((345...346), (346...349), nil, "$-K")] ) ) diff --git a/yarp/yarp.c b/yarp/yarp.c index 7b91b04e19..5957182d78 100644 --- a/yarp/yarp.c +++ b/yarp/yarp.c @@ -4868,7 +4868,7 @@ lex_global_variable(yp_parser_t *parser) { parser->current.end++; size_t width; - if ((width = char_is_identifier(parser, parser->current.end)) > 0) { + if (parser->current.end < parser->end && (width = char_is_identifier(parser, parser->current.end)) > 0) { do { parser->current.end += width; } while (parser->current.end < parser->end && (width = char_is_identifier(parser, parser->current.end)) > 0);