class Metamorpher::Rewriter::SubstitutionVisitor

Attributes

substitution[RW]

Public Class Methods

new(substitution) click to toggle source
# File lib/metamorpher/rewriter/substitution.rb, line 14
def initialize(substitution)
  @substitution = substitution
end

Public Instance Methods

visit_derived(derived) click to toggle source
# File lib/metamorpher/rewriter/substitution.rb, line 29
def visit_derived(derived)
  substitutes = derived.base.map { |v| substitution_for_variable(v) }
  derived.derivation.call(*substitutes)
end
visit_literal(literal) click to toggle source
# File lib/metamorpher/rewriter/substitution.rb, line 22
def visit_literal(literal)
  Terms::Literal.new(
    name: literal.name,
    children: literal.children.flat_map { |child| visit(child) }
  )
end
visit_termset(termset) click to toggle source
# File lib/metamorpher/rewriter/substitution.rb, line 34
def visit_termset(termset)
  Terms::TermSet.new(
    terms: termset.terms.map { |term| visit(term) }
  )
end
visit_variable(variable) click to toggle source
# File lib/metamorpher/rewriter/substitution.rb, line 18
def visit_variable(variable)
  substitution_for_variable(variable.name).dup
end

Private Instance Methods

substitution_for_variable(name) click to toggle source
# File lib/metamorpher/rewriter/substitution.rb, line 42
def substitution_for_variable(name)
  substitution.fetch(name) do
    fail SubstitutionError, "No substitution found for variable '#{name}'"
  end
end