diff options
author | Brice Figureau <brice-puppet@daysofwonder.com> | 2009-07-28 19:42:24 +0200 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2009-08-01 11:15:29 +1000 |
commit | 58a73b5c68485dc5d41a46936c31e5fad5f037b5 (patch) | |
tree | d8fa2e0b6429a1a1262bc19ad6d876b565500b42 | |
parent | 3ebf148bf3d82d25e690aec6ec49975e0837e604 (diff) | |
download | puppet-58a73b5c68485dc5d41a46936c31e5fad5f037b5.tar.gz puppet-58a73b5c68485dc5d41a46936c31e5fad5f037b5.tar.xz puppet-58a73b5c68485dc5d41a46936c31e5fad5f037b5.zip |
Make sure node are referenced by their names
This patch uses the unused AST::HostName as the only way to reference
a node in the AST nodes array.
The AST::HostName respect the hash properties of the underlying
string, to keep the O(1) hash properties.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
-rw-r--r-- | lib/puppet/parser/ast/leaf.rb | 18 | ||||
-rw-r--r-- | lib/puppet/parser/ast/node.rb | 5 | ||||
-rw-r--r-- | lib/puppet/parser/grammar.ra | 10 | ||||
-rw-r--r-- | lib/puppet/parser/loaded_code.rb | 13 | ||||
-rw-r--r-- | lib/puppet/parser/parser.rb | 1129 | ||||
-rw-r--r-- | lib/puppet/parser/parser_support.rb | 4 | ||||
-rwxr-xr-x | spec/unit/parser/ast/leaf.rb | 45 | ||||
-rw-r--r-- | spec/unit/parser/loaded_code.rb | 73 | ||||
-rwxr-xr-x | spec/unit/parser/parser.rb | 90 | ||||
-rw-r--r-- | test/lib/puppettest/support/collection.rb | 2 |
10 files changed, 792 insertions, 597 deletions
diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb index 7743862d7..59bfc9e9d 100644 --- a/lib/puppet/parser/ast/leaf.rb +++ b/lib/puppet/parser/ast/leaf.rb @@ -90,11 +90,27 @@ class Puppet::Parser::AST def initialize(hash) super - unless @value =~ %r{^[0-9a-zA-Z\-]+(\.[0-9a-zA-Z\-]+)*$} + @value = @value.to_s.downcase + if @value =~ /[^-\w.]/ raise Puppet::DevError, "'%s' is not a valid hostname" % @value end end + + def to_classname + return @value + end + + # implementing eql? and hash so that when an HostName is stored + # in a hash it has the same hashing properties as the underlying value + def eql?(value) + value = value.value if value.is_a?(HostName) + return @value.eql?(value) + end + + def hash + return @value.hash + end end # A simple variable. This object is only used during interpolation; diff --git a/lib/puppet/parser/ast/node.rb b/lib/puppet/parser/ast/node.rb index faa7fa19a..b2d404487 100644 --- a/lib/puppet/parser/ast/node.rb +++ b/lib/puppet/parser/ast/node.rb @@ -11,11 +11,6 @@ class Puppet::Parser::AST::Node < Puppet::Parser::AST::HostClass def initialize(options) @parentclass = nil super - - # Do some validation on the node name - if @name =~ /[^-\w.]/ - raise Puppet::ParseError, "Invalid node name %s" % @name - end end def namespace diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra index 072f3515f..ed55d2150 100644 --- a/lib/puppet/parser/grammar.ra +++ b/lib/puppet/parser/grammar.ra @@ -684,11 +684,15 @@ classname: NAME { result = val[0][:value] } # Multiple hostnames, as used for node names. These are all literal # strings, not AST objects. -hostnames: hostname - | hostnames COMMA hostname { +hostnames: nodename + | hostnames COMMA nodename { result = val[0] result = [result] unless result.is_a?(Array) - result << val[2][:value] + result << val[2] +} + +nodename: hostname { + result = ast AST::HostName, :value => val[0] } hostname: NAME { result = val[0][:value] } diff --git a/lib/puppet/parser/loaded_code.rb b/lib/puppet/parser/loaded_code.rb index 6c519613f..9200c3256 100644 --- a/lib/puppet/parser/loaded_code.rb +++ b/lib/puppet/parser/loaded_code.rb @@ -14,11 +14,11 @@ class Puppet::Parser::LoadedCode end def add_node(name, code) - @nodes[munge_name(name)] = code + @nodes[check_name(name)] = code end def node(name) - @nodes[munge_name(name)] + @nodes[check_name(name)] end def nodes? @@ -88,4 +88,13 @@ class Puppet::Parser::LoadedCode def munge_name(name) name.to_s.downcase end + + # Check that the given (node) name is an HostName instance + # We're doing this so that hashing of node in the @nodes hash + # is consistent (see AST::HostName#hash and AST::HostName#eql?) + # and that the @nodes hash still keep its O(1) get/put properties. + def check_name(name) + name = Puppet::Parser::AST::HostName.new(:value => name) unless name.is_a?(Puppet::Parser::AST::HostName) + name + end end diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb index cedc7de89..dbe0be4b6 100644 --- a/lib/puppet/parser/parser.rb +++ b/lib/puppet/parser/parser.rb @@ -29,7 +29,7 @@ module Puppet class Parser < Racc::Parser -module_eval <<'..end grammar.ra modeval..id0c32fac69d', 'grammar.ra', 797 +module_eval <<'..end grammar.ra modeval..id9c55934a79', 'grammar.ra', 801 # It got too annoying having code in a file that needs to be compiled. require 'puppet/parser/parser_support' @@ -41,7 +41,7 @@ require 'puppet/parser/parser_support' # $Id$ -..end grammar.ra modeval..id0c32fac69d +..end grammar.ra modeval..id9c55934a79 ##### racc 1.4.5 generates ### @@ -215,581 +215,570 @@ racc_reduce_table = [ 1, 128, :_reduce_none, 3, 128, :_reduce_167, 1, 130, :_reduce_168, - 1, 130, :_reduce_169, - 1, 130, :_reduce_170, - 1, 130, :_reduce_171, - 0, 65, :_reduce_172, - 0, 131, :_reduce_173, + 1, 131, :_reduce_169, + 1, 131, :_reduce_170, + 1, 131, :_reduce_171, + 1, 131, :_reduce_172, + 0, 65, :_reduce_173, + 0, 132, :_reduce_174, 1, 126, :_reduce_none, - 3, 126, :_reduce_175, 3, 126, :_reduce_176, - 1, 132, :_reduce_none, - 3, 132, :_reduce_178, + 3, 126, :_reduce_177, + 1, 133, :_reduce_none, 3, 133, :_reduce_179, - 1, 133, :_reduce_180, - 3, 133, :_reduce_181, - 1, 133, :_reduce_182, + 3, 134, :_reduce_180, + 1, 134, :_reduce_181, + 3, 134, :_reduce_182, + 1, 134, :_reduce_183, 1, 129, :_reduce_none, - 2, 129, :_reduce_184, + 2, 129, :_reduce_185, 1, 127, :_reduce_none, - 2, 127, :_reduce_186, - 1, 134, :_reduce_none, - 1, 134, :_reduce_none, - 1, 84, :_reduce_189, - 3, 108, :_reduce_190, - 4, 108, :_reduce_191, - 2, 108, :_reduce_192, + 2, 127, :_reduce_187, + 1, 135, :_reduce_none, + 1, 135, :_reduce_none, + 1, 84, :_reduce_190, + 3, 108, :_reduce_191, + 4, 108, :_reduce_192, + 2, 108, :_reduce_193, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 0, 94, :_reduce_none, - 1, 94, :_reduce_196, - 1, 117, :_reduce_197 ] + 1, 94, :_reduce_197, + 1, 117, :_reduce_198 ] -racc_reduce_n = 198 +racc_reduce_n = 199 -racc_shift_n = 327 +racc_shift_n = 328 racc_action_table = [ - 75, 53, 56, 285, 185, 38, 39, 247, 88, 245, - 51, 298, 89, 158, 142, 246, -145, 124, 150, 154, - 71, 75, 53, 56, 297, 90, 38, 39, 243, 244, - 136, 45, 38, 39, 259, 55, 58, 243, 244, 66, - 40, 71, 121, 42, 52, 76, 192, 163, 61, 91, - -151, 82, 45, 75, 53, 56, 55, 58, 45, 60, - 66, 40, 163, 168, 42, 52, 76, 40, 205, 61, - 42, 163, 82, 45, 75, 53, 56, -148, 168, 163, - 60, 204, 45, 185, 45, 135, 36, 168, 55, 199, - 45, 283, 66, 4, 71, 168, 136, 109, 275, 282, - 262, 61, 53, 56, 36, 45, 75, 53, 56, 55, - 58, 4, 60, 66, 36, 251, 36, 181, 52, 76, - 254, 4, 61, 4, 8, 82, 161, 75, 53, 56, - 158, 142, 161, 60, 215, 150, 154, 45, 208, 216, - -145, 55, 58, -147, 239, 66, 268, 71, 208, 209, - 52, 206, 251, 128, 61, 208, 209, 254, 45, 51, - 53, 56, 55, 58, 248, 60, 66, 270, 243, 244, - 136, 52, 76, 33, 34, 61, 150, 154, 82, 48, - 75, 53, 56, 53, 56, -149, 60, 150, 154, -150, - 45, 208, 309, -146, 55, 58, 256, 276, 66, 128, - 71, -146, 49, 52, -148, 187, -148, 61, 88, -145, - 185, 45, 75, 53, 56, 55, 58, 135, 60, 66, - -163, -150, 278, -147, 52, 76, -149, 159, 61, 161, - 130, 82, 60, 75, 53, 56, 284, 173, 174, 60, - 128, 188, 194, 45, 296, 60, 194, 55, 58, 300, - 103, 66, -146, 71, 187, 175, 52, 97, 176, 310, - 61, 278, 312, 89, 45, 75, 53, 56, 55, 58, - -147, 60, 66, -145, -148, -146, -150, 52, 76, 314, - 95, 61, 182, -147, 82, 44, 75, 53, 56, 190, - 320, -196, 60, 37, 184, 187, 45, 299, nil, nil, - 55, 58, nil, nil, 66, nil, nil, nil, nil, 52, - nil, nil, nil, 61, nil, nil, nil, 45, 75, 53, - 56, 55, 58, nil, 60, 66, nil, nil, nil, nil, - 52, nil, nil, nil, 61, nil, nil, nil, 71, 75, - 53, 56, nil, nil, nil, 60, nil, nil, nil, 45, - nil, nil, nil, 55, 58, nil, nil, 66, nil, nil, - nil, nil, 52, 76, nil, nil, 61, nil, nil, 82, - 45, 75, 53, 56, 55, 58, nil, 60, 66, nil, - nil, nil, nil, 52, nil, nil, nil, 61, nil, nil, - nil, 71, 75, 53, 56, nil, nil, nil, 60, nil, - nil, nil, 45, nil, nil, nil, 55, 58, nil, nil, - 66, nil, 71, nil, nil, 52, 76, nil, nil, 61, - nil, nil, 82, 45, 75, 53, 56, 55, 58, nil, - 60, 66, nil, nil, nil, nil, 52, 76, nil, nil, - 61, nil, nil, 82, 71, 75, 53, 56, nil, nil, - nil, 60, nil, nil, nil, 45, nil, nil, nil, 55, - 58, nil, nil, 66, nil, 71, nil, nil, 52, 76, - nil, nil, 61, nil, nil, 82, 45, 75, 53, 56, - 55, 58, nil, 60, 66, nil, nil, nil, nil, 52, - 76, nil, nil, 61, nil, nil, 82, 71, 75, 53, - 56, nil, nil, nil, 60, nil, nil, nil, 45, nil, - nil, nil, 55, 58, nil, nil, 66, 75, 53, 56, - 139, 52, 76, nil, nil, 61, nil, nil, 82, 45, - nil, nil, nil, 55, 111, nil, 60, 66, 75, 53, - 56, nil, 109, nil, nil, nil, 61, nil, 45, 53, - 56, nil, 55, 58, nil, nil, 66, 60, nil, nil, - nil, 52, nil, nil, nil, 61, nil, nil, nil, 45, - 75, 53, 56, 55, 58, nil, 60, 66, nil, 45, - nil, nil, 52, 55, 199, nil, 61, 66, 75, 53, - 56, nil, 109, nil, nil, nil, 61, 60, nil, nil, - nil, 45, nil, nil, nil, 55, 58, 60, 71, 66, - 75, 53, 56, nil, 52, nil, nil, nil, 61, 45, - nil, nil, nil, 55, 58, nil, nil, 66, nil, 60, - 71, nil, 52, 76, nil, nil, 61, nil, nil, 82, - nil, 45, 75, 53, 56, 55, 58, 60, nil, 66, - nil, nil, nil, nil, 52, 76, nil, nil, 61, nil, - nil, 82, nil, 75, 53, 56, nil, nil, nil, 60, - nil, nil, nil, 45, nil, nil, nil, 55, 58, nil, - nil, 66, nil, 71, nil, nil, 52, nil, nil, nil, - 61, nil, nil, nil, 45, 75, 53, 56, 55, 58, - nil, 60, 66, nil, nil, nil, nil, 52, 76, nil, - nil, 61, nil, nil, 82, 71, 75, 53, 56, nil, - nil, nil, 60, nil, nil, nil, 45, nil, nil, nil, - 55, 58, nil, nil, 66, nil, 71, nil, nil, 52, - 76, nil, nil, 61, nil, nil, 82, 45, 75, 53, - 56, 55, 58, nil, 60, 66, nil, nil, nil, nil, - 52, 76, nil, nil, 61, nil, nil, 82, 71, 75, - 53, 56, nil, nil, nil, 60, nil, nil, nil, 45, - nil, nil, nil, 55, 58, nil, nil, 66, nil, 71, - nil, nil, 52, 76, nil, nil, 61, nil, nil, 82, - 45, 75, 53, 56, 55, 58, nil, 60, 66, nil, - nil, nil, nil, 52, 76, nil, nil, 61, nil, nil, - 82, nil, 75, 53, 56, nil, nil, nil, 60, nil, - nil, nil, 45, nil, nil, nil, 55, 58, nil, nil, - 66, nil, 71, nil, nil, 52, nil, nil, nil, 61, - nil, nil, nil, 45, 53, 56, nil, 55, 58, nil, - 60, 66, nil, nil, nil, nil, 52, 76, 53, 56, - 61, nil, nil, 82, 273, 53, 56, nil, nil, nil, - nil, 60, nil, nil, 45, nil, nil, nil, 55, 58, - nil, nil, 66, 53, 56, 131, 49, 52, 45, nil, - nil, 61, 55, 199, nil, 45, 66, 53, 56, 55, - 58, 109, 60, 66, nil, 61, nil, 49, 52, nil, - nil, nil, 61, 45, nil, nil, 60, 55, 199, 53, - 56, 66, nil, 60, nil, nil, 109, 45, nil, nil, - 61, 55, 199, 53, 56, 66, nil, nil, nil, nil, - 109, 60, nil, nil, 61, nil, nil, nil, nil, 45, - nil, nil, nil, 55, 199, 60, nil, 66, 53, 56, - 53, 56, 109, 45, nil, nil, 61, 55, 199, nil, - nil, 66, nil, nil, nil, nil, 109, 60, 212, nil, - 61, nil, nil, nil, nil, 53, 56, nil, 45, 280, - 45, 60, 55, 58, 55, 58, 66, nil, 66, nil, - 49, 52, 49, 52, nil, 61, nil, 61, nil, nil, - 53, 56, nil, 201, nil, 45, 60, nil, 60, 55, - 199, nil, nil, 66, nil, nil, nil, nil, 109, nil, - nil, nil, 61, nil, nil, nil, nil, nil, nil, nil, - 45, 155, nil, 60, 55, 199, nil, nil, 66, nil, - 148, 153, nil, 109, nil, nil, nil, 61, nil, 144, - 146, 149, 152, 148, 153, nil, nil, nil, 60, nil, - nil, 214, 144, 146, 149, 152, nil, nil, 156, 157, - 158, 142, nil, 147, 151, 150, 154, 156, 157, 158, - 142, 143, 145, nil, 150, 154, 147, 151, nil, nil, - 156, 157, 158, 142, 143, 145, nil, 150, 154, 148, - 153, nil, nil, nil, nil, nil, nil, nil, 144, 146, - 149, 152, 148, 153, nil, nil, nil, nil, nil, nil, - nil, 144, 146, 149, 152, nil, nil, 156, 157, 158, - 142, nil, 147, 151, 150, 154, 156, 157, 158, 142, - 143, 145, nil, 150, 154, nil, nil, nil, nil, 156, - 157, 158, 142, 143, 145, nil, 150, 154, 148, 153, - nil, nil, nil, nil, nil, nil, nil, 144, 146, 149, - 152, 148, 153, nil, nil, nil, nil, nil, nil, nil, - 144, 146, 149, 152, nil, 153, nil, nil, nil, nil, - nil, nil, 151, 144, nil, 156, 157, 158, 142, 143, - 145, nil, 150, 154, 147, 151, 153, nil, 156, 157, - 158, 142, 143, 145, 144, 150, 154, nil, nil, 153, - nil, 156, 157, 158, 142, 143, 145, 144, 150, 154, - 153, nil, 156, 157, 158, 142, 143, 145, 144, 150, - 154, nil, 156, 157, 158, 142, 143, 145, nil, 150, - 154, nil, nil, nil, 318, 156, 157, 158, 142, 143, - 145, nil, 150, 154, nil, nil, 156, 157, 158, 142, - 143, 145, nil, 150, 154, 18, 265, 23, 26, nil, + 76, 54, 57, 286, 186, 38, 39, 284, 89, 246, + 52, 186, 90, 159, 143, 283, 98, 125, 151, 155, + 72, 76, 54, 57, 137, 91, 38, 39, 244, 245, + 137, 46, 38, 39, 260, 56, 59, 244, 245, 67, + 40, 72, 122, 42, 53, 77, 193, 164, 62, 92, + -151, 83, 46, 76, 54, 57, 56, 59, 46, 61, + 67, 40, 164, 169, 42, 53, 77, 40, 206, 62, + 42, 164, 83, 46, 76, 54, 57, -148, 169, 164, + 61, 205, 46, 136, 46, 300, 36, 169, 56, 200, + 46, 248, 67, 4, 72, 169, 276, 110, 299, 247, + 263, 62, 151, 155, 36, 46, 76, 54, 57, 56, + 59, 4, 61, 67, 36, 252, 36, 182, 53, 77, + 256, 4, 62, 4, 8, 83, 162, 76, 54, 57, + 159, 143, 162, 61, 249, 151, 155, 46, 244, 245, + -145, 56, 59, -147, 216, 67, 269, 72, 209, 217, + 53, 207, 252, 129, 62, 209, 210, 256, 46, 52, + 54, 57, 56, 59, 240, 61, 67, 271, 209, 210, + 137, 53, 77, 209, 310, 62, 54, 57, 83, 49, + 76, 54, 57, 54, 57, -149, 61, 33, 34, -150, + 46, 151, 155, -146, 56, 59, 176, 277, 67, 257, + 72, 177, 50, 53, 90, 129, -148, 62, 89, -145, + 61, 46, 76, 54, 57, 56, 59, 136, 61, 67, + -163, 183, 279, -147, 53, 77, -148, 175, 62, 188, + 131, 83, -147, 76, 54, 57, 285, 185, 186, 61, + 129, 189, 195, 46, 297, 298, 195, 56, 59, 301, + 104, 67, -146, 72, 188, 188, 53, -146, 61, 311, + 62, 279, 313, -150, 46, 76, 54, 57, 56, 59, + -147, 61, 67, -145, -148, -146, -150, 53, 77, 315, + 96, 62, -149, 160, 83, 45, 76, 54, 57, 191, + 321, -197, 61, 37, 162, 174, 46, -145, nil, nil, + 56, 59, nil, nil, 67, nil, nil, nil, nil, 53, + nil, nil, nil, 62, nil, nil, nil, 46, 76, 54, + 57, 56, 59, nil, 61, 67, nil, nil, nil, nil, + 53, nil, nil, nil, 62, nil, nil, nil, 72, 76, + 54, 57, nil, nil, nil, 61, nil, nil, nil, 46, + nil, nil, nil, 56, 59, nil, nil, 67, nil, nil, + nil, nil, 53, 77, nil, nil, 62, nil, nil, 83, + 46, 76, 54, 57, 56, 59, nil, 61, 67, nil, + nil, nil, nil, 53, nil, nil, nil, 62, nil, nil, + nil, 72, 76, 54, 57, nil, nil, nil, 61, nil, + nil, nil, 46, nil, nil, nil, 56, 59, nil, nil, + 67, nil, 72, nil, nil, 53, 77, nil, nil, 62, + nil, nil, 83, 46, 76, 54, 57, 56, 59, nil, + 61, 67, nil, nil, nil, nil, 53, 77, nil, nil, + 62, nil, nil, 83, 72, 76, 54, 57, nil, nil, + nil, 61, nil, nil, nil, 46, nil, nil, nil, 56, + 59, nil, nil, 67, nil, 72, nil, nil, 53, 77, + nil, nil, 62, nil, nil, 83, 46, 76, 54, 57, + 56, 59, nil, 61, 67, nil, nil, nil, nil, 53, + 77, nil, nil, 62, nil, nil, 83, 72, 76, 54, + 57, nil, nil, nil, 61, nil, nil, nil, 46, nil, + nil, nil, 56, 59, nil, nil, 67, 76, 54, 57, + 140, 53, 77, nil, nil, 62, nil, nil, 83, 46, + nil, nil, nil, 56, 112, nil, 61, 67, 76, 54, + 57, nil, 110, nil, nil, nil, 62, nil, 46, 54, + 57, nil, 56, 59, nil, nil, 67, 61, nil, nil, + nil, 53, nil, nil, nil, 62, nil, nil, nil, 46, + 76, 54, 57, 56, 59, nil, 61, 67, nil, 46, + nil, nil, 53, 56, 200, nil, 62, 67, 76, 54, + 57, nil, 110, nil, nil, nil, 62, 61, nil, nil, + nil, 46, nil, nil, nil, 56, 59, 61, 72, 67, + 76, 54, 57, nil, 53, nil, nil, nil, 62, 46, + nil, nil, nil, 56, 59, nil, nil, 67, nil, 61, + 72, nil, 53, 77, nil, nil, 62, nil, nil, 83, + nil, 46, 76, 54, 57, 56, 59, 61, nil, 67, + nil, nil, nil, nil, 53, 77, nil, nil, 62, nil, + nil, 83, nil, 76, 54, 57, nil, nil, nil, 61, + nil, nil, nil, 46, nil, nil, nil, 56, 59, nil, + nil, 67, nil, 72, nil, nil, 53, nil, nil, nil, + 62, nil, nil, nil, 46, 76, 54, 57, 56, 59, + nil, 61, 67, nil, nil, nil, nil, 53, 77, nil, + nil, 62, nil, nil, 83, 72, 76, 54, 57, nil, + nil, nil, 61, nil, nil, nil, 46, nil, nil, nil, + 56, 59, nil, nil, 67, nil, 72, nil, nil, 53, + 77, nil, nil, 62, nil, nil, 83, 46, 76, 54, + 57, 56, 59, nil, 61, 67, nil, nil, nil, nil, + 53, 77, nil, nil, 62, nil, nil, 83, 72, 76, + 54, 57, nil, nil, nil, 61, nil, nil, nil, 46, + nil, nil, nil, 56, 59, nil, nil, 67, nil, 72, + nil, nil, 53, 77, nil, nil, 62, nil, nil, 83, + 46, 76, 54, 57, 56, 59, nil, 61, 67, nil, + nil, nil, nil, 53, 77, nil, nil, 62, nil, nil, + 83, nil, 76, 54, 57, nil, nil, nil, 61, nil, + nil, nil, 46, nil, nil, nil, 56, 59, nil, nil, + 67, nil, 72, nil, nil, 53, nil, nil, nil, 62, + nil, nil, nil, 46, 54, 57, nil, 56, 59, nil, + 61, 67, nil, nil, nil, nil, 53, 77, 54, 57, + 62, nil, nil, 83, 274, 54, 57, nil, nil, nil, + nil, 61, nil, nil, 46, nil, nil, nil, 56, 59, + nil, nil, 67, 54, 57, 132, 50, 53, 46, nil, + nil, 62, 56, 200, nil, 46, 67, 54, 57, 56, + 59, 110, 61, 67, nil, 62, nil, 50, 53, nil, + nil, nil, 62, 46, nil, nil, 61, 56, 200, 54, + 57, 67, nil, 61, nil, nil, 110, 46, nil, nil, + 62, 56, 200, 54, 57, 67, nil, nil, nil, nil, + 110, 61, nil, nil, 62, nil, nil, nil, nil, 46, + nil, nil, nil, 56, 200, 61, nil, 67, 54, 57, + 54, 57, 110, 46, nil, nil, 62, 56, 200, nil, + nil, 67, nil, nil, nil, nil, 110, 61, 213, nil, + 62, nil, nil, nil, nil, 54, 57, nil, 46, 281, + 46, 61, 56, 59, 56, 59, 67, nil, 67, nil, + 50, 53, 50, 53, nil, 62, nil, 62, nil, nil, + 54, 57, nil, 202, nil, 46, 61, nil, 61, 56, + 200, nil, nil, 67, nil, nil, nil, nil, 110, nil, + nil, nil, 62, nil, nil, nil, nil, nil, nil, nil, + 46, 156, nil, 61, 56, 200, nil, nil, 67, nil, + 149, 154, nil, 110, nil, nil, nil, 62, nil, 145, + 147, 150, 153, 149, 154, nil, nil, nil, 61, nil, + nil, 215, 145, 147, 150, 153, nil, nil, 157, 158, + 159, 143, nil, 148, 152, 151, 155, 157, 158, 159, + 143, 144, 146, nil, 151, 155, 148, 152, nil, nil, + 157, 158, 159, 143, 144, 146, nil, 151, 155, 149, + 154, nil, nil, nil, nil, nil, nil, nil, 145, 147, + 150, 153, 149, 154, nil, nil, nil, nil, nil, nil, + nil, 145, 147, 150, 153, nil, nil, 157, 158, 159, + 143, nil, 148, 152, 151, 155, 157, 158, 159, 143, + 144, 146, nil, 151, 155, nil, nil, nil, nil, 157, + 158, 159, 143, 144, 146, nil, 151, 155, 149, 154, + nil, nil, nil, nil, nil, nil, nil, 145, 147, 150, + 153, 149, 154, nil, nil, nil, nil, nil, nil, nil, + 145, 147, 150, 153, nil, 154, nil, nil, nil, nil, + nil, nil, 152, 145, nil, 157, 158, 159, 143, 144, + 146, nil, 151, 155, 148, 152, 154, nil, 157, 158, + 159, 143, 144, 146, 145, 151, 155, nil, nil, 154, + nil, 157, 158, 159, 143, 144, 146, 145, 151, 155, + 154, nil, 157, 158, 159, 143, 144, 146, 145, 151, + 155, nil, 157, 158, 159, 143, 144, 146, nil, 151, + 155, nil, nil, nil, 319, 157, 158, 159, 143, 144, + 146, nil, 151, 155, nil, nil, 157, 158, 159, 143, + 144, 146, nil, 151, 155, 18, 266, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, 27, - nil, nil, 4, 8, nil, 303, nil, 18, nil, 23, + nil, nil, 4, 8, nil, 304, nil, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, - nil, 27, nil, nil, 4, 8, 18, 305, 23, 26, + nil, 27, nil, nil, 4, 8, 18, 306, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, - 27, nil, nil, 4, 8, nil, 279, nil, 18, nil, + 27, nil, nil, 4, 8, nil, 280, nil, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, - 20, nil, 27, nil, nil, 4, 8, 18, 230, 23, + 20, nil, 27, nil, nil, 4, 8, 18, 231, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, - nil, 27, nil, nil, 4, 8, nil, 321, nil, 18, + nil, 27, nil, nil, 4, 8, nil, 322, nil, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, - nil, 20, nil, 27, nil, nil, 4, 8, 18, 257, + nil, 20, nil, 27, nil, nil, 4, 8, 18, 258, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, - 20, nil, 27, nil, nil, 4, 8, nil, 323, nil, + 20, nil, 27, nil, nil, 4, 8, nil, 324, nil, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, 27, nil, nil, 4, 8, 18, - 325, 23, 26, nil, 1, 5, nil, 12, nil, 16, - nil, 20, nil, 27, nil, nil, 4, 8, nil, 301, + 326, 23, 26, nil, 1, 5, nil, 12, nil, 16, + nil, 20, nil, 27, nil, nil, 4, 8, nil, 302, nil, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, 27, nil, nil, 4, 8, - 18, 326, 23, 26, nil, 1, 5, nil, 12, nil, + 18, 327, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, 27, nil, nil, 4, 8, nil, nil, nil, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, 27, nil, nil, 4, 8, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, 16, nil, 20, nil, 27, nil, nil, 4, 8, 18, nil, 23, 26, nil, 1, 5, nil, 12, nil, - 16, nil, 20, nil, 27, nil, nil, 4, 8, 156, - 157, 158, 142, 143, 145, nil, 150, 154 ] + 16, nil, 20, nil, 27, nil, nil, 4, 8, 157, + 158, 159, 143, 144, 146, nil, 151, 155 ] racc_action_check = [ - 34, 34, 34, 241, 128, 121, 121, 167, 21, 164, - 58, 252, 21, 233, 233, 167, 113, 41, 233, 233, - 34, 158, 158, 158, 252, 21, 12, 12, 241, 241, - 58, 34, 124, 124, 183, 34, 34, 164, 164, 34, - 121, 158, 41, 121, 34, 34, 128, 90, 34, 21, - 80, 34, 158, 184, 184, 184, 158, 158, 90, 34, - 158, 12, 163, 90, 12, 158, 158, 124, 132, 158, - 124, 91, 158, 163, 142, 142, 142, 79, 163, 242, - 158, 132, 91, 111, 184, 213, 5, 91, 184, 184, - 242, 238, 184, 5, 142, 242, 111, 184, 213, 238, - 186, 184, 23, 23, 26, 142, 185, 185, 185, 142, - 142, 26, 184, 142, 103, 176, 28, 103, 142, 142, - 176, 103, 142, 28, 28, 142, 187, 143, 143, 143, - 232, 232, 188, 142, 138, 232, 232, 185, 138, 138, - 78, 185, 185, 74, 160, 185, 193, 143, 160, 160, - 185, 134, 298, 194, 185, 134, 134, 298, 143, 16, - 16, 16, 143, 143, 172, 185, 143, 195, 172, 172, - 199, 143, 143, 1, 1, 143, 217, 217, 143, 16, - 18, 18, 18, 174, 174, 70, 143, 234, 234, 69, - 16, 272, 272, 68, 16, 16, 177, 216, 16, 173, - 18, 81, 16, 16, 115, 162, 65, 16, 64, 62, - 161, 18, 20, 20, 20, 18, 18, 54, 16, 18, - 52, 84, 230, 50, 18, 18, 86, 87, 18, 89, - 46, 18, 154, 144, 144, 144, 240, 92, 94, 18, - 44, 116, 249, 20, 251, 150, 129, 20, 20, 255, - 35, 20, 117, 144, 264, 95, 20, 27, 96, 278, - 20, 279, 282, 99, 144, 299, 299, 299, 144, 144, - 288, 20, 144, 290, 291, 292, 293, 144, 144, 295, - 25, 144, 104, 108, 144, 15, 296, 296, 296, 122, - 308, 309, 144, 9, 110, 112, 299, 254, nil, nil, - 299, 299, nil, nil, 299, nil, nil, nil, nil, 299, - nil, nil, nil, 299, nil, nil, nil, 296, 157, 157, - 157, 296, 296, nil, 299, 296, nil, nil, nil, nil, - 296, nil, nil, nil, 296, nil, nil, nil, 157, 270, - 270, 270, nil, nil, nil, 296, nil, nil, nil, 157, + 34, 34, 34, 242, 129, 122, 122, 239, 21, 165, + 59, 112, 21, 234, 234, 239, 27, 41, 234, 234, + 34, 159, 159, 159, 112, 21, 12, 12, 242, 242, + 59, 34, 125, 125, 184, 34, 34, 165, 165, 34, + 122, 159, 41, 122, 34, 34, 129, 91, 34, 21, + 81, 34, 159, 185, 185, 185, 159, 159, 91, 34, + 159, 12, 164, 91, 12, 159, 159, 125, 133, 159, + 125, 243, 159, 164, 143, 143, 143, 80, 164, 92, + 159, 133, 243, 214, 185, 254, 26, 243, 185, 185, + 92, 168, 185, 26, 143, 92, 214, 185, 254, 168, + 187, 185, 235, 235, 5, 143, 186, 186, 186, 143, + 143, 5, 185, 143, 104, 300, 28, 104, 143, 143, + 300, 104, 143, 28, 28, 143, 188, 144, 144, 144, + 233, 233, 189, 143, 173, 233, 233, 186, 173, 173, + 79, 186, 186, 75, 139, 186, 194, 144, 139, 139, + 186, 135, 177, 195, 186, 135, 135, 177, 144, 16, + 16, 16, 144, 144, 161, 186, 144, 196, 161, 161, + 200, 144, 144, 273, 273, 144, 23, 23, 144, 16, + 18, 18, 18, 175, 175, 71, 144, 1, 1, 70, + 16, 218, 218, 69, 16, 16, 96, 217, 16, 178, + 18, 97, 16, 16, 100, 174, 66, 16, 65, 63, + 151, 18, 20, 20, 20, 18, 18, 55, 16, 18, + 53, 105, 231, 51, 18, 18, 116, 95, 18, 163, + 47, 18, 109, 145, 145, 145, 241, 111, 162, 18, + 45, 117, 250, 20, 252, 253, 130, 20, 20, 256, + 35, 20, 118, 145, 265, 113, 20, 82, 155, 279, + 20, 280, 283, 85, 145, 301, 301, 301, 145, 145, + 289, 20, 145, 291, 292, 293, 294, 145, 145, 296, + 25, 145, 87, 88, 145, 15, 297, 297, 297, 123, + 309, 310, 145, 9, 90, 93, 301, 114, nil, nil, + 301, 301, nil, nil, 301, nil, nil, nil, nil, 301, + nil, nil, nil, 301, nil, nil, nil, 297, 158, 158, + 158, 297, 297, nil, 301, 297, nil, nil, nil, nil, + 297, nil, nil, nil, 297, nil, nil, nil, 158, 271, + 271, 271, nil, nil, nil, 297, nil, nil, nil, 158, + nil, nil, nil, 158, 158, nil, nil, 158, nil, nil, + nil, nil, 158, 158, nil, nil, 158, nil, nil, 158, + 271, 146, 146, 146, 271, 271, nil, 158, 271, nil, + nil, nil, nil, 271, nil, nil, nil, 271, nil, nil, + nil, 146, 147, 147, 147, nil, nil, nil, 271, nil, + nil, nil, 146, nil, nil, nil, 146, 146, nil, nil, + 146, nil, 147, nil, nil, 146, 146, nil, nil, 146, + nil, nil, 146, 147, 33, 33, 33, 147, 147, nil, + 146, 147, nil, nil, nil, nil, 147, 147, nil, nil, + 147, nil, nil, 147, 33, 77, 77, 77, nil, nil, + nil, 147, nil, nil, nil, 33, nil, nil, nil, 33, + 33, nil, nil, 33, nil, 77, nil, nil, 33, 33, + nil, nil, 33, nil, nil, 33, 77, 148, 148, 148, + 77, 77, nil, 33, 77, nil, nil, nil, nil, 77, + 77, nil, nil, 77, nil, nil, 77, 148, 37, 37, + 37, nil, nil, nil, 77, nil, nil, nil, 148, nil, + nil, nil, 148, 148, nil, nil, 148, 76, 76, 76, + 76, 148, 148, nil, nil, 148, nil, nil, 148, 37, + nil, nil, nil, 37, 37, nil, 148, 37, 193, 193, + 193, nil, 37, nil, nil, nil, 37, nil, 76, 202, + 202, nil, 76, 76, nil, nil, 76, 37, nil, nil, + nil, 76, nil, nil, nil, 76, nil, nil, nil, 193, + 208, 208, 208, 193, 193, nil, 76, 193, nil, 202, + nil, nil, 193, 202, 202, nil, 193, 202, 72, 72, + 72, nil, 202, nil, nil, nil, 202, 193, nil, nil, + nil, 208, nil, nil, nil, 208, 208, 202, 72, 208, + 149, 149, 149, nil, 208, nil, nil, nil, 208, 72, + nil, nil, nil, 72, 72, nil, nil, 72, nil, 208, + 149, nil, 72, 72, nil, nil, 72, nil, nil, 72, + nil, 149, 52, 52, 52, 149, 149, 72, nil, 149, + nil, nil, nil, nil, 149, 149, nil, nil, 149, nil, + nil, 149, nil, 150, 150, 150, nil, nil, nil, 149, + nil, nil, nil, 52, nil, nil, nil, 52, 52, nil, + nil, 52, nil, 150, nil, nil, 52, nil, nil, nil, + 52, nil, nil, nil, 150, 152, 152, 152, 150, 150, + nil, 52, 150, nil, nil, nil, nil, 150, 150, nil, + nil, 150, nil, nil, 150, 152, 153, 153, 153, nil, + nil, nil, 150, nil, nil, nil, 152, nil, nil, nil, + 152, 152, nil, nil, 152, nil, 153, nil, nil, 152, + 152, nil, nil, 152, nil, nil, 152, 153, 154, 154, + 154, 153, 153, nil, 152, 153, nil, nil, nil, nil, + 153, 153, nil, nil, 153, nil, nil, 153, 154, 157, + 157, 157, nil, nil, nil, 153, nil, nil, nil, 154, + nil, nil, nil, 154, 154, nil, nil, 154, nil, 157, + nil, nil, 154, 154, nil, nil, 154, nil, nil, 154, + 157, 89, 89, 89, 157, 157, nil, 154, 157, nil, nil, nil, nil, 157, 157, nil, nil, 157, nil, nil, - nil, nil, 157, 157, nil, nil, 157, nil, nil, 157, - 270, 145, 145, 145, 270, 270, nil, 157, 270, nil, - nil, nil, nil, 270, nil, nil, nil, 270, nil, nil, - nil, 145, 146, 146, 146, nil, nil, nil, 270, nil, - nil, nil, 145, nil, nil, nil, 145, 145, nil, nil, - 145, nil, 146, nil, nil, 145, 145, nil, nil, 145, - nil, nil, 145, 146, 33, 33, 33, 146, 146, nil, - 145, 146, nil, nil, nil, nil, 146, 146, nil, nil, - 146, nil, nil, 146, 33, 76, 76, 76, nil, nil, - nil, 146, nil, nil, nil, 33, nil, nil, nil, 33, - 33, nil, nil, 33, nil, 76, nil, nil, 33, 33, - nil, nil, 33, nil, nil, 33, 76, 147, 147, 147, - 76, 76, nil, 33, 76, nil, nil, nil, nil, 76, - 76, nil, nil, 76, nil, nil, 76, 147, 37, 37, - 37, nil, nil, nil, 76, nil, nil, nil, 147, nil, - nil, nil, 147, 147, nil, nil, 147, 75, 75, 75, - 75, 147, 147, nil, nil, 147, nil, nil, 147, 37, - nil, nil, nil, 37, 37, nil, 147, 37, 192, 192, - 192, nil, 37, nil, nil, nil, 37, nil, 75, 201, - 201, nil, 75, 75, nil, nil, 75, 37, nil, nil, - nil, 75, nil, nil, nil, 75, nil, nil, nil, 192, - 207, 207, 207, 192, 192, nil, 75, 192, nil, 201, - nil, nil, 192, 201, 201, nil, 192, 201, 71, 71, - 71, nil, 201, nil, nil, nil, 201, 192, nil, nil, - nil, 207, nil, nil, nil, 207, 207, 201, 71, 207, - 148, 148, 148, nil, 207, nil, nil, nil, 207, 71, - nil, nil, nil, 71, 71, nil, nil, 71, nil, 207, - 148, nil, 71, 71, nil, nil, 71, nil, nil, 71, - nil, 148, 51, 51, 51, 148, 148, 71, nil, 148, - nil, nil, nil, nil, 148, 148, nil, nil, 148, nil, - nil, 148, nil, 149, 149, 149, nil, nil, nil, 148, - nil, nil, nil, 51, nil, nil, nil, 51, 51, nil, - nil, 51, nil, 149, nil, nil, 51, nil, nil, nil, - 51, nil, nil, nil, 149, 151, 151, 151, 149, 149, - nil, 51, 149, nil, nil, nil, nil, 149, 149, nil, - nil, 149, nil, nil, 149, 151, 152, 152, 152, nil, - nil, nil, 149, nil, nil, nil, 151, nil, nil, nil, - 151, 151, nil, nil, 151, nil, 152, nil, nil, 151, - 151, nil, nil, 151, nil, nil, 151, 152, 153, 153, - 153, 152, 152, nil, 151, 152, nil, nil, nil, nil, - 152, 152, nil, nil, 152, nil, nil, 152, 153, 156, - 156, 156, nil, nil, nil, 152, nil, nil, nil, 153, - nil, nil, nil, 153, 153, nil, nil, 153, nil, 156, - nil, nil, 153, 153, nil, nil, 153, nil, nil, 153, - 156, 88, 88, 88, 156, 156, nil, 153, 156, nil, - nil, nil, nil, 156, 156, nil, nil, 156, nil, nil, - 156, nil, 82, 82, 82, nil, nil, nil, 156, nil, - nil, nil, 88, nil, nil, nil, 88, 88, nil, nil, - 88, nil, 82, nil, nil, 88, nil, nil, nil, 88, - nil, nil, nil, 82, 205, 205, nil, 82, 82, nil, - 88, 82, nil, nil, nil, nil, 82, 82, 246, 246, - 82, nil, nil, 82, 205, 48, 48, nil, nil, nil, - nil, 82, nil, nil, 205, nil, nil, nil, 205, 205, - nil, nil, 205, 247, 247, 48, 205, 205, 246, nil, - nil, 205, 246, 246, nil, 48, 246, 159, 159, 48, - 48, 246, 205, 48, nil, 246, nil, 48, 48, nil, - nil, nil, 48, 247, nil, nil, 246, 247, 247, 283, - 283, 247, nil, 48, nil, nil, 247, 159, nil, nil, - 247, 159, 159, 307, 307, 159, nil, nil, nil, nil, - 159, 247, nil, nil, 159, nil, nil, nil, nil, 283, - nil, nil, nil, 283, 283, 159, nil, 283, 136, 136, - 135, 135, 283, 307, nil, nil, 283, 307, 307, nil, - nil, 307, nil, nil, nil, nil, 307, 283, 136, nil, - 307, nil, nil, nil, nil, 236, 236, nil, 136, 236, - 135, 307, 136, 136, 135, 135, 136, nil, 135, nil, - 136, 136, 135, 135, nil, 136, nil, 135, nil, nil, - 130, 130, nil, 130, nil, 236, 136, nil, 135, 236, - 236, nil, nil, 236, nil, nil, nil, nil, 236, nil, - nil, nil, 236, nil, nil, nil, nil, nil, nil, nil, - 130, 85, nil, 236, 130, 130, nil, nil, 130, nil, - 85, 85, nil, 130, nil, nil, nil, 130, nil, 85, - 85, 85, 85, 137, 137, nil, nil, nil, 130, nil, - nil, 137, 137, 137, 137, 137, nil, nil, 218, 218, - 218, 218, nil, 85, 85, 218, 218, 85, 85, 85, - 85, 85, 85, nil, 85, 85, 137, 137, nil, nil, - 137, 137, 137, 137, 137, 137, nil, 137, 137, 102, - 102, nil, nil, nil, nil, nil, nil, nil, 102, 102, - 102, 102, 226, 226, nil, nil, nil, nil, nil, nil, - nil, 226, 226, 226, 226, nil, nil, 220, 220, 220, - 220, nil, 102, 102, 220, 220, 102, 102, 102, 102, - 102, 102, nil, 102, 102, nil, nil, nil, nil, 226, - 226, 226, 226, 226, 226, nil, 226, 226, 222, 222, - nil, nil, nil, nil, nil, nil, nil, 222, 222, 222, - 222, 101, 101, nil, nil, nil, nil, nil, nil, nil, - 101, 101, 101, 101, nil, 223, nil, nil, nil, nil, - nil, nil, 222, 223, nil, 222, 222, 222, 222, 222, - 222, nil, 222, 222, 101, 101, 224, nil, 101, 101, - 101, 101, 101, 101, 224, 101, 101, nil, nil, 221, - nil, 223, 223, 223, 223, 223, 223, 221, 223, 223, - 227, nil, 219, 219, 219, 219, 219, 219, 227, 219, - 219, nil, 224, 224, 224, 224, 224, 224, nil, 224, - 224, nil, nil, nil, 302, 221, 221, 221, 221, 221, - 221, nil, 221, 221, nil, nil, 227, 227, 227, 227, - 227, 227, nil, 227, 227, 302, 190, 302, 302, nil, - 302, 302, nil, 302, nil, 302, nil, 302, nil, 302, - nil, nil, 302, 302, nil, 258, nil, 190, nil, 190, - 190, nil, 190, 190, nil, 190, nil, 190, nil, 190, - nil, 190, nil, nil, 190, 190, 258, 266, 258, 258, - nil, 258, 258, nil, 258, nil, 258, nil, 258, nil, - 258, nil, nil, 258, 258, nil, 231, nil, 266, nil, - 266, 266, nil, 266, 266, nil, 266, nil, 266, nil, - 266, nil, 266, nil, nil, 266, 266, 231, 155, 231, - 231, nil, 231, 231, nil, 231, nil, 231, nil, 231, - nil, 231, nil, nil, 231, 231, nil, 310, nil, 155, - nil, 155, 155, nil, 155, 155, nil, 155, nil, 155, - nil, 155, nil, 155, nil, nil, 155, 155, 310, 182, - 310, 310, nil, 310, 310, nil, 310, nil, 310, nil, - 310, nil, 310, nil, nil, 310, 310, nil, 312, nil, - 182, nil, 182, 182, nil, 182, 182, nil, 182, nil, - 182, nil, 182, nil, 182, nil, nil, 182, 182, 312, - 322, 312, 312, nil, 312, 312, nil, 312, nil, 312, - nil, 312, nil, 312, nil, nil, 312, 312, nil, 256, - nil, 322, nil, 322, 322, nil, 322, 322, nil, 322, - nil, 322, nil, 322, nil, 322, nil, nil, 322, 322, - 256, 324, 256, 256, nil, 256, 256, nil, 256, nil, - 256, nil, 256, nil, 256, nil, nil, 256, 256, nil, - nil, nil, 324, nil, 324, 324, nil, 324, 324, nil, - 324, nil, 324, nil, 324, nil, 324, nil, nil, 324, - 324, 30, nil, 30, 30, nil, 30, 30, nil, 30, + 157, nil, 83, 83, 83, nil, nil, nil, 157, nil, + nil, nil, 89, nil, nil, nil, 89, 89, nil, nil, + 89, nil, 83, nil, nil, 89, nil, nil, nil, 89, + nil, nil, nil, 83, 206, 206, nil, 83, 83, nil, + 89, 83, nil, nil, nil, nil, 83, 83, 247, 247, + 83, nil, nil, 83, 206, 49, 49, nil, nil, nil, + nil, 83, nil, nil, 206, nil, nil, nil, 206, 206, + nil, nil, 206, 248, 248, 49, 206, 206, 247, nil, + nil, 206, 247, 247, nil, 49, 247, 160, 160, 49, + 49, 247, 206, 49, nil, 247, nil, 49, 49, nil, + nil, nil, 49, 248, nil, nil, 247, 248, 248, 284, + 284, 248, nil, 49, nil, nil, 248, 160, nil, nil, + 248, 160, 160, 308, 308, 160, nil, nil, nil, nil, + 160, 248, nil, nil, 160, nil, nil, nil, nil, 284, + nil, nil, nil, 284, 284, 160, nil, 284, 137, 137, + 136, 136, 284, 308, nil, nil, 284, 308, 308, nil, + nil, 308, nil, nil, nil, nil, 308, 284, 137, nil, + 308, nil, nil, nil, nil, 237, 237, nil, 137, 237, + 136, 308, 137, 137, 136, 136, 137, nil, 136, nil, + 137, 137, 136, 136, nil, 137, nil, 136, nil, nil, + 131, 131, nil, 131, nil, 237, 137, nil, 136, 237, + 237, nil, nil, 237, nil, nil, nil, nil, 237, nil, + nil, nil, 237, nil, nil, nil, nil, nil, nil, nil, + 131, 86, nil, 237, 131, 131, nil, nil, 131, nil, + 86, 86, nil, 131, nil, nil, nil, 131, nil, 86, + 86, 86, 86, 138, 138, nil, nil, nil, 131, nil, + nil, 138, 138, 138, 138, 138, nil, nil, 219, 219, + 219, 219, nil, 86, 86, 219, 219, 86, 86, 86, + 86, 86, 86, nil, 86, 86, 138, 138, nil, nil, + 138, 138, 138, 138, 138, 138, nil, 138, 138, 103, + 103, nil, nil, nil, nil, nil, nil, nil, 103, 103, + 103, 103, 227, 227, nil, nil, nil, nil, nil, nil, + nil, 227, 227, 227, 227, nil, nil, 221, 221, 221, + 221, nil, 103, 103, 221, 221, 103, 103, 103, 103, + 103, 103, nil, 103, 103, nil, nil, nil, nil, 227, + 227, 227, 227, 227, 227, nil, 227, 227, 223, 223, + nil, nil, nil, nil, nil, nil, nil, 223, 223, 223, + 223, 102, 102, nil, nil, nil, nil, nil, nil, nil, + 102, 102, 102, 102, nil, 224, nil, nil, nil, nil, + nil, nil, 223, 224, nil, 223, 223, 223, 223, 223, + 223, nil, 223, 223, 102, 102, 225, nil, 102, 102, + 102, 102, 102, 102, 225, 102, 102, nil, nil, 222, + nil, 224, 224, 224, 224, 224, 224, 222, 224, 224, + 228, nil, 220, 220, 220, 220, 220, 220, 228, 220, + 220, nil, 225, 225, 225, 225, 225, 225, nil, 225, + 225, nil, nil, nil, 303, 222, 222, 222, 222, 222, + 222, nil, 222, 222, nil, nil, 228, 228, 228, 228, + 228, 228, nil, 228, 228, 303, 191, 303, 303, nil, + 303, 303, nil, 303, nil, 303, nil, 303, nil, 303, + nil, nil, 303, 303, nil, 259, nil, 191, nil, 191, + 191, nil, 191, 191, nil, 191, nil, 191, nil, 191, + nil, 191, nil, nil, 191, 191, 259, 267, 259, 259, + nil, 259, 259, nil, 259, nil, 259, nil, 259, nil, + 259, nil, nil, 259, 259, nil, 232, nil, 267, nil, + 267, 267, nil, 267, 267, nil, 267, nil, 267, nil, + 267, nil, 267, nil, nil, 267, 267, 232, 156, 232, + 232, nil, 232, 232, nil, 232, nil, 232, nil, 232, + nil, 232, nil, nil, 232, 232, nil, 311, nil, 156, + nil, 156, 156, nil, 156, 156, nil, 156, nil, 156, + nil, 156, nil, 156, nil, nil, 156, 156, 311, 183, + 311, 311, nil, 311, 311, nil, 311, nil, 311, nil, + 311, nil, 311, nil, nil, 311, 311, nil, 313, nil, + 183, nil, 183, 183, nil, 183, 183, nil, 183, nil, + 183, nil, 183, nil, 183, nil, nil, 183, 183, 313, + 323, 313, 313, nil, 313, 313, nil, 313, nil, 313, + nil, 313, nil, 313, nil, nil, 313, 313, nil, 257, + nil, 323, nil, 323, 323, nil, 323, 323, nil, 323, + nil, 323, nil, 323, nil, 323, nil, nil, 323, 323, + 257, 325, 257, 257, nil, 257, 257, nil, 257, nil, + 257, nil, 257, nil, 257, nil, nil, 257, 257, nil, + nil, nil, 325, nil, 325, 325, nil, 325, 325, nil, + 325, nil, 325, nil, 325, nil, 325, nil, nil, 325, + 325, 30, nil, 30, 30, nil, 30, 30, nil, 30, nil, 30, nil, 30, nil, 30, nil, nil, 30, 30, 0, nil, 0, 0, nil, 0, 0, nil, 0, nil, - 0, nil, 0, nil, 0, nil, nil, 0, 0, 228, - 228, 228, 228, 228, 228, nil, 228, 228 ] + 0, nil, 0, nil, 0, nil, nil, 0, 0, 229, + 229, 229, 229, 229, 229, nil, 229, 229 ] racc_action_pointer = [ - 1532, 160, nil, nil, nil, 48, nil, nil, nil, 287, + 1532, 174, nil, nil, nil, 66, nil, nil, nil, 287, nil, nil, 23, nil, nil, 279, 157, nil, 178, nil, - 210, 6, nil, 99, nil, 280, 66, 215, 78, nil, + 210, 6, nil, 173, nil, 280, 48, -26, 78, nil, 1513, nil, nil, 422, -2, 215, nil, 496, nil, nil, - nil, 7, nil, nil, 202, nil, 209, nil, 872, nil, - 202, 640, 218, nil, 207, nil, nil, nil, 8, nil, - nil, nil, 188, nil, 206, 185, nil, nil, 172, 168, - 164, 586, nil, nil, 122, 515, 443, nil, 119, 56, - 29, 180, 820, nil, 200, 1045, 205, 221, 799, 191, - 25, 49, 231, nil, 228, 255, 236, nil, nil, 257, - nil, 1176, 1104, 76, 276, nil, nil, nil, 262, nil, - 255, 74, 285, -5, nil, 183, 223, 231, nil, nil, - nil, 2, 283, nil, 29, nil, nil, nil, -5, 236, - 1017, nil, 58, nil, 146, 967, 965, 1058, 129, nil, - nil, nil, 72, 125, 231, 369, 390, 475, 608, 661, - 184, 693, 714, 746, 171, 1371, 767, 316, 19, 904, - 139, 201, 195, 40, -11, nil, nil, -9, nil, nil, - nil, nil, 120, 161, 180, nil, 82, 190, nil, nil, - nil, nil, 1412, 27, 51, 104, 93, 88, 94, nil, - 1289, nil, 536, 139, 115, 158, nil, nil, nil, 148, - nil, 546, nil, nil, nil, 851, nil, 568, nil, nil, - nil, nil, nil, 75, nil, nil, 192, 117, 1036, 1200, - 1095, 1223, 1163, 1189, 1210, nil, 1117, 1234, 1527, nil, - 193, 1349, 76, -41, 128, nil, 992, nil, 81, nil, - 229, -20, 57, nil, nil, nil, 865, 890, nil, 232, - nil, 231, 1, nil, 284, 226, 1472, nil, 1308, nil, - nil, nil, nil, nil, 244, nil, 1330, nil, nil, nil, - 337, nil, 182, nil, nil, nil, nil, nil, 253, 232, - nil, nil, 256, 926, nil, nil, nil, nil, 249, nil, - 252, 253, 254, 255, nil, 272, 284, nil, 119, 263, - nil, nil, 1267, nil, nil, nil, nil, 940, 283, 284, - 1390, nil, 1431, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1453, nil, 1494, nil, nil ] + nil, 7, nil, nil, nil, 202, nil, 209, nil, 872, + nil, 202, 640, 218, nil, 207, nil, nil, nil, 8, + nil, nil, nil, 188, nil, 206, 185, nil, nil, 172, + 168, 164, 586, nil, nil, 122, 515, 443, nil, 119, + 56, 29, 236, 820, nil, 242, 1045, 261, 277, 799, + 256, 25, 57, 289, nil, 217, 196, 179, nil, nil, + 198, nil, 1176, 1104, 76, 215, nil, nil, nil, 211, + nil, 198, 2, 245, 276, nil, 205, 223, 231, nil, + nil, nil, 2, 283, nil, 29, nil, nil, nil, -5, + 236, 1017, nil, 58, nil, 146, 967, 965, 1058, 139, + nil, nil, nil, 72, 125, 231, 369, 390, 475, 608, + 661, 149, 693, 714, 746, 197, 1371, 767, 316, 19, + 904, 159, 229, 219, 40, -11, nil, nil, 75, nil, + nil, nil, nil, 90, 167, 180, nil, 119, 193, nil, + nil, nil, nil, 1412, 27, 51, 104, 93, 88, 94, + nil, 1289, nil, 536, 139, 115, 158, nil, nil, nil, + 148, nil, 546, nil, nil, nil, 851, nil, 568, nil, + nil, nil, nil, nil, 73, nil, nil, 192, 132, 1036, + 1200, 1095, 1223, 1163, 1189, 1210, nil, 1117, 1234, 1527, + nil, 193, 1349, 76, -41, 43, nil, 992, nil, -3, + nil, 229, -20, 49, nil, nil, nil, 865, 890, nil, + 232, nil, 231, 222, 75, nil, 236, 1472, nil, 1308, + nil, nil, nil, nil, nil, 244, nil, 1330, nil, nil, + nil, 337, nil, 164, nil, nil, nil, nil, nil, 253, + 232, nil, nil, 256, 926, nil, nil, nil, nil, 249, + nil, 252, 253, 254, 255, nil, 272, 284, nil, nil, + 82, 263, nil, 1267, nil, nil, nil, nil, 940, 283, + 284, 1390, nil, 1431, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 1453, nil, 1494, nil, nil ] racc_action_default = [ - -172, -198, -15, -3, -165, -198, -16, -5, -163, -198, - -17, -6, -198, -7, -8, -198, -164, -9, -198, -10, - -198, -198, -11, -198, -12, -198, -198, -39, -198, -13, - -1, -14, -2, -198, -198, -172, -164, -72, -170, -169, - -168, -172, -171, -166, -79, -189, -198, -31, -198, -33, - -32, -198, -63, -102, -21, -104, -103, -22, -62, -23, - -197, -61, -26, -153, -198, -27, -152, -151, -28, -29, - -30, -198, -94, -112, -90, -198, -198, -97, -91, -95, - -99, -92, -198, -96, -93, -198, -98, -198, -198, -72, - -172, -172, -42, -154, -156, -198, -172, -40, -38, -198, - -4, -70, -71, -198, -198, -185, -73, -67, -64, -63, - -59, -62, -195, -65, -57, -68, -198, -66, -150, -69, - -149, -198, -198, -183, -198, -77, -78, -80, -198, -195, - -198, -20, -198, -82, -198, -198, -198, -198, -198, -192, - -128, -121, -198, -198, -198, -198, -198, -198, -198, -198, - -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, - -198, -198, -195, -172, -198, -46, -48, -198, -62, -55, - -54, -45, -198, -79, -198, 327, -173, -198, -174, -187, - -186, -188, -198, -198, -60, -198, -198, -196, -72, -184, - -198, -167, -198, -198, -196, -198, -147, -139, -140, -62, - -145, -198, -148, -146, -18, -198, -105, -198, -193, -194, - -24, -25, -101, -198, -131, -190, -194, -117, -119, -123, - -120, -125, -130, -127, -124, -113, -129, -126, -122, -114, - -109, -198, -115, -116, -118, -137, -198, -133, -198, -106, - -198, -198, -198, -51, -50, -44, -198, -198, -43, -195, - -155, -182, -198, -177, -180, -198, -198, -160, -198, -34, - -58, -75, -35, -74, -195, -162, -198, -76, -37, -81, - -198, -142, -195, -19, -83, -100, -191, -108, -198, -109, - -132, -134, -198, -198, -36, -49, -47, -88, -84, -52, - -85, -89, -86, -87, -53, -198, -198, -176, -198, -198, - -175, -158, -198, -159, -56, -161, -144, -198, -198, -194, - -198, -107, -198, -138, -41, -181, -178, -179, -157, -143, - -141, -111, -198, -136, -198, -110, -135 ] + -173, -199, -15, -3, -165, -199, -16, -5, -163, -199, + -17, -6, -199, -7, -8, -199, -164, -9, -199, -10, + -199, -199, -11, -199, -12, -199, -199, -39, -199, -13, + -1, -14, -2, -199, -199, -173, -164, -72, -171, -170, + -169, -173, -172, -166, -168, -79, -190, -199, -31, -199, + -33, -32, -199, -63, -102, -21, -104, -103, -22, -62, + -23, -198, -61, -26, -153, -199, -27, -152, -151, -28, + -29, -30, -199, -94, -112, -90, -199, -199, -97, -91, + -95, -99, -92, -199, -96, -93, -199, -98, -199, -199, + -72, -173, -173, -42, -154, -156, -199, -173, -40, -38, + -199, -4, -70, -71, -199, -199, -186, -73, -67, -64, + -63, -59, -62, -196, -65, -57, -68, -199, -66, -150, + -69, -149, -199, -199, -184, -199, -77, -78, -80, -199, + -196, -199, -20, -199, -82, -199, -199, -199, -199, -199, + -193, -128, -121, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -196, -173, -199, -46, -48, -199, -62, + -55, -54, -45, -199, -79, -199, 328, -174, -199, -175, + -188, -187, -189, -199, -199, -60, -199, -199, -197, -72, + -185, -199, -167, -199, -199, -197, -199, -147, -139, -140, + -62, -145, -199, -148, -146, -18, -199, -105, -199, -194, + -195, -24, -25, -101, -199, -131, -191, -195, -117, -119, + -123, -120, -125, -130, -127, -124, -113, -129, -126, -122, + -114, -109, -199, -115, -116, -118, -137, -199, -133, -199, + -106, -199, -199, -199, -51, -50, -44, -199, -199, -43, + -196, -155, -183, -199, -199, -178, -181, -199, -160, -199, + -34, -58, -75, -35, -74, -196, -162, -199, -76, -37, + -81, -199, -142, -196, -19, -83, -100, -192, -108, -199, + -109, -132, -134, -199, -199, -36, -49, -47, -88, -84, + -52, -85, -89, -86, -87, -53, -199, -199, -176, -177, + -199, -199, -158, -199, -159, -56, -161, -144, -199, -199, + -195, -199, -107, -199, -138, -41, -182, -179, -180, -157, + -143, -141, -111, -199, -136, -199, -110, -135 ] racc_goto_table = [ - 21, 15, 100, 198, 30, 186, 114, 195, 253, 54, - 112, 119, 43, 35, 237, 164, 172, 59, 129, 32, - 210, 47, 193, 277, 67, 125, 25, 134, 99, 225, - 21, 15, 269, 229, 96, 307, 235, 289, 294, 236, - 286, 132, 107, 92, 197, 67, 183, 272, 94, 59, - 50, 138, 69, 47, 105, 240, 67, 93, 177, 104, - 123, 41, 162, 122, 160, 110, 255, 252, 98, 180, - nil, 108, 311, 118, 271, nil, nil, 87, 195, nil, - nil, nil, 50, nil, 69, nil, nil, nil, 241, nil, - 210, 281, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 133, nil, - nil, 179, nil, 235, nil, 178, nil, nil, nil, nil, - nil, 189, nil, nil, 191, nil, nil, nil, nil, 213, - 316, nil, 133, nil, nil, nil, 211, 59, 67, nil, - 47, 47, 295, 67, 67, 133, nil, 249, nil, nil, - nil, nil, nil, 260, 125, 21, 15, 304, 119, 231, - 313, 264, nil, nil, 196, 308, 118, 67, 263, 50, - 50, 69, 69, nil, nil, 125, nil, nil, nil, nil, - 319, nil, 21, 15, 195, nil, 258, nil, nil, 107, - 21, 15, 67, 196, 266, 118, nil, nil, nil, nil, - nil, nil, nil, 100, nil, nil, 211, nil, 250, 67, - 47, nil, nil, 67, nil, 65, nil, nil, 108, nil, - 118, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 100, 21, 15, nil, nil, 196, 115, 118, 100, 50, - nil, 69, 261, nil, 67, nil, nil, 65, nil, 267, - nil, 287, 287, nil, 67, 67, 21, 15, 21, 15, - 302, nil, nil, nil, 274, 62, 21, 15, nil, nil, - 196, nil, 118, nil, 100, nil, nil, nil, nil, nil, - 288, 288, 293, 293, nil, nil, 113, nil, nil, 170, - 170, 67, nil, nil, 100, nil, 100, 62, nil, 68, - nil, nil, 21, 15, nil, nil, nil, nil, nil, nil, - 21, 15, 21, 15, 322, 67, 324, 196, nil, 118, - 117, nil, 21, 15, 21, 15, nil, 306, nil, 202, - nil, 68, nil, 70, 65, 65, nil, nil, nil, 169, - 169, 196, nil, 118, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 315, 120, nil, 317, nil, 202, nil, - nil, nil, 170, nil, nil, 70, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 200, - nil, nil, nil, 115, 62, 62, nil, nil, nil, nil, + 15, 21, 101, 199, 30, 196, 130, 113, 255, 43, + 238, 126, 211, 278, 35, 120, 60, 25, 115, 135, + 32, 55, 165, 173, 68, 187, 290, 295, 270, 100, + 15, 21, 48, 226, 236, 97, 308, 230, 237, 287, + 93, 198, 194, 139, 184, 68, 273, 95, 178, 60, + 66, 105, 51, 108, 133, 106, 161, 68, 41, 94, + 163, 124, 312, 123, 111, 48, 190, 253, 254, 99, + 181, 116, nil, 109, 272, 241, 196, nil, 88, nil, + nil, nil, 211, 66, nil, 51, nil, 282, nil, nil, + nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 202, nil, nil, nil, 65, nil, nil, nil, 200, nil, - 85, nil, 169, 203, nil, nil, nil, nil, 68, 68, - nil, nil, nil, nil, nil, 101, 102, nil, nil, nil, - nil, nil, nil, 113, nil, 202, nil, nil, nil, nil, - nil, 170, 203, nil, nil, 291, 291, 120, nil, nil, - 200, nil, 70, 70, 62, nil, nil, nil, nil, nil, - nil, nil, nil, 137, nil, nil, nil, 117, 140, nil, - nil, nil, nil, nil, 141, nil, 120, nil, nil, nil, - nil, nil, 202, nil, 203, 200, nil, nil, 68, nil, - nil, 169, nil, nil, nil, 290, 290, nil, nil, nil, - nil, 120, nil, nil, nil, nil, 202, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 120, 203, - nil, nil, 70, nil, nil, nil, nil, nil, nil, 292, - 292, nil, 200, nil, 217, 218, 219, 220, 221, 222, - 223, 224, nil, 226, 227, 228, nil, nil, 232, 233, - 234, nil, nil, 120, nil, nil, 200, nil, nil, nil, - nil, nil, nil, 120, 120, nil, 203, nil, nil, nil, + 134, 236, nil, 180, nil, nil, nil, 179, nil, nil, + nil, nil, 192, nil, nil, 171, 171, nil, nil, nil, + nil, 317, nil, nil, 134, 250, 212, 60, nil, 68, + 126, nil, 214, nil, 68, 68, nil, 134, nil, nil, + nil, nil, 48, 48, 264, nil, 15, 21, 314, 265, + 232, 126, 296, 120, nil, 203, 261, 197, 68, nil, + 66, 66, 51, 51, nil, nil, nil, 305, nil, nil, + 320, nil, 196, 15, 21, 309, nil, 259, nil, nil, + nil, 15, 21, 68, 203, 267, 197, nil, 171, nil, + nil, 108, nil, nil, 101, nil, 212, nil, nil, nil, + 68, 251, nil, 71, 68, nil, 70, nil, nil, 116, + nil, 109, 48, nil, nil, nil, nil, nil, nil, nil, + nil, 101, 15, 21, 121, nil, 203, 119, 197, 101, + 66, nil, 51, nil, 262, 68, 71, nil, nil, 70, + nil, 268, nil, nil, nil, 68, 68, 15, 21, 15, + 21, 303, nil, 288, 288, nil, 275, 15, 21, 69, + nil, 203, 63, 197, nil, 101, nil, 171, nil, nil, + nil, 292, 292, 289, 289, nil, nil, nil, nil, nil, + 118, nil, 68, 114, nil, 101, nil, 101, nil, nil, + nil, nil, 69, 15, 21, 63, nil, nil, nil, nil, + nil, 15, 21, 15, 21, 323, 68, 325, 203, nil, + 197, nil, nil, 15, 21, 15, 21, nil, 121, 307, + nil, 119, nil, 71, 71, nil, 70, 70, nil, nil, + nil, nil, 203, nil, 197, nil, nil, 170, 170, nil, + nil, nil, nil, nil, nil, 316, nil, 121, nil, 318, + 119, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 121, nil, 204, 119, nil, 201, nil, 69, + 69, nil, 63, 63, nil, 86, nil, nil, nil, 121, + nil, nil, 119, 71, nil, nil, 70, nil, nil, nil, + 102, 103, nil, 204, nil, nil, 201, nil, nil, nil, + 170, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 121, nil, nil, 119, 118, nil, + nil, 114, nil, nil, 121, 121, nil, 294, 294, 138, + nil, nil, nil, nil, 141, 204, nil, nil, 201, 69, + 142, nil, 63, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 203, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 120, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 121, nil, nil, 119, nil, nil, nil, nil, nil, + 204, nil, nil, 201, nil, nil, nil, nil, nil, 170, + 293, 293, nil, 291, 291, 121, nil, nil, 119, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 120 ] + 218, 219, 220, 221, 222, 223, 224, 225, nil, 227, + 228, 229, nil, nil, 233, 234, 235, 204, nil, nil, + 201, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 204, nil, nil, 201 ] racc_goto_check = [ - 33, 20, 4, 61, 2, 32, 43, 59, 71, 18, - 31, 46, 68, 28, 57, 37, 37, 20, 34, 3, - 19, 26, 32, 54, 45, 48, 1, 52, 33, 55, - 33, 20, 51, 55, 28, 53, 59, 42, 42, 56, - 38, 18, 26, 36, 60, 45, 30, 62, 63, 20, - 27, 52, 24, 26, 3, 32, 45, 27, 64, 65, - 3, 66, 31, 67, 52, 29, 69, 70, 5, 72, - nil, 27, 54, 24, 61, nil, nil, 49, 59, nil, - nil, nil, 27, nil, 24, nil, nil, nil, 37, nil, - 19, 57, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 49, nil, - nil, 28, nil, 59, nil, 3, nil, nil, nil, nil, - nil, 68, nil, nil, 68, nil, nil, nil, nil, 18, - 71, nil, 49, nil, nil, nil, 20, 20, 45, nil, - 26, 26, 32, 45, 45, 49, nil, 34, nil, nil, - nil, nil, nil, 43, 48, 33, 20, 32, 46, 2, - 59, 31, nil, nil, 27, 32, 24, 45, 48, 27, - 27, 24, 24, nil, nil, 48, nil, nil, nil, nil, - 61, nil, 33, 20, 59, nil, 2, nil, nil, 26, - 33, 20, 45, 27, 2, 24, nil, nil, nil, nil, - nil, nil, nil, 4, nil, nil, 20, nil, 27, 45, - 26, nil, nil, 45, nil, 22, nil, nil, 27, nil, + 20, 33, 4, 61, 2, 59, 34, 31, 72, 68, + 57, 48, 19, 54, 28, 46, 20, 1, 43, 52, + 3, 18, 37, 37, 45, 32, 42, 42, 51, 33, + 20, 33, 26, 55, 59, 28, 53, 55, 56, 38, + 36, 60, 32, 52, 30, 45, 62, 63, 64, 20, + 22, 65, 27, 26, 18, 3, 52, 45, 66, 27, + 31, 3, 54, 67, 29, 26, 69, 70, 71, 5, + 73, 22, nil, 27, 61, 32, 59, nil, 49, nil, + nil, nil, 19, 22, nil, 27, nil, 57, nil, nil, + nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 49, 59, nil, 28, nil, nil, nil, 3, nil, nil, + nil, nil, 68, nil, nil, 22, 22, nil, nil, nil, + nil, 72, nil, nil, 49, 34, 20, 20, nil, 45, + 48, nil, 18, nil, 45, 45, nil, 49, nil, nil, + nil, nil, 26, 26, 48, nil, 20, 33, 59, 31, + 2, 48, 32, 46, nil, 22, 43, 27, 45, nil, + 22, 22, 27, 27, nil, nil, nil, 32, nil, nil, + 61, nil, 59, 20, 33, 32, nil, 2, nil, nil, + nil, 20, 33, 45, 22, 2, 27, nil, 22, nil, + nil, 26, nil, nil, 4, nil, 20, nil, nil, nil, + 45, 27, nil, 25, 45, nil, 24, nil, nil, 22, + nil, 27, 26, nil, nil, nil, nil, nil, nil, nil, + nil, 4, 20, 33, 25, nil, 22, 24, 27, 4, + 22, nil, 27, nil, 49, 45, 25, nil, nil, 24, + nil, 49, nil, nil, nil, 45, 45, 20, 33, 20, + 33, 2, nil, 26, 26, nil, 49, 20, 33, 23, + nil, 22, 21, 27, nil, 4, nil, 22, nil, nil, + nil, 22, 22, 27, 27, nil, nil, nil, nil, nil, + 23, nil, 45, 21, nil, 4, nil, 4, nil, nil, + nil, nil, 23, 20, 33, 21, nil, nil, nil, nil, + nil, 20, 33, 20, 33, 2, 45, 2, 22, nil, + 27, nil, nil, 20, 33, 20, 33, nil, 25, 49, + nil, 24, nil, 25, 25, nil, 24, 24, nil, nil, + nil, nil, 22, nil, 27, nil, nil, 21, 21, nil, + nil, nil, nil, nil, nil, 49, nil, 25, nil, 49, 24, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 4, 33, 20, nil, nil, 27, 22, 24, 4, 27, - nil, 24, 49, nil, 45, nil, nil, 22, nil, 49, - nil, 26, 26, nil, 45, 45, 33, 20, 33, 20, - 2, nil, nil, nil, 49, 21, 33, 20, nil, nil, - 27, nil, 24, nil, 4, nil, nil, nil, nil, nil, - 27, 27, 24, 24, nil, nil, 21, nil, nil, 22, - 22, 45, nil, nil, 4, nil, 4, 21, nil, 23, - nil, nil, 33, 20, nil, nil, nil, nil, nil, nil, - 33, 20, 33, 20, 2, 45, 2, 27, nil, 24, - 23, nil, 33, 20, 33, 20, nil, 49, nil, 22, - nil, 23, nil, 25, 22, 22, nil, nil, nil, 21, - 21, 27, nil, 24, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 49, 25, nil, 49, nil, 22, nil, - nil, nil, 22, nil, nil, 25, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 21, - nil, nil, nil, 22, 21, 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, 22, nil, nil, nil, 21, nil, - 47, nil, 21, 23, nil, nil, nil, nil, 23, 23, - nil, nil, nil, nil, nil, 47, 47, nil, nil, nil, - nil, nil, nil, 21, nil, 22, nil, nil, nil, nil, - nil, 22, 23, nil, nil, 22, 22, 25, nil, nil, - 21, nil, 25, 25, 21, nil, nil, nil, nil, nil, - nil, nil, nil, 47, nil, nil, nil, 23, 47, nil, - nil, nil, nil, nil, 47, nil, 25, nil, nil, nil, - nil, nil, 22, nil, 23, 21, nil, nil, 23, nil, - nil, 21, nil, nil, nil, 21, 21, nil, nil, nil, - nil, 25, nil, nil, nil, nil, 22, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 25, 23, - nil, nil, 25, nil, nil, nil, nil, nil, nil, 23, - 23, nil, 21, nil, 47, 47, 47, 47, 47, 47, - 47, 47, nil, 47, 47, 47, nil, nil, 47, 47, - 47, nil, nil, 25, nil, nil, 21, nil, nil, nil, - nil, nil, nil, 25, 25, nil, 23, nil, nil, nil, + nil, nil, 25, nil, 23, 24, nil, 21, nil, 23, + 23, nil, 21, 21, nil, 47, nil, nil, nil, 25, + nil, nil, 24, 25, nil, nil, 24, nil, nil, nil, + 47, 47, nil, 23, nil, nil, 21, nil, nil, nil, + 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 25, nil, nil, 24, 23, nil, + nil, 21, nil, nil, 25, 25, nil, 24, 24, 47, + nil, nil, nil, nil, 47, 23, nil, nil, 21, 23, + 47, nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 25, nil, nil, 24, nil, nil, nil, nil, nil, + 23, nil, nil, 21, nil, nil, nil, nil, nil, 21, + 23, 23, nil, 21, 21, 25, nil, nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 23, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 47, 47, 47, 47, 47, 47, 47, 47, nil, 47, + 47, 47, nil, nil, 47, 47, 47, 23, nil, nil, + 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 25 ] + nil, 23, nil, nil, 21 ] racc_goto_pointer = [ - nil, 26, 4, 19, -28, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -7, -115, - 1, 249, 199, 283, 36, 317, 5, 34, 8, 28, - -64, -27, -107, 0, -26, nil, 22, -75, -202, nil, - nil, nil, -209, -31, nil, 8, -26, 392, -19, 57, - nil, -162, -24, -237, -207, -121, -120, -145, nil, -123, - -86, -127, -154, 25, -38, 24, 49, 22, 0, -110, - -109, -168, -34 ] + nil, 17, 4, 20, -28, 41, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 5, -124, + 0, 256, 34, 253, 200, 197, 16, 36, 9, 27, + -67, -30, -88, 1, -39, nil, 19, -69, -204, nil, + nil, nil, -221, -19, nil, 8, -22, 377, -34, 58, + nil, -167, -33, -237, -218, -118, -122, -150, nil, -126, + -90, -128, -156, 24, -49, 16, 46, 22, -3, -56, + -110, -109, -169, -34 ] racc_goto_default = [ - nil, nil, nil, 171, 3, 7, 11, 13, 14, 17, - 19, 22, 24, 29, 31, 2, 6, 10, nil, 57, - 77, 78, 79, 81, 84, 86, 72, 74, 9, nil, - nil, nil, nil, 64, nil, 28, nil, nil, 165, 242, - 166, 167, nil, nil, 116, 80, 83, nil, 106, 73, - 126, 127, nil, 207, nil, 63, nil, nil, 238, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil ] + nil, nil, nil, 172, 3, 7, 11, 13, 14, 17, + 19, 22, 24, 29, 31, 2, 6, 10, nil, 58, + 78, 79, 80, 82, 85, 87, 73, 75, 9, nil, + nil, nil, nil, 65, nil, 28, nil, nil, 166, 243, + 167, 168, nil, nil, 117, 81, 84, nil, 107, 74, + 127, 128, nil, 208, nil, 64, nil, nil, 239, 47, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 44, + nil, nil, nil, nil ] racc_token_table = { false => 0, @@ -1006,6 +995,7 @@ Racc_token_to_s_table = [ 'classparent', 'hostnames', 'nodeparent', +'nodename', 'hostname', 'nothing', 'arguments', @@ -2070,74 +2060,81 @@ module_eval <<'.,.,', 'grammar.ra', 692 def _reduce_167( val, _values, result ) result = val[0] result = [result] unless result.is_a?(Array) - result << val[2][:value] + result << val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 693 +module_eval <<'.,.,', 'grammar.ra', 696 def _reduce_168( val, _values, result ) - result = val[0][:value] + result = ast AST::HostName, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 694 +module_eval <<'.,.,', 'grammar.ra', 697 def _reduce_169( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 695 +module_eval <<'.,.,', 'grammar.ra', 698 def _reduce_170( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 696 +module_eval <<'.,.,', 'grammar.ra', 699 def _reduce_171( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 701 +module_eval <<'.,.,', 'grammar.ra', 700 def _reduce_172( val, _values, result ) - result = nil + result = val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 705 def _reduce_173( val, _values, result ) + result = nil + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 709 + def _reduce_174( val, _values, result ) result = ast AST::ASTArray, :children => [] result end .,., - # reduce 174 omitted + # reduce 175 omitted -module_eval <<'.,.,', 'grammar.ra', 710 - def _reduce_175( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 714 + def _reduce_176( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 714 - def _reduce_176( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 718 + def _reduce_177( val, _values, result ) result = val[1] result = [result] unless result[0].is_a?(Array) result end .,., - # reduce 177 omitted + # reduce 178 omitted -module_eval <<'.,.,', 'grammar.ra', 721 - def _reduce_178( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 725 + def _reduce_179( val, _values, result ) result = val[0] result = [result] unless result[0].is_a?(Array) result << val[2] @@ -2145,67 +2142,67 @@ module_eval <<'.,.,', 'grammar.ra', 721 end .,., -module_eval <<'.,.,', 'grammar.ra', 726 - def _reduce_179( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 730 + def _reduce_180( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 730 - def _reduce_180( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 734 + def _reduce_181( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 732 - def _reduce_181( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 736 + def _reduce_182( val, _values, result ) result = [val[0][:value], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 734 - def _reduce_182( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 738 + def _reduce_183( val, _values, result ) result = [val[0][:value]] result end .,., - # reduce 183 omitted + # reduce 184 omitted -module_eval <<'.,.,', 'grammar.ra', 739 - def _reduce_184( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 743 + def _reduce_185( val, _values, result ) result = val[1] result end .,., - # reduce 185 omitted + # reduce 186 omitted -module_eval <<'.,.,', 'grammar.ra', 744 - def _reduce_186( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 748 + def _reduce_187( val, _values, result ) result = val[1] result end .,., - # reduce 187 omitted - # reduce 188 omitted -module_eval <<'.,.,', 'grammar.ra', 750 - def _reduce_189( val, _values, result ) + # reduce 189 omitted + +module_eval <<'.,.,', 'grammar.ra', 754 + def _reduce_190( val, _values, result ) result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 758 - def _reduce_190( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 762 + def _reduce_191( val, _values, result ) if val[1].instance_of?(AST::ASTArray) result = val[1] else @@ -2215,8 +2212,8 @@ module_eval <<'.,.,', 'grammar.ra', 758 end .,., -module_eval <<'.,.,', 'grammar.ra', 765 - def _reduce_191( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 769 + def _reduce_192( val, _values, result ) if val[1].instance_of?(AST::ASTArray) result = val[1] else @@ -2226,28 +2223,28 @@ module_eval <<'.,.,', 'grammar.ra', 765 end .,., -module_eval <<'.,.,', 'grammar.ra', 767 - def _reduce_192( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 771 + def _reduce_193( val, _values, result ) result = ast AST::ASTArray result end .,., - # reduce 193 omitted - # reduce 194 omitted # reduce 195 omitted -module_eval <<'.,.,', 'grammar.ra', 772 - def _reduce_196( val, _values, result ) + # reduce 196 omitted + +module_eval <<'.,.,', 'grammar.ra', 776 + def _reduce_197( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 777 - def _reduce_197( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 781 + def _reduce_198( val, _values, result ) result = ast AST::Regex, :value => val[0][:value] result end diff --git a/lib/puppet/parser/parser_support.rb b/lib/puppet/parser/parser_support.rb index e1af2fe82..b13fbb47f 100644 --- a/lib/puppet/parser/parser_support.rb +++ b/lib/puppet/parser/parser_support.rb @@ -354,7 +354,7 @@ class Puppet::Parser::Parser names = [names] unless names.instance_of?(Array) doc = lexer.getcomment names.collect do |name| - name = name.to_s.downcase + name = AST::HostName.new :value => name unless name.is_a?(AST::HostName) if other = @loaded_code.node(name) error("Node %s is already defined at %s:%s; cannot redefine" % [other.name, other.file, other.line]) end @@ -372,7 +372,7 @@ class Puppet::Parser::Parser args[:parentclass] = options[:parent] end node = ast(AST::Node, args) - node.classname = name + node.classname = name.to_classname @loaded_code.add_node(name, node) node end diff --git a/spec/unit/parser/ast/leaf.rb b/spec/unit/parser/ast/leaf.rb index 8315b8066..38b753b28 100755 --- a/spec/unit/parser/ast/leaf.rb +++ b/spec/unit/parser/ast/leaf.rb @@ -136,7 +136,9 @@ end describe Puppet::Parser::AST::HostName do before :each do @scope = stub 'scope' - @value = stub 'value', :is_a? => true, :=~ => true + @value = stub 'value', :=~ => false + @value.stubs(:to_s).returns(@value) + @value.stubs(:downcase).returns(@value) @host = Puppet::Parser::AST::HostName.new( :value => @value) end @@ -144,7 +146,48 @@ describe Puppet::Parser::AST::HostName do lambda { Puppet::Parser::AST::HostName.new( :value => "not an hostname!" ) }.should raise_error end + it "should stringify the value" do + value = stub 'value', :=~ => false + + value.expects(:to_s).returns("test") + + Puppet::Parser::AST::HostName.new(:value => value) + end + + it "should downcase the value" do + value = stub 'value', :=~ => false + value.stubs(:to_s).returns("UPCASED") + host = Puppet::Parser::AST::HostName.new(:value => value) + + host.value == "upcased" + end + it "should evaluate to its value" do @host.evaluate(@scope).should == @value end + + it "should implement to_classname" do + @host.should respond_to(:to_classname) + end + + it "should return the downcased nodename as classname" do + host = Puppet::Parser::AST::HostName.new( :value => "KLASSNAME" ) + host.to_classname.should == "klassname" + end + + it "should delegate eql? to the underlying value if it is an HostName" do + @value.expects(:eql?).with("value") + @host.eql?("value") + end + + it "should delegate eql? to the underlying value if it is not an HostName" do + value = stub 'compared', :is_a? => true, :value => "value" + @value.expects(:eql?).with("value") + @host.eql?(value) + end + + it "should delegate hash to the underlying value" do + @value.expects(:hash) + @host.hash + end end diff --git a/spec/unit/parser/loaded_code.rb b/spec/unit/parser/loaded_code.rb index d2986bf2c..d33bda9a9 100644 --- a/spec/unit/parser/loaded_code.rb +++ b/spec/unit/parser/loaded_code.rb @@ -37,49 +37,49 @@ describe Puppet::Parser::LoadedCode do describe "when finding a qualified instance" do it "should return any found instance if the instance name is fully qualified" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar", "yay" - loader.find("namespace", "::foo::bar", :node).should == "yay" + loader.add_hostclass "foo::bar", "yay" + loader.find("namespace", "::foo::bar", :hostclass).should == "yay" end it "should return nil if the instance name is fully qualified and no such instance exists" do loader = Puppet::Parser::LoadedCode.new - loader.find("namespace", "::foo::bar", :node).should be_nil + loader.find("namespace", "::foo::bar", :hostclass).should be_nil end it "should return the partially qualified object if it exists in the provided namespace" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar::baz", "yay" - loader.find("foo", "bar::baz", :node).should == "yay" + loader.add_hostclass "foo::bar::baz", "yay" + loader.find("foo", "bar::baz", :hostclass).should == "yay" end it "should return the unqualified object if it exists in the provided namespace" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar", "yay" - loader.find("foo", "bar", :node).should == "yay" + loader.add_hostclass "foo::bar", "yay" + loader.find("foo", "bar", :hostclass).should == "yay" end it "should return the unqualified object if it exists in the parent namespace" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar", "yay" - loader.find("foo::bar::baz", "bar", :node).should == "yay" + loader.add_hostclass "foo::bar", "yay" + loader.find("foo::bar::baz", "bar", :hostclass).should == "yay" end it "should should return the partially qualified object if it exists in the parent namespace" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar::baz", "yay" - loader.find("foo::bar", "bar::baz", :node).should == "yay" + loader.add_hostclass "foo::bar::baz", "yay" + loader.find("foo::bar", "bar::baz", :hostclass).should == "yay" end it "should return the qualified object if it exists in the root namespace" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar::baz", "yay" - loader.find("foo::bar", "foo::bar::baz", :node).should == "yay" + loader.add_hostclass "foo::bar::baz", "yay" + loader.find("foo::bar", "foo::bar::baz", :hostclass).should == "yay" end it "should return nil if the object cannot be found" do loader = Puppet::Parser::LoadedCode.new - loader.add_node "foo::bar::baz", "yay" - loader.find("foo::bar", "eh", :node).should be_nil + loader.add_hostclass "foo::bar::baz", "yay" + loader.find("foo::bar", "eh", :hostclass).should be_nil end end @@ -110,4 +110,47 @@ describe Puppet::Parser::LoadedCode do it "should indicate whether no nodes are defined" do Puppet::Parser::LoadedCode.new.should_not be_nodes end + + describe "when adding nodes" do + it "should create an HostName if nodename is a string" do + Puppet::Parser::AST::HostName.expects(:new).with(:value => "foo") + loader = Puppet::Parser::LoadedCode.new + loader.add_node("foo", "bar") + end + + it "should not create an HostName if nodename is an HostName" do + name = Puppet::Parser::AST::HostName.new(:value => "foo") + + Puppet::Parser::AST::HostName.expects(:new).with(:value => "foo").never + + loader = Puppet::Parser::LoadedCode.new + loader.add_node(name, "bar") + end + end + + describe "when finding nodes" do + it "should create an HostName if nodename is a string" do + Puppet::Parser::AST::HostName.expects(:new).with(:value => "foo") + loader = Puppet::Parser::LoadedCode.new + loader.node("foo") + end + + it "should not create an HostName if nodename is an HostName" do + name = Puppet::Parser::AST::HostName.new(:value => "foo") + + Puppet::Parser::AST::HostName.expects(:new).with(:value => "foo").never + + loader = Puppet::Parser::LoadedCode.new + loader.node(name) + end + + it "should be able to find nobe by HostName" do + namein = Puppet::Parser::AST::HostName.new(:value => "foo") + nameout = Puppet::Parser::AST::HostName.new(:value => "foo") + loader = Puppet::Parser::LoadedCode.new + + loader.add_node(namein, "bar") + loader.node(nameout) == "bar" + end + end end diff --git a/spec/unit/parser/parser.rb b/spec/unit/parser/parser.rb index 44e4bedea..46a582923 100755 --- a/spec/unit/parser/parser.rb +++ b/spec/unit/parser/parser.rb @@ -7,7 +7,8 @@ describe Puppet::Parser do ast = Puppet::Parser::AST before :each do - @parser = Puppet::Parser::Parser.new :environment => "development" + @loaded_code = Puppet::Parser::LoadedCode.new + @parser = Puppet::Parser::Parser.new :environment => "development", :loaded_code => @loaded_code @true_ast = Puppet::Parser::AST::Boolean.new :value => true end @@ -225,4 +226,91 @@ describe Puppet::Parser do @parser.ast(Puppet::Parser::AST::Definition) end end + + describe "when creating a node" do + before :each do + @lexer = stub 'lexer' + @lexer.stubs(:getcomment) + @parser.stubs(:lexer).returns(@lexer) + @node = stub_everything 'node' + @parser.stubs(:ast).returns(@node) + @parser.stubs(:node).returns(nil) + + @nodename = stub 'nodename', :is_a? => false, :to_classname => "node" + @nodename.stubs(:is_a?).with(Puppet::Parser::AST::HostName).returns(true) + end + + it "should get the lexer stacked comments" do + @lexer.expects(:getcomment) + + @parser.newnode(@nodename) + end + + it "should create an HostName if needed" do + Puppet::Parser::AST::HostName.expects(:new).with(:value => "node").returns(@nodename) + + @parser.newnode("node") + end + + it "should raise an error if the node already exists" do + @loaded_code.stubs(:node).with(@nodename).returns(@node) + + lambda { @parser.newnode(@nodename) }.should raise_error + end + + it "should store the created node in the loaded code" do + @loaded_code.expects(:add_node).with(@nodename, @node) + + @parser.newnode(@nodename) + end + + it "should create the node with code if provided" do + @parser.stubs(:ast).with { |*args| args[1][:code] == :code }.returns(@node) + + @parser.newnode(@nodename, :code => :code) + end + + it "should create the node with a parentclass if provided" do + @parser.stubs(:ast).with { |*args| args[1][:parent] == :parent }.returns(@node) + + @parser.newnode(@nodename, :parent => :parent) + end + + it "should set the node classname from the HostName" do + @nodename.stubs(:to_classname).returns(:classname) + + @node.expects(:classname=).with(:classname) + + @parser.newnode(@nodename) + end + + it "should return an array of nodes" do + @parser.newnode(@nodename).should == [@node] + end + end + + describe "when retrieving a specific node" do + it "should delegate to the loaded_code node" do + @loaded_code.expects(:node).with("node") + + @parser.node("node") + end + end + + describe "when retrieving a specific class" do + it "should delegate to the loaded code" do + @loaded_code.expects(:hostclass).with("class") + + @parser.hostclass("class") + end + end + + describe "when retrieving a specific definitions" do + it "should delegate to the loaded code" do + @loaded_code.expects(:definition).with("define") + + @parser.definition("define") + end + end + end diff --git a/test/lib/puppettest/support/collection.rb b/test/lib/puppettest/support/collection.rb index 43df03048..9da15ea81 100644 --- a/test/lib/puppettest/support/collection.rb +++ b/test/lib/puppettest/support/collection.rb @@ -18,7 +18,7 @@ module PuppetTest::Support::Collection query = nil assert_nothing_raised("Could not parse '#{str}'") do - query = parser.parse(code).classes[""].code[0].query + query = parser.parse(code).hostclass("").code[0].query end yield str, res, query |