summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJemma Issroff <jemmaissroff@gmail.com>2023-07-06 13:26:26 -0400
committerGitHub <noreply@github.com>2023-07-06 13:26:26 -0400
commit06c2d3e0a04600981e147ca8ee32b6e4048c48ff (patch)
treeccfc5ae4ab065777f0029a5493ab0cf17c2b18c4
parent055f7219bc4ace48270b09630626305784d5a87e (diff)
Resync YARP (#8036)
It got out of sync again. After this re-sync, it should happen cherry-picking automatically.
Notes
Notes: Merged-By: jemmaissroff
-rw-r--r--lib/yarp.rb4
-rw-r--r--test/yarp/fixtures/global_variables.txt4
-rw-r--r--test/yarp/parse_test.rb5
-rw-r--r--test/yarp/snapshots/global_variables.txt58
-rw-r--r--yarp/yarp.c2
5 files changed, 44 insertions, 29 deletions
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
+ "#<YARP::Location @start_offset=#{@start_offset} @length=#{@length}>"
+ 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);