module DrgDSL::Visitor
Mixin for Ast::Node
visitors. Visits all child nodes and returns the visited node by default.
Public Class Methods
included(visitor)
click to toggle source
# File lib/drgdsl/visitor.rb, line 8 def self.included(visitor) visitor.prepend Cache visitor.extend ClassMethods end
Public Instance Methods
cache?()
click to toggle source
Whether this visitor should cache visit results. Note that one might need to override cache_key(n)
if a visit is not deterministic, e.g. when it depends on some instance variables.
@return [Boolean]
# File lib/drgdsl/visitor.rb, line 39 def cache? false end
cache_key(n)
click to toggle source
@param n [Ast::Node] @return [Integer] ideally an object hash
# File lib/drgdsl/visitor.rb, line 45 def cache_key(n) n.hash end
visit(n)
click to toggle source
@param n [Ast::Node]
# File lib/drgdsl/visitor.rb, line 50 def visit(n) return visit_nil if n.nil? send("visit_#{n.type}", n) end
visit_AndExpression(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 68 def visit_AndExpression(n) n.expressions.map { |e| visit(e) } n end
visit_BasicExpression(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 92 def visit_BasicExpression(n) visit(n.variable) visit(n.condition) n end
visit_Comparison(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 98 def visit_Comparison(n) visit(n.value) visit(n.table_condition) n end
visit_Constant(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 136 def visit_Constant(n) n end
visit_DateExpression(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 123 def visit_DateExpression(n) visit(n.left_variable) visit(n.left_condition) visit(n.right_variable) visit(n.right_condition) visit(n.comparison) n end
visit_DrgLink(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 87 def visit_DrgLink(n) visit(n.variable) n end
visit_Empty(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 109 def visit_Empty(n) n end
visit_Expression(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 63 def visit_Expression(n) n.expressions.map { |e| visit(e) } n end
visit_FunctionCall(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 83 def visit_FunctionCall(n) n end
visit_NotExpression(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 78 def visit_NotExpression(n) visit(n.expression) n end
visit_ParenExpression(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 73 def visit_ParenExpression(n) visit(n.expression) n end
visit_SrglrbTableCondition(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 118 def visit_SrglrbTableCondition(n) visit(n.condition) n end
visit_TableCondition(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 113 def visit_TableCondition(n) visit(n.comparison) n end
visit_UnaryCondition(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 104 def visit_UnaryCondition(n) visit(n.condition) n end
visit_Variable(n)
click to toggle source
# File lib/drgdsl/visitor.rb, line 132 def visit_Variable(n) n end
visit_nil()
click to toggle source
Override to define what should happen when one calls visit
with nil (can occur on optional AST branches).
Does nothing by default. A string visitor might want to return an empty string here.
# File lib/drgdsl/visitor.rb, line 60 def visit_nil end