Class: Packcr::Node::SequenceNode
- Inherits:
-
Packcr::Node
- Object
- Packcr::Node
- Packcr::Node::SequenceNode
- Defined in:
- lib/packcr/node/sequence_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 ⇒ SequenceNode
constructor
A new instance of SequenceNode.
- #link_references(ctx) ⇒ Object
- #max ⇒ Object
- #verify_captures(ctx, capts) ⇒ Object
- #verify_variables(vars) ⇒ Object
Constructor Details
#initialize ⇒ SequenceNode
Returns a new instance of SequenceNode.
6 7 8 9 |
# File 'lib/packcr/node/sequence_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/sequence_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/sequence_node.rb', line 11 def debug_dump(indent = 0) $stdout.print "#{" " * indent}Sequence(max:#{max}, len:#{nodes.length}) {\n" nodes.each do |child_node| child_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 34 35 36 37 38 39 40 |
# File 'lib/packcr/node/sequence_node.rb', line 25 def generate_code(gen, onfail, indent, ) b = false nodes.each_with_index do |expr, i| case gen.generate_code(expr, onfail, indent, false) when Packcr::CODE_REACH__ALWAYS_FAIL if i + 1 < nodes.length gen.write Packcr.template("node/sequence_unreachable.#{gen.lang}.erb", binding, indent: indent) end return Packcr::CODE_REACH__ALWAYS_FAIL when Packcr::CODE_REACH__ALWAYS_SUCCEED else b = true end end return b ? Packcr::CODE_REACH__BOTH : Packcr::CODE_REACH__ALWAYS_SUCCEED end |
#link_references(ctx) ⇒ Object
54 55 56 57 58 |
# File 'lib/packcr/node/sequence_node.rb', line 54 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/sequence_node.rb', line 19 def max m = 1 m <<= 1 while m < @nodes.length m end |
#verify_captures(ctx, capts) ⇒ Object
48 49 50 51 52 |
# File 'lib/packcr/node/sequence_node.rb', line 48 def verify_captures(ctx, capts) nodes.each do |node| node.verify_captures(ctx, capts) end end |
#verify_variables(vars) ⇒ Object
42 43 44 45 46 |
# File 'lib/packcr/node/sequence_node.rb', line 42 def verify_variables(vars) nodes.each do |node| node.verify_variables(vars) end end |