Class: Packcr::Node::AlternateNode
- Inherits:
-
Packcr::Node
- Object
- Packcr::Node
- Packcr::Node::AlternateNode
- Defined in:
- lib/packcr/node/alternate_node.rb
Instance Attribute Summary collapse
-
#nodes ⇒ Object
Returns the value of attribute nodes.
Instance Method Summary collapse
- #debug_dump(indent = 0) ⇒ Object
- #generate_code(gen, onfail, indent, bare) ⇒ Object
-
#initialize ⇒ AlternateNode
constructor
A new instance of AlternateNode.
- #link_references(ctx) ⇒ Object
- #max ⇒ Object
- #verify_captures(ctx, capts) ⇒ Object
- #verify_variables(vars) ⇒ Object
Constructor Details
#initialize ⇒ AlternateNode
Returns a new instance of AlternateNode.
6 7 8 9 |
# File 'lib/packcr/node/alternate_node.rb', line 6 def initialize super self.nodes = [] end |
Instance Attribute Details
#nodes ⇒ Object
Returns the value of attribute nodes.
4 5 6 |
# File 'lib/packcr/node/alternate_node.rb', line 4 def nodes @nodes end |
Instance Method Details
#debug_dump(indent = 0) ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/packcr/node/alternate_node.rb', line 11 def debug_dump(indent = 0) $stdout.print "#{" " * indent}Alternate(max:#{max}, len:#{nodes.length}) {\n" nodes.each do |node| node.debug_dump(indent + 2) end $stdout.print "#{" " * indent}}\n" end |
#generate_code(gen, onfail, indent, bare) ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/packcr/node/alternate_node.rb', line 25 def generate_code(gen, onfail, indent, ) b = false m = gen.next_label reach = nil gen.write Packcr.template("node/alternate.#{gen.lang}.erb", binding, indent: indent - 4, unwrap: ) reach || Packcr::CODE_REACH__ALWAYS_FAIL end |
#link_references(ctx) ⇒ Object
64 65 66 67 68 |
# File 'lib/packcr/node/alternate_node.rb', line 64 def link_references(ctx) nodes.each do |node| node.link_references(ctx) end end |
#max ⇒ Object
19 20 21 22 23 |
# File 'lib/packcr/node/alternate_node.rb', line 19 def max m = 1 m <<= 1 while m < @nodes.length m end |
#verify_captures(ctx, capts) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/packcr/node/alternate_node.rb', line 52 def verify_captures(ctx, capts) m = capts.length v = capts.dup nodes.each do |node| v = v[0, m] node.verify_captures(ctx, v) v[m...-1].each do |added_node| capts.push(added_node) end end end |
#verify_variables(vars) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/packcr/node/alternate_node.rb', line 35 def verify_variables(vars) m = vars.length v = vars.dup nodes.each do |node| v = v[0, m] node.verify_variables(v) v[m...-1].each do |added_node| found = vars[m...-1].any? do |added_var| added_node.index == added_var.index end if !found vars.push(added_node) end end end end |