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