Skip to content

Instantly share code, notes, and snippets.

@burke
Created August 31, 2011 00:13
Show Gist options
  • Save burke/1182490 to your computer and use it in GitHub Desktop.
Save burke/1182490 to your computer and use it in GitHub Desktop.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment