1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
# frozen_string_literal: true
module Unparser
class Emitter
# Emitter for various variable accesses
class Variable < self
handle :ivar, :lvar, :cvar, :gvar, :back_ref
children :name
private
def dispatch
write(name.to_s)
end
end # Access
# Emitter for constant access
class Const < self
handle :const
children :scope, :name
private
def dispatch
emit_scope
write(name.to_s)
end
def emit_scope
return unless scope
visit(scope)
write('::') unless n_cbase?(scope)
end
end
# Emitter for nth_ref nodes (regexp captures)
class NthRef < self
PREFIX = '$'.freeze
handle :nth_ref
children :name
private
def dispatch
write(PREFIX)
write(name.to_s)
end
end # NthRef
end # Emitter
end # Unparser
|