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