Module: Wood::NodeVisitor

Defined in:
lib/wood/node_visitor.rb

Overview

Mixin module for Node visitors.

Defined Under Namespace

Modules: ClassMethods Classes: Context

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



17
18
19
# File 'lib/wood/node_visitor.rb', line 17

def self.included(klass)
  klass.extend ClassMethods
end

Instance Method Details

#array(nodes) ⇒ Object



54
55
56
57
58
# File 'lib/wood/node_visitor.rb', line 54

def array(nodes)
  nodes.each do |n|
    visit n
  end
end

#contextObject



31
32
33
# File 'lib/wood/node_visitor.rb', line 31

def context
  @contexts.last
end

#contextsObject



27
28
29
# File 'lib/wood/node_visitor.rb', line 27

def contexts
  @contexts ||= []
end

#new_contextObject



23
24
25
# File 'lib/wood/node_visitor.rb', line 23

def new_context
  Context.new(false)
end

#visit(node) ⇒ Object



35
36
37
38
39
# File 'lib/wood/node_visitor.rb', line 35

def visit(node)
  contexts.push new_context
   __send__(node.node_name, node)
  contexts.pop
end

#visit_type(node) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/wood/node_visitor.rb', line 41

def visit_type(node)
  case node.type
  when Wood::Types::BuiltinType
    visit node.type
  when Wood::Types::CompoundType
    visit node.type
  when Wood::Types::CustomType
    visit node.type
  else
    visit node.type.type if node.type
  end
end