public
Created

  • Download Gist
gistfile1.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
class Acceptor
attr_reader :things
def initialize
@things = {}
yield self
end
def method_missing(s, a)
@things[s] = a
end
end
 
def macro(name, &block)
params = Acceptor.new(&block).things
eval <<-EOC
class #{name} < SyntaxNode
def initialize
#{params.map { |k,v| "@#{k} = @elements[#{v}]" }.join("\n")}
end
end
EOC
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.