class Atomy::PatternExpander
Public Class Methods
new(mod)
click to toggle source
# File lib/atomy/bootstrap.rb, line 143 def initialize(mod) @module = mod end
Public Instance Methods
visit(_)
click to toggle source
# File lib/atomy/bootstrap.rb, line 147 def visit(_) nil end
visit_constant(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 200 def visit_constant(node) Code::Pattern.new( Code::Send.new( Code::Constant.new( :KindOf, Code::Constant.new( :Pattern, Code::Constant.new(:Atomy))), :new, [node])) end
visit_infix(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 194 def visit_infix(node) if node.operator == :& Code::Pattern::And.new(@module.pattern(node.left), @module.pattern(node.right)) end end
visit_number(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 160 def visit_number(node) Code::Pattern.new( Code::Send.new( Code::Constant.new( :Equality, Code::Constant.new( :Pattern, Code::Constant.new(:Atomy))), :new, [node])) end
visit_prefix(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 188 def visit_prefix(node) if node.operator == :* Code::Pattern::Splat.new(@module.pattern(node.node)) end end
visit_quasiquote(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 184 def visit_quasiquote(node) Code::Pattern::QuasiQuote.new(node, @module) end
visit_quote(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 172 def visit_quote(node) Code::Pattern.new( Code::Send.new( Code::Constant.new( :Equality, Code::Constant.new( :Pattern, Code::Constant.new(:Atomy))), :new, [node])) end
visit_word(node)
click to toggle source
# File lib/atomy/bootstrap.rb, line 151 def visit_word(node) name = nil if node.text != :_ name = node.text end Code::Pattern::Wildcard.new(name) end