Class: Packcr::Node::ReferenceNode

Inherits:
Packcr::Node show all
Defined in:
lib/packcr/node/reference_node.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#colObject

Returns the value of attribute col.



4
5
6
# File 'lib/packcr/node/reference_node.rb', line 4

def col
  @col
end

#indexObject

Returns the value of attribute index.



4
5
6
# File 'lib/packcr/node/reference_node.rb', line 4

def index
  @index
end

#lineObject

Returns the value of attribute line.



4
5
6
# File 'lib/packcr/node/reference_node.rb', line 4

def line
  @line
end

#nameObject

Returns the value of attribute name.



4
5
6
# File 'lib/packcr/node/reference_node.rb', line 4

def name
  @name
end

#ruleObject

Returns the value of attribute rule.



4
5
6
# File 'lib/packcr/node/reference_node.rb', line 4

def rule
  @rule
end

#varObject

Returns the value of attribute var.



4
5
6
# File 'lib/packcr/node/reference_node.rb', line 4

def var
  @var
end

Instance Method Details

#debug_dump(indent = 0) ⇒ Object



6
7
8
9
10
# File 'lib/packcr/node/reference_node.rb', line 6

def debug_dump(indent = 0)
  $stdout.print "#{" " * indent}Reference(var:'#{var || "(null)"}', index:"
  Packcr.dump_integer_value(index)
  $stdout.print ", name:'#{name}', rule:'#{rule&.name || "(null)"}')\n"
end

#generate_code(gen, onfail, indent, bare) ⇒ Object



12
13
14
15
# File 'lib/packcr/node/reference_node.rb', line 12

def generate_code(gen, onfail, indent, bare)
  gen.write Packcr.template("node/reference.#{gen.lang}.erb", binding, indent: indent)
  Packcr::CODE_REACH__BOTH
end


32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/packcr/node/reference_node.rb', line 32

def link_references(ctx)
  rule = ctx.rule(name)
  if !rule
    ctx.error line + 1, col + 1, "No definition of rule '#{name}'"
  else
    unless rule.is_a?(Packcr::Node::RuleNode)
      raise "unexpected node type #{rule.class}"
    end
    rule.add_ref
    self.rule = rule
  end
end

#verify_captures(ctx, capts) ⇒ Object



29
30
# File 'lib/packcr/node/reference_node.rb', line 29

def verify_captures(ctx, capts)
end

#verify_variables(vars) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/packcr/node/reference_node.rb', line 17

def verify_variables(vars)
  return if index.nil?

  found = vars.any? do |var|
    unless var.is_a?(Packcr::Node::ReferenceNode)
      raise "unexpected var: #{var.class}"
    end
    index == var.index
  end
  vars.push(self) if !found
end