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