module Kenma::Macroable
Public Instance Methods
ast(context = {}, &body)
click to toggle source
# File lib/kenma/macroable.rb, line 9 def ast(context = {}, &body) bind = body.binding unless context[:bind] node = RubyVM::AbstractSyntaxTree.of(body).children.last Kenma.compile(node, { bind: bind }.merge(context)) end
children()
click to toggle source
# File lib/kenma/macroable.rb, line 19 def children; self[1]; end
macro_function(name)
click to toggle source
# File lib/kenma/macro/macro_function.rb, line 9 def macro_function(name) macro_functions << name module_function name extend Kenma::Macroable end
macro_functions()
click to toggle source
# File lib/kenma/macro/macro_function.rb, line 15 def macro_functions @macro_functions ||= [] end
macro_node(node_type, name)
click to toggle source
# File lib/kenma/macro/macro_node.rb, line 8 def macro_node(node_type, name) define_method("NODE_#{node_type}") { |node, parent| send(name, node, parent) } end
macro_pattern(pattern, name)
click to toggle source
# File lib/kenma/macro/macro_pattern.rb, line 68 def macro_pattern(pattern, name) macro_patterns[name] = pattern extend Kenma::Macroable end
macro_patterns()
click to toggle source
# File lib/kenma/macro/macro_pattern.rb, line 73 def macro_patterns @macro_patterns ||= {} end
pat(&block)
click to toggle source
# File lib/kenma/macro/macro_pattern.rb, line 58 def pat(&block) pat_node(RubyVM::AbstractSyntaxTree.of(block).children.last) end
pat_node(node)
click to toggle source
# File lib/kenma/macro/macro_pattern.rb, line 62 def pat_node(node) PatternCapture.new(node) end
type()
click to toggle source
# File lib/kenma/macroable.rb, line 18 def type; self[0]; end