From 1d435bd51aeca75f6e437bc92de2271a716a1ced Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 19 Oct 2019 15:57:25 +0900 Subject: Extend Ripper DSL to set to pseudo variables other than `$$` --- ext/ripper/tools/dsl.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'ext/ripper/tools/dsl.rb') diff --git a/ext/ripper/tools/dsl.rb b/ext/ripper/tools/dsl.rb index 34b435e7c3..925c09b14b 100644 --- a/ext/ripper/tools/dsl.rb +++ b/ext/ripper/tools/dsl.rb @@ -12,7 +12,11 @@ class DSL @events = {} @error = options.include?("error") @brace = options.include?("brace") - @final = options.include?("final") + if options.include?("final") + @final = "p->result" + else + @final = (options.grep(/\A\$[$\d]\z/)[0] || "$$") + end @vars = 0 # create $1 == "$1", $2 == "$2", ... @@ -37,9 +41,7 @@ class DSL undef class def generate - s = "$$" - s = "p->result" if @final - s = "#@code#{ s }=#@last_value;" + s = "#@code#@final=#@last_value;" s = "{VALUE #{ (1..@vars).map {|v| "v#{ v }" }.join(",") };#{ s }}" if @vars > 0 s << "ripper_error(p);" if @error s = "{#{ s }}" if @brace -- cgit v1.2.3