Extend Ripper DSL to set to pseudo variables other than `$$`

This commit is contained in:
Nobuyoshi Nakada 2019-10-19 15:57:25 +09:00
Родитель 5c81e19b19
Коммит 1d435bd51a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4BC7D6DF58D8DF60
1 изменённых файлов: 6 добавлений и 4 удалений

Просмотреть файл

@ -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