diff options
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r-- | lib/puppet/parser/ast/vardef.rb | 4 | ||||
-rw-r--r-- | lib/puppet/parser/collector.rb | 3 | ||||
-rw-r--r-- | lib/puppet/parser/functions.rb | 224 | ||||
-rw-r--r-- | lib/puppet/parser/functions/defined.rb | 27 | ||||
-rw-r--r-- | lib/puppet/parser/functions/fail.rb | 4 | ||||
-rw-r--r-- | lib/puppet/parser/functions/file.rb | 21 | ||||
-rw-r--r-- | lib/puppet/parser/functions/fqdn_rand.rb | 15 | ||||
-rw-r--r-- | lib/puppet/parser/functions/generate.rb | 35 | ||||
-rw-r--r-- | lib/puppet/parser/functions/include.rb | 26 | ||||
-rw-r--r-- | lib/puppet/parser/functions/realize.rb | 14 | ||||
-rw-r--r-- | lib/puppet/parser/functions/search.rb | 7 | ||||
-rw-r--r-- | lib/puppet/parser/functions/sha1.rb | 6 | ||||
-rw-r--r-- | lib/puppet/parser/functions/tag.rb | 6 | ||||
-rw-r--r-- | lib/puppet/parser/functions/tagged.rb | 18 | ||||
-rw-r--r-- | lib/puppet/parser/functions/template.rb | 22 | ||||
-rw-r--r-- | lib/puppet/parser/grammar.ra | 8 | ||||
-rw-r--r-- | lib/puppet/parser/lexer.rb | 1 | ||||
-rw-r--r-- | lib/puppet/parser/parser.rb | 1437 | ||||
-rw-r--r-- | lib/puppet/parser/parser_support.rb | 31 | ||||
-rw-r--r-- | lib/puppet/parser/resource.rb | 2 | ||||
-rw-r--r-- | lib/puppet/parser/scope.rb | 26 |
21 files changed, 989 insertions, 948 deletions
diff --git a/lib/puppet/parser/ast/vardef.rb b/lib/puppet/parser/ast/vardef.rb index ee79159d7..a3094ac6e 100644 --- a/lib/puppet/parser/ast/vardef.rb +++ b/lib/puppet/parser/ast/vardef.rb @@ -3,7 +3,7 @@ require 'puppet/parser/ast/branch' class Puppet::Parser::AST # Define a variable. Stores the value in the current scope. class VarDef < AST::Branch - attr_accessor :name, :value + attr_accessor :name, :value, :append @settor = true @@ -14,7 +14,7 @@ class Puppet::Parser::AST value = @value.safeevaluate(scope) parsewrap do - scope.setvar(name,value, @file, @line) + scope.setvar(name,value, @file, @line, @append) end end diff --git a/lib/puppet/parser/collector.rb b/lib/puppet/parser/collector.rb index bcba9528e..0f9072510 100644 --- a/lib/puppet/parser/collector.rb +++ b/lib/puppet/parser/collector.rb @@ -72,7 +72,8 @@ class Puppet::Parser::Collector def collect_exported # First get everything from the export table. Just reuse our # collect_virtual method but tell it to use 'exported? for the test. - resources = collect_virtual(true).reject { |r| ! r.virtual? } + resources = collect_virtual(true).reject { |r| ! r.virtual? }.each { |r| r.exported = false } + #resources = collect_virtual(true).reject { |r| ! r.virtual? } count = resources.length diff --git a/lib/puppet/parser/functions.rb b/lib/puppet/parser/functions.rb index 51903e919..5fb0439da 100644 --- a/lib/puppet/parser/functions.rb +++ b/lib/puppet/parser/functions.rb @@ -6,6 +6,8 @@ module Functions # A module for managing parser functions. Each specified function # becomes an instance method on the Scope class. + @functions = {} + class << self include Puppet::Util end @@ -23,7 +25,6 @@ module Functions # Create a new function type. def self.newfunction(name, options = {}, &block) - @functions ||= {} name = symbolize(name) if @functions.include? name @@ -105,226 +106,15 @@ module Functions return false end end - - # Include the specified classes - newfunction(:include, :doc => "Evaluate one or more classes.") do |vals| - vals = [vals] unless vals.is_a?(Array) - - # The 'false' disables lazy evaluation. - klasses = compiler.evaluate_classes(vals, self, false) - - missing = vals.find_all do |klass| - ! klasses.include?(klass) - end - - unless missing.empty? - # Throw an error if we didn't evaluate all of the classes. - str = "Could not find class" - if missing.length > 1 - str += "es" - end - - str += " " + missing.join(", ") - - if n = namespaces and ! n.empty? and n != [""] - str += " in namespaces %s" % @namespaces.join(", ") - end - self.fail Puppet::ParseError, str - end - end - - # Tag the current scope with each passed name - newfunction(:tag, :doc => "Add the specified tags to the containing class - or definition. All contained objects will then acquire that tag, also. - ") do |vals| - self.resource.tag(*vals) - end - - # Test whether a given tag is set. This functions as a big OR -- if any of the - # specified tags are unset, we return false. - newfunction(:tagged, :type => :rvalue, :doc => "A boolean function that - tells you whether the current container is tagged with the specified tags. - The tags are ANDed, so that all of the specified tags must be included for - the function to return true.") do |vals| - configtags = compiler.catalog.tags - resourcetags = resource.tags - - retval = true - vals.each do |val| - unless configtags.include?(val) or resourcetags.include?(val) - retval = false - break - end - end - - return retval - end - - # Test whether a given class or definition is defined - newfunction(:defined, :type => :rvalue, :doc => "Determine whether a given - type is defined, either as a native type or a defined type, or whether a class is defined. - This is useful for checking whether a class is defined and only including it if it is. - This function can also test whether a resource has been defined, using resource references - (e.g., ``if defined(File['/tmp/myfile']) { ... }``). This function is unfortunately - dependent on the parse order of the configuration when testing whether a resource is defined.") do |vals| - result = false - vals.each do |val| - case val - when String: - # For some reason, it doesn't want me to return from here. - if Puppet::Type.type(val) or finddefine(val) or findclass(val) - result = true - break - end - when Puppet::Parser::Resource::Reference: - if findresource(val.to_s) - result = true - break - end - else - raise ArgumentError, "Invalid argument of type %s to 'defined'" % val.class - end - end - result - end - - newfunction(:fqdn_rand, :type => :rvalue, :doc => "Generates random - numbers based on the node's fqdn. The first argument sets the range. - The second argument specifies a number to add to the seed and is - optional.") do |args| - require 'md5' - max = args[0] - if args[1] then - seed = args[1] - else - seed = 1 - end - fqdn_seed = MD5.new(lookupvar('fqdn')).to_s.hex - srand(seed+fqdn_seed) - rand(max).to_s - end - - newfunction(:fail, :doc => "Fail with a parse error.") do |vals| - vals = vals.collect { |s| s.to_s }.join(" ") if vals.is_a? Array - raise Puppet::ParseError, vals.to_s - end - + # Runs a newfunction to create a function for each of the log levels - Puppet::Util::Log.levels.each do |level| - newfunction(level, :doc => "Log a message on the server at level - #{level.to_s}.") do |vals| - send(level, vals.join(" ")) - end - end - - newfunction(:template, :type => :rvalue, :doc => "Evaluate a template and - return its value. See `the templating docs </trac/puppet/wiki/PuppetTemplating>`_ - for more information. Note that if multiple templates are specified, their - output is all concatenated and returned as the output of the function. - ") do |vals| - require 'erb' - - vals.collect do |file| - # Use a wrapper, so the template can't get access to the full - # Scope object. - debug "Retrieving template %s" % file - wrapper = Puppet::Parser::TemplateWrapper.new(self, file) - - begin - wrapper.result() - rescue => detail - raise Puppet::ParseError, - "Failed to parse template %s: %s" % - [file, detail] - end - end.join("") - end - - # This is just syntactic sugar for a collection, although it will generally - # be a good bit faster. - newfunction(:realize, :doc => "Make a virtual object real. This is useful - when you want to know the name of the virtual object and don't want to - bother with a full collection. It is slightly faster than a collection, - and, of course, is a bit shorter. You must pass the object using a - reference; e.g.: ``realize User[luke]``." ) do |vals| - coll = Puppet::Parser::Collector.new(self, :nomatter, nil, nil, :virtual) - vals = [vals] unless vals.is_a?(Array) - coll.resources = vals - compiler.add_collection(coll) - end - - newfunction(:search, :doc => "Add another namespace for this class to search. - This allows you to create classes with sets of definitions and add - those classes to another class's search path.") do |vals| - vals.each do |val| - add_namespace(val) + Puppet::Util::Log.levels.each do |level| + newfunction(level, :doc => "Log a message on the server at level + #{level.to_s}.") do |vals| + send(level, vals.join(" ")) end end - newfunction(:file, :type => :rvalue, - :doc => "Return the contents of a file. Multiple files - can be passed, and the first file that exists will be read in.") do |vals| - ret = nil - vals.each do |file| - unless file =~ /^#{File::SEPARATOR}/ - raise Puppet::ParseError, "Files must be fully qualified" - end - if FileTest.exists?(file) - ret = File.read(file) - break - end - end - if ret - ret - else - raise Puppet::ParseError, "Could not find any files from %s" % - vals.join(", ") - end - end - - newfunction(:generate, :type => :rvalue, - :doc => "Calls an external command and returns the results of the - command. Any arguments are passed to the external command as - arguments. If the generator does not exit with return code of 0, - the generator is considered to have failed and a parse error is - thrown. Generators can only have file separators, alphanumerics, dashes, - and periods in them. This function will attempt to protect you from - malicious generator calls (e.g., those with '..' in them), but it can - never be entirely safe. No subshell is used to execute - generators, so all shell metacharacters are passed directly to - the generator.") do |args| - - unless args[0] =~ /^#{File::SEPARATOR}/ - raise Puppet::ParseError, "Generators must be fully qualified" - end - - unless args[0] =~ /^[-#{File::SEPARATOR}\w.]+$/ - raise Puppet::ParseError, - "Generators can only contain alphanumerics, file separators, and dashes" - end - - if args[0] =~ /\.\./ - raise Puppet::ParseError, - "Can not use generators with '..' in them." - end - - begin - output = Puppet::Util.execute(args) - rescue Puppet::ExecutionFailure => detail - raise Puppet::ParseError, "Failed to execute generator %s: %s" % - [args[0], detail] - end - output - end - - newfunction(:sha1, :type => :rvalue, - :doc => "Returns a SHA1 hash value from a provided string.") do |args| - require 'sha1' - - Digest::SHA1.hexdigest(args[0]) - end - end end - diff --git a/lib/puppet/parser/functions/defined.rb b/lib/puppet/parser/functions/defined.rb new file mode 100644 index 000000000..4e369ae48 --- /dev/null +++ b/lib/puppet/parser/functions/defined.rb @@ -0,0 +1,27 @@ +# Test whether a given class or definition is defined +Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => "Determine whether a given + type is defined, either as a native type or a defined type, or whether a class is defined. + This is useful for checking whether a class is defined and only including it if it is. + This function can also test whether a resource has been defined, using resource references + (e.g., ``if defined(File['/tmp/myfile']) { ... }``). This function is unfortunately + dependent on the parse order of the configuration when testing whether a resource is defined.") do |vals| + result = false + vals.each do |val| + case val + when String: + # For some reason, it doesn't want me to return from here. + if Puppet::Type.type(val) or finddefine(val) or findclass(val) + result = true + break + end + when Puppet::Parser::Resource::Reference: + if findresource(val.to_s) + result = true + break + end + else + raise ArgumentError, "Invalid argument of type %s to 'defined'" % val.class + end + end + result +end diff --git a/lib/puppet/parser/functions/fail.rb b/lib/puppet/parser/functions/fail.rb new file mode 100644 index 000000000..35b20ee92 --- /dev/null +++ b/lib/puppet/parser/functions/fail.rb @@ -0,0 +1,4 @@ +Puppet::Parser::Functions::newfunction(:fail, :doc => "Fail with a parse error.") do |vals| + vals = vals.collect { |s| s.to_s }.join(" ") if vals.is_a? Array + raise Puppet::ParseError, vals.to_s +end diff --git a/lib/puppet/parser/functions/file.rb b/lib/puppet/parser/functions/file.rb new file mode 100644 index 000000000..47b3f96e0 --- /dev/null +++ b/lib/puppet/parser/functions/file.rb @@ -0,0 +1,21 @@ +# Returns the contents of a file +Puppet::Parser::Functions::newfunction(:file, :type => :rvalue, + :doc => "Return the contents of a file. Multiple files + can be passed, and the first file that exists will be read in.") do |vals| + ret = nil + vals.each do |file| + unless file =~ /^#{File::SEPARATOR}/ + raise Puppet::ParseError, "Files must be fully qualified" + end + if FileTest.exists?(file) + ret = File.read(file) + break + end + end + if ret + ret + else + raise Puppet::ParseError, "Could not find any files from %s" % + vals.join(", ") + end +end diff --git a/lib/puppet/parser/functions/fqdn_rand.rb b/lib/puppet/parser/functions/fqdn_rand.rb new file mode 100644 index 000000000..2ae46de82 --- /dev/null +++ b/lib/puppet/parser/functions/fqdn_rand.rb @@ -0,0 +1,15 @@ +Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc => + "Generates random numbers based on the node's fqdn. The first argument + sets the range. The second argument specifies a number to add to the + seed and is optional.") do |args| + require 'md5' + max = args[0] + if args[1] then + seed = args[1] + else + seed = 1 + end + fqdn_seed = MD5.new(lookupvar('fqdn')).to_s.hex + srand(seed+fqdn_seed) + rand(max).to_s +end diff --git a/lib/puppet/parser/functions/generate.rb b/lib/puppet/parser/functions/generate.rb new file mode 100644 index 000000000..1be9016ed --- /dev/null +++ b/lib/puppet/parser/functions/generate.rb @@ -0,0 +1,35 @@ +# Runs an external command and returns the results +Puppet::Parser::Functions::newfunction(:generate, :type => :rvalue, + :doc => "Calls an external command and returns the results of the + command. Any arguments are passed to the external command as + arguments. If the generator does not exit with return code of 0, + the generator is considered to have failed and a parse error is + thrown. Generators can only have file separators, alphanumerics, dashes, + and periods in them. This function will attempt to protect you from + malicious generator calls (e.g., those with '..' in them), but it can + never be entirely safe. No subshell is used to execute + generators, so all shell metacharacters are passed directly to + the generator.") do |args| + + unless args[0] =~ /^#{File::SEPARATOR}/ + raise Puppet::ParseError, "Generators must be fully qualified" + end + + unless args[0] =~ /^[-#{File::SEPARATOR}\w.]+$/ + raise Puppet::ParseError, + "Generators can only contain alphanumerics, file separators, and dashes" + end + + if args[0] =~ /\.\./ + raise Puppet::ParseError, + "Can not use generators with '..' in them." + end + + begin + output = Puppet::Util.execute(args) + rescue Puppet::ExecutionFailure => detail + raise Puppet::ParseError, "Failed to execute generator %s: %s" % + [args[0], detail] + end + output +end diff --git a/lib/puppet/parser/functions/include.rb b/lib/puppet/parser/functions/include.rb new file mode 100644 index 000000000..213a04136 --- /dev/null +++ b/lib/puppet/parser/functions/include.rb @@ -0,0 +1,26 @@ +# Include the specified classes +Puppet::Parser::Functions::newfunction(:include, :doc => "Evaluate one or more classes.") do |vals| + vals = [vals] unless vals.is_a?(Array) + + # The 'false' disables lazy evaluation. + klasses = compiler.evaluate_classes(vals, self, false) + + missing = vals.find_all do |klass| + ! klasses.include?(klass) + end + + unless missing.empty? + # Throw an error if we didn't evaluate all of the classes. + str = "Could not find class" + if missing.length > 1 + str += "es" + end + + str += " " + missing.join(", ") + + if n = namespaces and ! n.empty? and n != [""] + str += " in namespaces %s" % @namespaces.join(", ") + end + self.fail Puppet::ParseError, str + end +end diff --git a/lib/puppet/parser/functions/realize.rb b/lib/puppet/parser/functions/realize.rb new file mode 100644 index 000000000..1bdde234e --- /dev/null +++ b/lib/puppet/parser/functions/realize.rb @@ -0,0 +1,14 @@ +# This is just syntactic sugar for a collection, although it will generally +# be a good bit faster. + +Puppet::Parser::Functions::newfunction(:realize, :doc => "Make a virtual object real. This is useful + when you want to know the name of the virtual object and don't want to + bother with a full collection. It is slightly faster than a collection, + and, of course, is a bit shorter. You must pass the object using a + reference; e.g.: ``realize User[luke]``." ) do |vals| + coll = Puppet::Parser::Collector.new(self, :nomatter, nil, nil, :virtual) + vals = [vals] unless vals.is_a?(Array) + coll.resources = vals + + compiler.add_collection(coll) +end diff --git a/lib/puppet/parser/functions/search.rb b/lib/puppet/parser/functions/search.rb new file mode 100644 index 000000000..87dd02d67 --- /dev/null +++ b/lib/puppet/parser/functions/search.rb @@ -0,0 +1,7 @@ +Puppet::Parser::Functions::newfunction(:search, :doc => "Add another namespace for this class to search. + This allows you to create classes with sets of definitions and add + those classes to another class's search path.") do |vals| + vals.each do |val| + add_namespace(val) + end +end diff --git a/lib/puppet/parser/functions/sha1.rb b/lib/puppet/parser/functions/sha1.rb new file mode 100644 index 000000000..09386a604 --- /dev/null +++ b/lib/puppet/parser/functions/sha1.rb @@ -0,0 +1,6 @@ +Puppet::Parser::Functions::newfunction(:sha1, :type => :rvalue, + :doc => "Returns a SHA1 hash value from a provided string.") do |args| + require 'sha1' + + Digest::SHA1.hexdigest(args[0]) +end diff --git a/lib/puppet/parser/functions/tag.rb b/lib/puppet/parser/functions/tag.rb new file mode 100644 index 000000000..3e487feaf --- /dev/null +++ b/lib/puppet/parser/functions/tag.rb @@ -0,0 +1,6 @@ +# Tag the current scope with each passed name +Puppet::Parser::Functions::newfunction(:tag, :doc => "Add the specified tags to the containing class + or definition. All contained objects will then acquire that tag, also. + ") do |vals| + self.resource.tag(*vals) +end diff --git a/lib/puppet/parser/functions/tagged.rb b/lib/puppet/parser/functions/tagged.rb new file mode 100644 index 000000000..fccb13205 --- /dev/null +++ b/lib/puppet/parser/functions/tagged.rb @@ -0,0 +1,18 @@ +# Test whether a given tag is set. This functions as a big OR -- if any of the specified tags are unset, we return false. +Puppet::Parser::Functions::newfunction(:tagged, :type => :rvalue, :doc => "A boolean function that + tells you whether the current container is tagged with the specified tags. + The tags are ANDed, so that all of the specified tags must be included for + the function to return true.") do |vals| + configtags = compiler.catalog.tags + resourcetags = resource.tags + + retval = true + vals.each do |val| + unless configtags.include?(val) or resourcetags.include?(val) + retval = false + break + end + end + + return retval +end diff --git a/lib/puppet/parser/functions/template.rb b/lib/puppet/parser/functions/template.rb new file mode 100644 index 000000000..e62c3b326 --- /dev/null +++ b/lib/puppet/parser/functions/template.rb @@ -0,0 +1,22 @@ +Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :doc => + "Evaluate a template and return its value. See `the templating docs + </trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that + if multiple templates are specified, their output is all concatenated + and returned as the output of the function.") do |vals| + require 'erb' + + vals.collect do |file| + # Use a wrapper, so the template can't get access to the full + # Scope object. + debug "Retrieving template %s" % file + wrapper = Puppet::Parser::TemplateWrapper.new(self, file) + + begin + wrapper.result() + rescue => detail + raise Puppet::ParseError, + "Failed to parse template %s: %s" % + [file, detail] + end + end.join("") +end diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra index a2f6729ee..07666acb4 100644 --- a/lib/puppet/parser/grammar.ra +++ b/lib/puppet/parser/grammar.ra @@ -5,7 +5,7 @@ class Puppet::Parser::Parser token LBRACK DQTEXT SQTEXT RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE -token FALSE EQUALS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT +token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSNAME CLASSREF @@ -58,6 +58,7 @@ statement: resource | hostclass | nodedef | resourceoverride + | append fstatement: NAME LPAREN funcvalues RPAREN { args = aryfy(val[2]) @@ -291,6 +292,11 @@ assignment: VARIABLE EQUALS rvalue { result = ast AST::VarDef, :name => variable, :value => val[2] } +append: VARIABLE APPENDS rvalue { + variable = ast AST::Name, :value => val[0] + result = ast AST::VarDef, :name => variable, :value => val[2], :append => true +} + params: # nothing { result = ast AST::ASTArray diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb index 2c5f66e5a..71210d919 100644 --- a/lib/puppet/parser/lexer.rb +++ b/lib/puppet/parser/lexer.rb @@ -105,6 +105,7 @@ class Puppet::Parser::Lexer '(' => :LPAREN, ')' => :RPAREN, '=' => :EQUALS, + '+=' => :APPENDS, '==' => :ISEQUAL, '>=' => :GREATEREQUAL, '>' => :GREATERTHAN, diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb index 3d7f21dca..69225cc2b 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..id9145566289', 'grammar.ra', 638 +module_eval <<'..end grammar.ra modeval..id7dbe8301d1', 'grammar.ra', 644 # It got too annoying having code in a file that needs to be compiled. require 'puppet/parser/parser_support' @@ -41,517 +41,525 @@ require 'puppet/parser/parser_support' # $Id$ -..end grammar.ra modeval..id9145566289 +..end grammar.ra modeval..id7dbe8301d1 ##### racc 1.4.5 generates ### racc_reduce_table = [ 0, 0, :racc_error, - 1, 52, :_reduce_1, - 1, 52, :_reduce_none, + 1, 53, :_reduce_1, 1, 53, :_reduce_none, - 2, 53, :_reduce_4, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 1, 55, :_reduce_none, - 4, 63, :_reduce_17, - 3, 63, :_reduce_18, - 2, 63, :_reduce_19, - 1, 68, :_reduce_none, - 1, 68, :_reduce_none, - 1, 69, :_reduce_none, - 3, 69, :_reduce_23, - 1, 71, :_reduce_none, - 1, 71, :_reduce_none, - 1, 71, :_reduce_none, - 1, 71, :_reduce_none, - 1, 71, :_reduce_none, - 1, 71, :_reduce_none, - 1, 71, :_reduce_none, - 1, 71, :_reduce_31, + 1, 54, :_reduce_none, + 2, 54, :_reduce_4, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 1, 56, :_reduce_none, + 4, 64, :_reduce_18, + 3, 64, :_reduce_19, + 2, 64, :_reduce_20, 1, 70, :_reduce_none, - 3, 70, :_reduce_33, - 5, 56, :_reduce_34, - 5, 56, :_reduce_35, - 5, 56, :_reduce_36, - 5, 67, :_reduce_37, - 2, 57, :_reduce_38, - 1, 87, :_reduce_39, - 2, 87, :_reduce_40, - 2, 58, :_reduce_41, - 3, 88, :_reduce_42, - 3, 88, :_reduce_43, - 1, 89, :_reduce_none, - 1, 89, :_reduce_none, - 3, 89, :_reduce_46, - 1, 90, :_reduce_none, - 3, 90, :_reduce_48, + 1, 70, :_reduce_none, + 1, 71, :_reduce_none, + 3, 71, :_reduce_24, + 1, 73, :_reduce_none, + 1, 73, :_reduce_none, + 1, 73, :_reduce_none, + 1, 73, :_reduce_none, + 1, 73, :_reduce_none, + 1, 73, :_reduce_none, + 1, 73, :_reduce_none, + 1, 73, :_reduce_32, + 1, 72, :_reduce_none, + 3, 72, :_reduce_34, + 5, 57, :_reduce_35, + 5, 57, :_reduce_36, + 5, 57, :_reduce_37, + 5, 68, :_reduce_38, + 2, 58, :_reduce_39, + 1, 89, :_reduce_40, + 2, 89, :_reduce_41, + 2, 59, :_reduce_42, + 3, 90, :_reduce_43, + 3, 90, :_reduce_44, 1, 91, :_reduce_none, 1, 91, :_reduce_none, - 3, 92, :_reduce_51, - 3, 92, :_reduce_52, + 3, 91, :_reduce_47, + 1, 92, :_reduce_none, + 3, 92, :_reduce_49, 1, 93, :_reduce_none, 1, 93, :_reduce_none, - 4, 95, :_reduce_55, - 1, 81, :_reduce_none, - 3, 81, :_reduce_57, - 0, 82, :_reduce_none, - 1, 82, :_reduce_none, - 1, 97, :_reduce_60, - 1, 72, :_reduce_61, + 3, 94, :_reduce_52, + 3, 94, :_reduce_53, + 1, 95, :_reduce_none, + 1, 95, :_reduce_none, + 4, 97, :_reduce_56, + 1, 83, :_reduce_none, + 3, 83, :_reduce_58, + 0, 84, :_reduce_none, + 1, 84, :_reduce_none, + 1, 99, :_reduce_61, 1, 74, :_reduce_62, + 1, 76, :_reduce_63, + 1, 98, :_reduce_none, + 1, 98, :_reduce_none, + 1, 98, :_reduce_none, + 1, 98, :_reduce_none, + 1, 98, :_reduce_none, + 1, 98, :_reduce_none, + 3, 60, :_reduce_70, + 3, 69, :_reduce_71, + 0, 85, :_reduce_72, + 1, 85, :_reduce_73, + 3, 85, :_reduce_74, + 3, 102, :_reduce_75, + 3, 103, :_reduce_76, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 0, 88, :_reduce_79, + 1, 88, :_reduce_80, + 3, 88, :_reduce_81, + 1, 105, :_reduce_none, + 3, 105, :_reduce_83, 1, 96, :_reduce_none, 1, 96, :_reduce_none, 1, 96, :_reduce_none, 1, 96, :_reduce_none, 1, 96, :_reduce_none, 1, 96, :_reduce_none, - 3, 59, :_reduce_69, - 0, 83, :_reduce_70, - 1, 83, :_reduce_71, - 3, 83, :_reduce_72, - 3, 100, :_reduce_73, - 3, 101, :_reduce_74, - 1, 102, :_reduce_none, - 1, 102, :_reduce_none, - 0, 86, :_reduce_77, - 1, 86, :_reduce_78, - 3, 86, :_reduce_79, - 1, 103, :_reduce_none, - 3, 103, :_reduce_81, - 1, 94, :_reduce_none, - 1, 94, :_reduce_none, - 1, 94, :_reduce_none, - 1, 94, :_reduce_none, - 1, 94, :_reduce_none, - 1, 94, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 1, 99, :_reduce_none, - 4, 76, :_reduce_98, - 3, 76, :_reduce_99, - 1, 78, :_reduce_100, - 1, 78, :_reduce_101, - 1, 75, :_reduce_102, - 4, 79, :_reduce_103, - 4, 79, :_reduce_104, - 6, 61, :_reduce_105, - 0, 106, :_reduce_none, - 4, 106, :_reduce_107, - 1, 105, :_reduce_none, - 5, 60, :_reduce_109, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 4, 78, :_reduce_100, + 3, 78, :_reduce_101, + 1, 80, :_reduce_102, + 1, 80, :_reduce_103, + 1, 77, :_reduce_104, + 4, 81, :_reduce_105, + 4, 81, :_reduce_106, + 6, 62, :_reduce_107, + 0, 108, :_reduce_none, + 4, 108, :_reduce_109, 1, 107, :_reduce_none, - 2, 107, :_reduce_111, - 5, 108, :_reduce_112, - 4, 108, :_reduce_113, + 5, 61, :_reduce_111, 1, 109, :_reduce_none, - 3, 109, :_reduce_115, - 3, 77, :_reduce_116, + 2, 109, :_reduce_113, + 5, 110, :_reduce_114, + 4, 110, :_reduce_115, 1, 111, :_reduce_none, - 4, 111, :_reduce_118, + 3, 111, :_reduce_117, + 3, 79, :_reduce_118, 1, 113, :_reduce_none, - 3, 113, :_reduce_120, - 3, 112, :_reduce_121, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_129, - 1, 114, :_reduce_130, - 3, 114, :_reduce_131, - 2, 62, :_reduce_132, - 6, 64, :_reduce_133, - 5, 64, :_reduce_134, + 4, 113, :_reduce_120, + 1, 115, :_reduce_none, + 3, 115, :_reduce_122, + 3, 114, :_reduce_123, + 1, 112, :_reduce_none, + 1, 112, :_reduce_none, + 1, 112, :_reduce_none, + 1, 112, :_reduce_none, + 1, 112, :_reduce_none, + 1, 112, :_reduce_none, + 1, 112, :_reduce_none, + 1, 112, :_reduce_131, + 1, 116, :_reduce_132, + 3, 116, :_reduce_133, + 2, 63, :_reduce_134, 6, 65, :_reduce_135, 5, 65, :_reduce_136, 6, 66, :_reduce_137, 5, 66, :_reduce_138, - 1, 85, :_reduce_none, - 1, 80, :_reduce_none, - 1, 80, :_reduce_none, - 1, 117, :_reduce_none, - 3, 117, :_reduce_143, - 1, 119, :_reduce_none, - 1, 119, :_reduce_none, - 1, 119, :_reduce_none, + 6, 67, :_reduce_139, + 5, 67, :_reduce_140, + 1, 87, :_reduce_none, + 1, 82, :_reduce_none, + 1, 82, :_reduce_none, 1, 119, :_reduce_none, - 0, 54, :_reduce_148, - 0, 120, :_reduce_149, - 1, 115, :_reduce_none, - 3, 115, :_reduce_151, - 3, 115, :_reduce_152, + 3, 119, :_reduce_145, 1, 121, :_reduce_none, - 3, 121, :_reduce_154, - 3, 122, :_reduce_155, - 1, 122, :_reduce_156, - 3, 122, :_reduce_157, - 1, 122, :_reduce_158, - 1, 118, :_reduce_none, - 2, 118, :_reduce_160, - 1, 116, :_reduce_none, - 2, 116, :_reduce_162, - 1, 123, :_reduce_none, + 1, 121, :_reduce_none, + 1, 121, :_reduce_none, + 1, 121, :_reduce_none, + 0, 55, :_reduce_150, + 0, 122, :_reduce_151, + 1, 117, :_reduce_none, + 3, 117, :_reduce_153, + 3, 117, :_reduce_154, 1, 123, :_reduce_none, - 1, 73, :_reduce_165, - 3, 98, :_reduce_166, - 2, 98, :_reduce_167, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 0, 84, :_reduce_none, - 1, 84, :_reduce_171 ] + 3, 123, :_reduce_156, + 3, 124, :_reduce_157, + 1, 124, :_reduce_158, + 3, 124, :_reduce_159, + 1, 124, :_reduce_160, + 1, 120, :_reduce_none, + 2, 120, :_reduce_162, + 1, 118, :_reduce_none, + 2, 118, :_reduce_164, + 1, 125, :_reduce_none, + 1, 125, :_reduce_none, + 1, 75, :_reduce_167, + 3, 100, :_reduce_168, + 2, 100, :_reduce_169, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 0, 86, :_reduce_none, + 1, 86, :_reduce_173 ] -racc_reduce_n = 172 +racc_reduce_n = 174 -racc_shift_n = 276 +racc_shift_n = 279 racc_action_table = [ - 71, 51, 53, 184, 162, 102, 71, 51, 53, 132, - 149, 5, 209, 47, -127, 87, 71, 51, 53, 88, - 208, 65, 71, 51, 53, 162, 144, 34, 35, 99, - 65, 89, 126, -127, 50, 54, 65, 126, 59, -123, - 50, 54, 207, 45, 59, 161, 65, 56, -126, 45, - 50, 54, 65, 56, 59, 90, 50, 54, 185, 45, - 59, 36, 169, 56, 37, 45, 71, 51, 53, 56, - 204, 206, 47, 51, 53, 200, 149, 51, 53, 33, - 199, -122, 71, 51, 53, 238, 1, 65, 71, 51, - 53, 67, 144, 34, 35, 87, 65, 237, 234, -123, - 50, 54, 65, 200, 59, 233, 50, 54, 199, 45, - 59, 252, 65, 56, 43, 45, 50, 54, 65, 56, - 59, 33, 50, 54, 156, 45, 59, 36, 1, 56, - 37, 45, 71, 51, 53, 56, 204, 206, 71, 51, - 53, 149, 149, 34, 35, 188, 259, 196, 71, 51, - 53, -125, 65, 65, 71, 51, 53, 144, 144, 51, - 53, 202, 65, 162, 33, 168, 50, 54, 65, 137, - 59, 1, 50, 54, 168, 45, 59, 36, 65, 56, - 37, 45, 50, 174, 65, 56, 59, -122, 50, 54, - 165, 111, 59, -125, -122, 56, 127, 45, 71, 51, - 53, 56, 33, 211, 71, 51, 53, 204, 206, 1, - 5, 135, 218, 186, 71, 51, 53, 188, 189, 106, - 125, 51, 53, 221, 222, 231, 140, 140, 65, 225, - 126, -124, 50, 54, 65, 228, 59, 47, 50, 54, - -139, 45, 59, 123, 65, 56, 106, 45, 50, 112, - 65, 56, 59, -124, 50, 174, 134, 111, 59, 51, - 53, 56, 164, 111, 239, 51, 53, 56, 240, 241, - 242, -124, 96, 140, -126, 51, 53, 93, 179, 168, - 91, 51, 53, 159, 181, 260, 262, 85, 65, 157, - 88, 133, 50, 174, 65, 41, 59, -124, 50, 54, - 128, 111, 59, -122, 65, 56, 43, 45, 50, 174, - 65, 56, 59, -125, 50, 54, -123, 111, 59, 51, - 53, 56, 43, 45, -127, 51, 53, 56, 176, 40, - 269, -171, 270, -128, -123, 51, 53, 152, -125, nil, - nil, 51, 53, nil, nil, nil, nil, nil, 65, nil, - nil, nil, 50, 174, 65, nil, 59, nil, 50, 174, - 43, 111, 59, nil, 65, 56, nil, 111, 50, 174, - 65, 56, 59, 254, 50, 174, nil, 111, 59, 51, - 53, 56, nil, 111, nil, 51, 53, 56, nil, nil, - nil, nil, nil, 15, nil, 19, 21, nil, 28, 2, - nil, 8, nil, 13, nil, 17, nil, 22, 65, nil, - 1, 5, 50, 174, 65, 264, 59, nil, 50, 174, - nil, 111, 59, nil, nil, 56, nil, 111, nil, nil, - nil, 56, nil, nil, 271, 15, nil, 19, 21, nil, - 28, 2, nil, 8, nil, 13, nil, 17, nil, 22, - nil, nil, 1, 5, 15, 212, 19, 21, nil, 28, - 2, nil, 8, nil, 13, nil, 17, nil, 22, nil, - nil, 1, 5, nil, 230, 15, nil, 19, 21, nil, - 28, 2, nil, 8, nil, 13, nil, 17, nil, 22, - nil, nil, 1, 5, 15, 253, 19, 21, nil, 28, - 2, nil, 8, nil, 13, nil, 17, nil, 22, nil, - nil, 1, 5, nil, 214, 15, nil, 19, 21, nil, - 28, 2, nil, 8, nil, 13, nil, 17, nil, 22, - nil, nil, 1, 5, 15, 274, 19, 21, nil, 28, - 2, nil, 8, nil, 13, nil, 17, nil, 22, nil, - nil, 1, 5, nil, 235, 15, nil, 19, 21, nil, - 28, 2, nil, 8, nil, 13, nil, 17, nil, 22, - nil, nil, 1, 5, 15, 275, 19, 21, nil, 28, - 2, nil, 8, nil, 13, nil, 17, nil, 22, nil, - nil, 1, 5, nil, nil, 15, nil, 19, 21, nil, - 28, 2, nil, 8, nil, 13, nil, 17, nil, 22, - nil, nil, 1, 5, 15, nil, 19, 21, nil, 28, - 2, nil, 8, nil, 13, nil, 17, nil, 22, nil, - nil, 1, 5, 15, nil, 19, 21, nil, 28, 2, - nil, 8, nil, 13, nil, 17, nil, 22, nil, nil, - 1, 5, 15, nil, 19, 21, nil, 28, 2, nil, - 8, nil, 13, nil, 17, nil, 22, nil, nil, 1, - 5, 15, nil, 19, 21, nil, 28, 2, nil, 8, - nil, 13, nil, 17, nil, 22, nil, nil, 1, 5 ] + 77, 57, 60, 246, 167, 105, 77, 57, 60, 101, + 199, 235, -124, 167, 241, 203, 77, 57, 60, 234, + 54, 92, 77, 57, 60, 94, 131, 240, 208, 209, + 104, 47, 77, 57, 60, 59, 63, 47, 95, 68, + 131, 59, 63, 137, 55, 68, 166, 47, 65, 211, + 55, 59, 178, 47, 65, 68, -125, 59, 63, 173, + 116, 68, 96, 47, 65, -126, 55, 59, 119, -128, + 65, 68, 77, 57, 60, 147, 116, 208, 209, 147, + 65, 213, 77, 57, 60, 147, 47, 40, 41, 212, + 47, 151, 54, 57, 60, 151, 47, 35, 77, 57, + 60, 151, 188, 47, 4, 9, 172, 59, 63, 199, + 9, 68, 50, 47, 203, -125, 55, 59, 63, 204, + 65, 68, 42, 47, 205, 43, 55, 59, 63, 47, + 65, 68, 35, 59, 63, 51, 55, 68, 167, 4, + 65, 147, 55, 77, 57, 60, 65, 33, 34, 77, + 57, 60, 47, 171, 40, 41, 35, 151, -127, 77, + 57, 60, -129, 4, 214, 77, 57, 60, 208, 209, + 40, 41, 57, 60, 47, 77, 57, 60, 59, 63, + 47, 171, 68, -124, 59, 63, -130, 55, 68, 42, + 47, 65, 43, 55, 59, 63, 47, 65, 68, -125, + 59, 63, 219, 55, 68, 42, 47, 65, 43, 55, + 59, 63, 111, 65, 68, 77, 57, 60, 92, 55, + 191, 262, -127, 65, -124, 77, 57, 60, 135, 57, + 60, 35, 57, 60, 159, 189, 224, 225, 4, 191, + 192, 145, 57, 60, 145, 228, 47, 131, 57, 60, + 59, 63, 127, 133, 68, 231, 47, 54, 132, 55, + 59, 63, 47, 65, 68, -126, 59, 63, 168, 55, + 68, -141, 47, 65, 51, 55, 59, 178, 47, 65, + 68, 238, 59, 178, 239, 116, 68, 57, 60, 65, + -126, 116, 242, 57, 60, 65, 129, 245, -128, 138, + -129, 111, 94, 57, 60, -127, 171, 91, 165, 263, + 265, 90, 163, 57, 60, 139, 140, 47, 46, 57, + 60, 59, 178, 47, -129, 68, -126, 59, 178, 51, + 116, 68, -124, 47, 65, -127, 116, 59, 178, 184, + 65, 68, -125, 47, 57, 60, 116, 59, 178, 47, + 65, 68, 45, 59, 63, 272, 116, 68, -173, 273, + 65, 51, 55, 160, 57, 60, 65, 179, 143, 145, + 183, 57, 60, nil, 47, 237, nil, nil, 59, 178, + nil, nil, 68, nil, nil, nil, nil, 116, nil, nil, + nil, 65, nil, nil, 47, nil, 278, nil, 59, 178, + nil, 47, 68, nil, nil, 59, 178, 116, nil, 68, + nil, 65, nil, nil, 116, 257, nil, 20, 65, 24, + 26, nil, 1, 5, nil, 12, nil, 18, nil, 22, + nil, 27, nil, nil, 4, 9, 20, 243, 24, 26, + nil, 1, 5, nil, 12, nil, 18, nil, 22, nil, + 27, nil, nil, 4, 9, nil, 270, nil, 20, nil, + 24, 26, nil, 1, 5, nil, 12, nil, 18, nil, + 22, nil, 27, nil, nil, 4, 9, 20, 233, 24, + 26, nil, 1, 5, nil, 12, nil, 18, nil, 22, + nil, 27, nil, nil, 4, 9, nil, 277, nil, 20, + nil, 24, 26, nil, 1, 5, nil, 12, nil, 18, + nil, 22, nil, 27, nil, nil, 4, 9, 20, 274, + 24, 26, nil, 1, 5, nil, 12, nil, 18, nil, + 22, nil, 27, nil, nil, 4, 9, nil, 217, nil, + 20, nil, 24, 26, nil, 1, 5, nil, 12, nil, + 18, nil, 22, nil, 27, nil, nil, 4, 9, 20, + 215, 24, 26, nil, 1, 5, nil, 12, nil, 18, + nil, 22, nil, 27, nil, nil, 4, 9, nil, 256, + nil, 20, nil, 24, 26, nil, 1, 5, nil, 12, + nil, 18, nil, 22, nil, 27, nil, nil, 4, 9, + 20, nil, 24, 26, nil, 1, 5, nil, 12, nil, + 18, nil, 22, nil, 27, nil, nil, 4, 9, 20, + nil, 24, 26, nil, 1, 5, nil, 12, nil, 18, + nil, 22, nil, 27, nil, nil, 4, 9, 20, nil, + 24, 26, nil, 1, 5, nil, 12, nil, 18, nil, + 22, nil, 27, nil, nil, 4, 9, 20, nil, 24, + 26, nil, 1, 5, nil, 12, nil, 18, nil, 22, + nil, 27, nil, nil, 4, 9, 20, nil, 24, 26, + nil, 1, 5, nil, 12, nil, 18, nil, 22, nil, + 27, nil, nil, 4, 9 ] racc_action_check = [ - 93, 93, 93, 127, 106, 38, 71, 71, 71, 71, - 90, 127, 146, 54, 78, 23, 87, 87, 87, 23, - 146, 90, 161, 161, 161, 112, 90, 102, 102, 38, - 93, 23, 54, 64, 93, 93, 71, 112, 93, 62, - 71, 71, 142, 93, 71, 106, 87, 93, 66, 71, - 87, 87, 161, 71, 87, 23, 161, 161, 129, 87, - 161, 102, 119, 87, 102, 161, 240, 240, 240, 161, - 142, 142, 13, 13, 13, 238, 149, 135, 135, 2, - 238, 74, 15, 15, 15, 197, 2, 149, 17, 17, - 17, 13, 149, 99, 99, 61, 240, 197, 194, 118, - 240, 240, 13, 137, 240, 194, 13, 13, 137, 240, - 13, 210, 15, 240, 13, 13, 15, 15, 17, 13, - 15, 96, 17, 17, 96, 15, 17, 99, 96, 15, - 99, 17, 239, 239, 239, 17, 210, 210, 162, 162, - 162, 89, 205, 8, 8, 227, 227, 136, 165, 165, - 165, 116, 89, 205, 47, 47, 47, 89, 205, 19, - 19, 139, 239, 140, 21, 141, 239, 239, 162, 84, - 239, 21, 162, 162, 115, 239, 162, 8, 165, 239, - 8, 162, 165, 165, 47, 162, 165, 114, 47, 47, - 113, 165, 47, 60, 58, 165, 55, 47, 225, 225, - 225, 47, 29, 151, 187, 187, 187, 151, 151, 29, - 29, 83, 163, 131, 41, 41, 41, 131, 131, 164, - 52, 192, 192, 166, 167, 192, 168, 169, 225, 170, - 174, 46, 225, 225, 187, 182, 225, 184, 187, 187, - 45, 225, 187, 42, 41, 225, 40, 187, 41, 41, - 192, 187, 41, 110, 192, 192, 81, 41, 192, 208, - 208, 41, 107, 192, 199, 126, 126, 192, 200, 201, - 203, 70, 32, 88, 79, 209, 209, 28, 124, 224, - 25, 67, 67, 100, 126, 230, 233, 22, 208, 97, - 95, 73, 208, 208, 126, 11, 208, 245, 126, 126, - 67, 208, 126, 246, 209, 208, 126, 126, 209, 209, - 67, 126, 209, 248, 67, 67, 249, 209, 67, 125, - 125, 209, 67, 67, 250, 123, 123, 67, 123, 9, - 258, 259, 260, 77, 76, 176, 176, 91, 75, nil, - nil, 134, 134, nil, nil, nil, nil, nil, 125, nil, - nil, nil, 125, 125, 123, nil, 125, nil, 123, 123, - 125, 125, 123, nil, 176, 125, nil, 123, 176, 176, - 134, 123, 176, 215, 134, 134, nil, 176, 134, 234, - 234, 176, nil, 134, nil, 257, 257, 134, nil, nil, - nil, nil, nil, 215, nil, 215, 215, nil, 215, 215, - nil, 215, nil, 215, nil, 215, nil, 215, 234, nil, - 215, 215, 234, 234, 257, 236, 234, nil, 257, 257, - nil, 234, 257, nil, nil, 234, nil, 257, nil, nil, - nil, 257, nil, nil, 262, 236, nil, 236, 236, nil, - 236, 236, nil, 236, nil, 236, nil, 236, nil, 236, - nil, nil, 236, 236, 262, 157, 262, 262, nil, 262, - 262, nil, 262, nil, 262, nil, 262, nil, 262, nil, - nil, 262, 262, nil, 190, 157, nil, 157, 157, nil, - 157, 157, nil, 157, nil, 157, nil, 157, nil, 157, - nil, nil, 157, 157, 190, 213, 190, 190, nil, 190, - 190, nil, 190, nil, 190, nil, 190, nil, 190, nil, - nil, 190, 190, nil, 159, 213, nil, 213, 213, nil, - 213, 213, nil, 213, nil, 213, nil, 213, nil, 213, - nil, nil, 213, 213, 159, 272, 159, 159, nil, 159, - 159, nil, 159, nil, 159, nil, 159, nil, 159, nil, - nil, 159, 159, nil, 196, 272, nil, 272, 272, nil, - 272, 272, nil, 272, nil, 272, nil, 272, nil, 272, - nil, nil, 272, 272, 196, 273, 196, 196, nil, 196, - 196, nil, 196, nil, 196, nil, 196, nil, 196, nil, - nil, 196, 196, nil, nil, 273, nil, 273, 273, nil, - 273, 273, nil, 273, nil, 273, nil, 273, nil, 273, - nil, nil, 273, 273, 133, nil, 133, 133, nil, 133, - 133, nil, 133, nil, 133, nil, 133, nil, 133, nil, - nil, 133, 133, 270, nil, 270, 270, nil, 270, 270, - nil, 270, nil, 270, nil, 270, nil, 270, nil, nil, - 270, 270, 27, nil, 27, 27, nil, 27, 27, nil, - 27, nil, 27, nil, 27, nil, 27, nil, nil, 27, - 27, 0, nil, 0, 0, nil, 0, 0, nil, 0, - nil, 0, nil, 0, nil, 0, nil, nil, 0, 0 ] + 228, 228, 228, 207, 111, 44, 54, 54, 54, 36, + 241, 195, 83, 119, 201, 241, 168, 168, 168, 195, + 63, 30, 92, 92, 92, 30, 119, 201, 207, 207, + 44, 228, 46, 46, 46, 228, 228, 54, 30, 228, + 63, 54, 54, 82, 228, 54, 111, 168, 228, 149, + 54, 168, 168, 92, 54, 168, 85, 92, 92, 128, + 168, 92, 30, 46, 168, 80, 92, 46, 46, 75, + 92, 46, 167, 167, 167, 95, 46, 149, 149, 147, + 46, 153, 166, 166, 166, 96, 95, 105, 105, 153, + 147, 95, 18, 18, 18, 147, 96, 6, 20, 20, + 20, 96, 133, 167, 6, 6, 126, 167, 167, 140, + 133, 167, 18, 166, 140, 125, 167, 166, 166, 142, + 167, 166, 105, 18, 144, 105, 166, 18, 18, 20, + 166, 18, 5, 20, 20, 18, 18, 20, 145, 5, + 18, 210, 20, 22, 22, 22, 20, 1, 1, 242, + 242, 242, 210, 146, 12, 12, 26, 210, 123, 238, + 238, 238, 74, 26, 156, 34, 34, 34, 156, 156, + 104, 104, 139, 139, 22, 33, 33, 33, 22, 22, + 242, 122, 22, 121, 242, 242, 73, 22, 242, 12, + 238, 22, 12, 242, 238, 238, 34, 242, 238, 72, + 34, 34, 164, 238, 34, 104, 33, 238, 104, 34, + 33, 33, 165, 34, 33, 190, 190, 190, 71, 33, + 230, 230, 70, 33, 69, 77, 77, 77, 77, 24, + 24, 101, 50, 50, 101, 136, 169, 170, 101, 136, + 136, 171, 235, 235, 172, 174, 190, 178, 138, 138, + 190, 190, 50, 66, 190, 185, 77, 188, 64, 190, + 77, 77, 50, 190, 77, 58, 50, 50, 120, 77, + 50, 55, 235, 77, 50, 50, 235, 235, 138, 50, + 235, 199, 138, 138, 200, 235, 138, 132, 132, 235, + 118, 138, 203, 260, 260, 138, 53, 206, 52, 86, + 49, 45, 38, 213, 213, 84, 227, 29, 107, 233, + 234, 27, 106, 212, 212, 88, 89, 132, 17, 131, + 131, 132, 132, 260, 248, 132, 250, 260, 260, 132, + 132, 260, 251, 213, 132, 253, 260, 213, 213, 131, + 260, 213, 254, 212, 179, 179, 213, 212, 212, 131, + 213, 212, 15, 131, 131, 261, 212, 131, 262, 263, + 212, 131, 131, 102, 129, 129, 131, 129, 91, 94, + 130, 197, 197, nil, 179, 197, nil, nil, 179, 179, + nil, nil, 179, nil, nil, nil, nil, 179, nil, nil, + nil, 179, nil, nil, 129, nil, 276, nil, 129, 129, + nil, 197, 129, nil, nil, 197, 197, 129, nil, 197, + nil, 129, nil, nil, 197, 218, nil, 276, 197, 276, + 276, nil, 276, 276, nil, 276, nil, 276, nil, 276, + nil, 276, nil, nil, 276, 276, 218, 204, 218, 218, + nil, 218, 218, nil, 218, nil, 218, nil, 218, nil, + 218, nil, nil, 218, 218, nil, 244, nil, 204, nil, + 204, 204, nil, 204, 204, nil, 204, nil, 204, nil, + 204, nil, 204, nil, nil, 204, 204, 244, 193, 244, + 244, nil, 244, 244, nil, 244, nil, 244, nil, 244, + nil, 244, nil, nil, 244, 244, nil, 275, nil, 193, + nil, 193, 193, nil, 193, 193, nil, 193, nil, 193, + nil, 193, nil, 193, nil, nil, 193, 193, 275, 265, + 275, 275, nil, 275, 275, nil, 275, nil, 275, nil, + 275, nil, 275, nil, nil, 275, 275, nil, 163, nil, + 265, nil, 265, 265, nil, 265, 265, nil, 265, nil, + 265, nil, 265, nil, 265, nil, nil, 265, 265, 163, + 160, 163, 163, nil, 163, 163, nil, 163, nil, 163, + nil, 163, nil, 163, nil, nil, 163, 163, nil, 216, + nil, 160, nil, 160, 160, nil, 160, 160, nil, 160, + nil, 160, nil, 160, nil, 160, nil, nil, 160, 160, + 216, nil, 216, 216, nil, 216, 216, nil, 216, nil, + 216, nil, 216, nil, 216, nil, nil, 216, 216, 273, + nil, 273, 273, nil, 273, 273, nil, 273, nil, 273, + nil, 273, nil, 273, nil, nil, 273, 273, 32, nil, + 32, 32, nil, 32, 32, nil, 32, nil, 32, nil, + 32, nil, 32, nil, nil, 32, 32, 137, nil, 137, + 137, nil, 137, 137, nil, 137, nil, 137, nil, 137, + nil, 137, nil, nil, 137, 137, 0, nil, 0, 0, + nil, 0, 0, nil, 0, nil, 0, nil, 0, nil, + 0, nil, nil, 0, 0 ] racc_action_pointer = [ - 644, nil, 42, nil, nil, nil, nil, nil, 140, 323, - nil, 289, nil, 70, nil, 80, nil, 86, nil, 156, - nil, 127, 246, 13, nil, 280, nil, 625, 264, 165, - nil, nil, 238, nil, nil, nil, nil, nil, -5, nil, - 209, 212, 223, nil, nil, 238, 211, 152, nil, nil, - nil, nil, 210, nil, 11, 186, nil, nil, 174, nil, - 173, 93, 19, nil, 13, nil, 28, 278, nil, nil, - 251, 4, nil, 285, 61, 318, 314, 313, -6, 254, - nil, 250, nil, 201, 148, nil, nil, 14, 236, 120, - -11, 337, nil, -2, nil, 284, 84, 283, nil, 90, - 277, nil, 24, nil, nil, nil, -5, 252, nil, nil, - 233, nil, 16, 152, 167, 164, 131, nil, 79, 45, - nil, nil, nil, 322, 273, 316, 262, -34, nil, 36, - nil, 208, nil, 587, 338, 74, 141, 71, nil, 156, - 154, 155, 23, nil, nil, nil, -3, nil, nil, 55, - nil, 160, nil, nil, nil, nil, nil, 448, nil, 507, - nil, 20, 136, 205, 182, 146, 216, 217, 189, 190, - 220, nil, nil, nil, 209, nil, 332, nil, nil, nil, - nil, nil, 213, nil, 235, nil, nil, 202, nil, nil, - 467, nil, 218, nil, 88, nil, 547, 75, nil, 251, - 255, 247, nil, 263, nil, 121, nil, nil, 256, 272, - 89, nil, nil, 488, nil, 366, nil, nil, nil, nil, - nil, nil, nil, nil, 269, 196, nil, 136, nil, nil, - 257, nil, nil, 280, 376, nil, 408, nil, 43, 130, - 64, nil, nil, nil, nil, 277, 283, nil, 293, 296, - 304, nil, nil, nil, nil, nil, nil, 382, 323, 324, - 326, nil, 427, nil, nil, nil, nil, nil, nil, nil, - 606, nil, 528, 568, nil, nil ] + 648, 134, nil, nil, nil, 94, 59, nil, nil, nil, + nil, nil, 151, nil, nil, 346, nil, 312, 90, nil, + 96, nil, 141, nil, 226, nil, 118, 269, nil, 307, + 19, nil, 610, 173, 163, nil, -26, nil, 296, nil, + nil, nil, nil, nil, -5, 263, 30, nil, nil, 279, + 229, nil, 277, 275, 4, 269, nil, nil, 244, nil, + nil, nil, nil, 18, 248, nil, 243, nil, nil, 203, + 201, 216, 178, 165, 141, 48, nil, 223, nil, nil, + 44, nil, 37, -9, 284, 35, 293, nil, 305, 294, + nil, 368, 20, nil, 331, 53, 63, nil, nil, nil, + nil, 193, 357, nil, 167, 84, 306, 298, nil, nil, + nil, -5, nil, nil, nil, nil, nil, nil, 269, 4, + 229, 162, 171, 137, nil, 94, 88, nil, 36, 361, + 365, 316, 284, 64, nil, nil, 230, 629, 245, 169, + 76, nil, 113, nil, 119, 129, 143, 57, nil, 29, + nil, nil, nil, 65, nil, nil, 120, nil, nil, nil, + 553, nil, nil, 531, 195, 174, 80, 70, 14, 229, + 230, 203, 206, nil, 236, nil, nil, nil, 225, 341, + nil, nil, nil, nil, nil, 232, nil, nil, 255, nil, + 213, nil, nil, 471, nil, 1, nil, 368, nil, 268, + 261, 4, nil, 279, 430, nil, 290, -20, nil, nil, + 119, nil, 310, 300, nil, nil, 572, nil, 408, nil, + nil, nil, nil, nil, nil, nil, nil, 296, -2, nil, + 211, nil, nil, 280, 304, 239, nil, nil, 157, nil, + nil, -23, 147, nil, 449, nil, nil, nil, 303, nil, + 305, 311, nil, 314, 321, nil, nil, nil, nil, nil, + 290, 348, 351, 353, nil, 512, nil, nil, nil, nil, + nil, nil, nil, 591, nil, 490, 389, nil, nil ] racc_action_default = [ - -148, -141, -172, -15, -3, -139, -16, -5, -172, -172, - -6, -172, -7, -140, -8, -172, -9, -172, -10, -172, - -11, -172, -39, -172, -12, -172, -13, -1, -172, -172, - -14, -2, -148, -140, -146, -145, -144, -147, -148, -142, - -77, -70, -172, -31, -29, -62, -30, -172, -32, -19, - -102, -100, -20, -101, -61, -21, -60, -22, -24, -129, - -25, -172, -26, -128, -27, -165, -28, -172, -108, -92, - -88, -172, -95, -172, -89, -93, -90, -97, -91, -96, - -94, -172, -130, -132, -148, -40, -41, -172, -70, -148, - -148, -172, -4, -172, -38, -172, -172, -172, -161, -172, - -172, -159, -172, -75, -76, -78, -172, -170, -66, -71, - -63, -62, -61, -58, -64, -170, -67, -56, -65, -172, - -127, -126, -68, -172, -172, -172, -172, -172, -18, -172, - -80, -172, -167, -172, -172, -172, -172, -149, -150, -172, - -172, -170, -172, -45, -61, -47, -172, -54, -53, -148, - -44, -172, 276, -69, -162, -163, -164, -172, -160, -172, - -143, -172, -172, -172, -171, -59, -172, -172, -171, -70, - -172, -124, -116, -117, -61, -122, -172, -125, -123, -103, - -23, -99, -172, -33, -172, -17, -166, -172, -168, -169, - -172, -114, -172, -110, -172, -131, -172, -172, -153, -156, - -158, -172, -104, -172, -50, -172, -49, -43, -172, -172, - -172, -42, -136, -172, -138, -172, -74, -73, -37, -79, - -57, -34, -35, -72, -170, -172, -119, -170, -98, -81, - -106, -109, -111, -172, -172, -134, -172, -152, -172, -172, - -172, -151, -36, -46, -86, -82, -83, -51, -87, -84, - -85, -52, -48, -135, -137, -55, -121, -172, -172, -169, - -172, -105, -172, -115, -133, -154, -155, -157, -120, -118, - -172, -113, -172, -172, -112, -107 ] + -150, -174, -14, -2, -143, -174, -174, -15, -3, -141, + -16, -5, -174, -17, -6, -174, -7, -174, -142, -8, + -174, -9, -174, -10, -174, -11, -174, -40, -12, -174, + -174, -13, -1, -174, -174, -142, -150, -39, -174, -144, + -148, -147, -146, -149, -150, -79, -72, -167, -130, -28, + -174, -32, -29, -174, -174, -63, -30, -102, -31, -104, + -103, -33, -20, -62, -21, -61, -22, -23, -131, -25, + -26, -174, -27, -99, -93, -98, -96, -174, -110, -94, + -90, -97, -174, -91, -95, -92, -174, -132, -134, -150, + -41, -174, -174, -42, -72, -150, -150, -4, -70, -71, + -163, -174, -174, -161, -174, -174, -174, -172, -77, -78, + -80, -174, -129, -128, -69, -67, -63, -73, -64, -62, + -59, -65, -172, -68, -57, -66, -174, -19, -174, -174, + -174, -174, -174, -174, -82, -169, -174, -174, -174, -174, + -151, -152, -174, 279, -174, -174, -172, -150, -45, -174, + -46, -62, -48, -174, -55, -54, -174, -164, -165, -166, + -174, -162, -145, -174, -174, -173, -174, -174, -60, -174, + -174, -173, -72, -18, -174, -126, -118, -119, -62, -174, + -124, -127, -125, -105, -101, -174, -24, -34, -174, -168, + -174, -170, -171, -174, -112, -174, -116, -174, -133, -160, + -174, -174, -155, -158, -174, -106, -174, -174, -51, -50, + -174, -44, -174, -174, -43, -138, -174, -140, -174, -38, + -81, -76, -75, -58, -35, -36, -74, -172, -174, -121, + -172, -100, -83, -108, -174, -174, -113, -111, -174, -153, + -154, -174, -174, -136, -174, -37, -49, -47, -87, -88, + -84, -85, -52, -89, -86, -53, -137, -139, -56, -123, + -174, -174, -171, -174, -107, -174, -117, -159, -156, -157, + -135, -122, -120, -174, -115, -174, -174, -114, -109 ] racc_goto_table = [ - 23, 27, 122, 92, 173, 105, 198, 49, 117, 46, - 187, 39, 31, 170, 32, 82, 193, 103, 115, 25, - 142, 151, 243, 44, 191, 247, 251, 23, 131, 95, - 64, 86, 73, 84, 261, 192, 107, 110, 166, 172, - 113, 227, 83, 62, 98, 163, 136, 97, 38, 100, - 101, 108, 180, 167, 201, 197, 94, 226, 120, 154, - nil, 129, nil, 46, 66, 141, 170, nil, nil, nil, - nil, 118, nil, nil, 232, nil, nil, 44, nil, 203, - 210, nil, 191, nil, 64, nil, nil, nil, nil, nil, - nil, nil, 121, nil, nil, nil, 138, 62, nil, nil, - nil, nil, 158, nil, nil, 160, 257, 265, 155, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 66, 171, - 182, 46, 46, nil, 263, nil, 122, nil, nil, 219, - 171, 195, 220, 23, 190, 44, 44, nil, 268, nil, - 120, 103, 64, 64, nil, 223, 224, 170, nil, nil, - nil, 120, nil, 178, nil, 62, 62, 23, 213, 23, - 215, 110, 255, nil, 178, 258, 92, nil, nil, nil, - 60, nil, 171, nil, 121, 108, 66, 66, nil, nil, - 58, nil, 120, nil, nil, 121, nil, nil, 171, 92, - 23, 92, nil, 120, nil, 118, 23, 236, 116, nil, - nil, nil, nil, nil, 245, 245, 178, nil, 114, 120, - nil, nil, 92, 23, nil, 23, 121, nil, 244, 244, - nil, nil, 178, nil, 60, 250, 250, 121, nil, nil, - 171, nil, nil, nil, 58, nil, 23, nil, 249, 249, - nil, nil, nil, 121, nil, nil, 148, 148, 92, 92, - nil, 120, nil, 171, nil, nil, 147, 147, nil, 121, - 121, nil, 23, 272, 178, nil, nil, nil, nil, nil, - 23, 273, 23, 23, 120, 68, nil, 81, nil, 77, - 177, 77, 60, 60, 48, 121, 72, 178, 72, nil, - 175, 177, 58, 58, nil, nil, nil, nil, nil, nil, - nil, 175, nil, nil, nil, nil, 148, 124, 121, nil, - nil, 77, nil, nil, nil, nil, 147, nil, 72, nil, - nil, nil, 116, nil, nil, nil, nil, nil, nil, nil, - nil, 130, 114, 177, nil, 77, nil, nil, 48, nil, - nil, nil, 72, 175, nil, nil, nil, 139, nil, 177, - nil, 77, nil, 153, nil, nil, nil, 77, 72, 175, - nil, nil, 148, nil, 72, 248, 248, nil, nil, nil, - nil, nil, 147, nil, nil, 246, 246, nil, nil, nil, + 30, 32, 56, 108, 174, 97, 38, 110, 52, 39, + 122, 177, 62, 196, 190, 3, 202, 114, 194, 29, + 58, 124, 149, 156, 164, 247, 87, 136, 36, 93, + 115, 82, 30, 264, 56, 197, 113, 252, 255, 170, + 52, 107, 169, 176, 128, 120, 230, 88, 118, 89, + 142, 100, 58, 102, 174, 44, 106, 186, 146, 103, + 49, 229, 200, 206, 201, 37, 157, nil, nil, nil, + nil, 61, 196, 81, 207, 81, nil, 236, nil, nil, + nil, nil, nil, nil, nil, nil, 81, 81, 112, nil, + nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, + nil, 161, 162, 61, 141, nil, nil, 81, 260, nil, + 266, nil, nil, nil, nil, 56, 56, 268, 72, 113, + nil, 52, 52, 108, 158, 185, nil, 220, 113, 226, + 81, 175, nil, 58, 58, 174, 227, 30, 193, 114, + 175, 198, 271, 223, 258, 81, 125, 261, nil, nil, + 72, nil, 115, nil, nil, nil, nil, nil, 113, nil, + 30, 216, nil, 30, 218, nil, 97, nil, nil, 113, + 118, 112, nil, 49, 49, nil, nil, nil, nil, 70, + 112, 175, nil, nil, 61, nil, 187, 113, nil, 97, + nil, 97, nil, 30, nil, nil, 249, 249, nil, 175, + nil, nil, 113, 113, 30, 244, nil, 123, nil, nil, + 112, 70, nil, nil, 250, 250, 30, 97, 30, 81, + 81, 112, nil, nil, nil, 113, nil, nil, nil, 182, + nil, 72, 72, nil, nil, nil, nil, 175, 182, 112, + nil, nil, nil, 81, 30, nil, nil, nil, 97, 97, + 113, nil, nil, nil, 248, 248, 155, 155, nil, nil, + nil, nil, 175, nil, nil, 30, 275, nil, 125, 78, + nil, 86, 69, 30, 276, 30, 30, 112, nil, 182, + nil, 81, 98, 99, nil, nil, nil, nil, nil, nil, + 181, 81, 70, 70, nil, 81, nil, 182, nil, 181, + 121, nil, 112, 130, 69, nil, nil, nil, 155, 73, + nil, 73, 254, 254, nil, nil, nil, nil, nil, nil, + nil, nil, 73, 73, nil, nil, 134, nil, nil, 123, + nil, nil, nil, nil, nil, 182, nil, nil, nil, nil, + 181, 144, nil, 73, nil, nil, nil, nil, nil, 154, + 154, nil, nil, nil, nil, nil, nil, nil, 181, nil, + 182, nil, nil, nil, nil, nil, 73, nil, nil, nil, + nil, 155, nil, 253, 253, nil, nil, nil, nil, nil, + nil, 73, nil, 180, nil, 69, 69, nil, nil, nil, + nil, nil, 180, nil, nil, nil, 181, nil, nil, nil, + nil, 154, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 221, 222, nil, nil, nil, + nil, 181, 121, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 180, nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 177, nil, nil, nil, nil, nil, 48, 183, nil, - nil, 175, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 177, nil, nil, nil, nil, nil, - nil, 216, 217, nil, 175, 77, 77, nil, nil, nil, - nil, nil, 72, 72, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 229, nil, nil, - nil, 77, nil, nil, nil, nil, nil, nil, 72, nil, + nil, 180, nil, nil, nil, 73, 73, nil, nil, nil, + nil, nil, nil, nil, 154, nil, 251, 251, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 259, nil, 73, + nil, nil, nil, nil, nil, nil, nil, 267, nil, 180, + nil, 269, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, nil, nil, nil, 77, - nil, nil, nil, nil, nil, nil, 72, nil, nil, 266, - 267, nil, nil, 77, 77, nil, nil, nil, nil, nil, - 72, 72 ] + nil, nil, nil, nil, 180, nil, nil, 73, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 73, nil, nil, + nil, 73 ] racc_goto_check = [ - 34, 2, 47, 4, 61, 51, 71, 17, 44, 27, - 53, 68, 3, 59, 29, 27, 57, 49, 32, 1, - 38, 38, 39, 26, 59, 43, 43, 34, 52, 34, - 24, 37, 54, 29, 55, 56, 35, 27, 31, 60, - 30, 62, 63, 23, 3, 33, 64, 65, 66, 67, - 3, 26, 20, 33, 69, 70, 5, 61, 24, 72, - nil, 17, nil, 27, 25, 32, 59, nil, nil, nil, - nil, 23, nil, nil, 57, nil, nil, 26, nil, 33, - 38, nil, 59, nil, 24, nil, nil, nil, nil, nil, - nil, nil, 25, nil, nil, nil, 3, 23, nil, nil, - nil, nil, 68, nil, nil, 68, 53, 71, 29, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 25, 27, - 17, 27, 27, nil, 59, nil, 47, nil, nil, 51, - 27, 27, 44, 34, 2, 26, 26, nil, 61, nil, - 24, 49, 24, 24, nil, 49, 32, 59, nil, nil, - nil, 24, nil, 23, nil, 23, 23, 34, 2, 34, - 2, 27, 33, nil, 23, 33, 4, nil, nil, nil, - 22, nil, 27, nil, 25, 26, 25, 25, nil, nil, - 21, nil, 24, nil, nil, 25, nil, nil, 27, 4, - 34, 4, nil, 24, nil, 23, 34, 2, 22, nil, - nil, nil, nil, nil, 27, 27, 23, nil, 21, 24, - nil, nil, 4, 34, nil, 34, 25, nil, 26, 26, - nil, nil, 23, nil, 22, 24, 24, 25, nil, nil, - 27, nil, nil, nil, 21, nil, 34, nil, 23, 23, - nil, nil, nil, 25, nil, nil, 22, 22, 4, 4, - nil, 24, nil, 27, nil, nil, 21, 21, nil, 25, - 25, nil, 34, 2, 23, nil, nil, nil, nil, nil, - 34, 2, 34, 34, 24, 48, nil, 48, nil, 46, - 22, 46, 22, 22, 28, 25, 28, 23, 28, nil, - 21, 22, 21, 21, nil, nil, nil, nil, nil, nil, - nil, 21, nil, nil, nil, nil, 22, 48, 25, nil, - nil, 46, nil, nil, nil, nil, 21, nil, 28, nil, - nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, - nil, 48, 21, 22, nil, 46, nil, nil, 28, nil, - nil, nil, 28, 21, nil, nil, nil, 48, nil, 22, - nil, 46, nil, 48, nil, nil, nil, 46, 28, 21, - nil, nil, 22, nil, 28, 22, 22, nil, nil, nil, - nil, nil, 21, nil, nil, 21, 21, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, nil, 28, 28, nil, - nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, - nil, 48, 48, nil, 21, 46, 46, nil, nil, nil, - nil, nil, 28, 28, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 48, nil, nil, - nil, 46, nil, nil, nil, nil, nil, nil, 28, nil, + 35, 2, 27, 50, 60, 4, 35, 52, 26, 69, + 33, 62, 18, 60, 54, 3, 72, 48, 58, 1, + 28, 45, 39, 39, 34, 40, 28, 53, 30, 38, + 27, 55, 35, 56, 27, 57, 26, 44, 44, 34, + 26, 36, 32, 61, 18, 31, 63, 64, 28, 30, + 65, 3, 28, 66, 60, 67, 68, 21, 33, 3, + 25, 62, 70, 34, 71, 5, 73, nil, nil, nil, + nil, 29, 60, 29, 39, 29, nil, 58, nil, nil, + nil, nil, nil, nil, nil, nil, 29, 29, 25, nil, + nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, + nil, 69, 69, 29, 3, nil, nil, 29, 54, nil, + 60, nil, nil, nil, nil, 27, 27, 72, 24, 26, + nil, 26, 26, 50, 30, 18, nil, 52, 26, 50, + 29, 28, nil, 28, 28, 60, 33, 35, 2, 48, + 28, 28, 62, 45, 34, 29, 24, 34, nil, nil, + 24, nil, 27, nil, nil, nil, nil, nil, 26, nil, + 35, 2, nil, 35, 2, nil, 4, nil, nil, 26, + 28, 25, nil, 25, 25, nil, nil, nil, nil, 23, + 25, 28, nil, nil, 29, nil, 29, 26, nil, 4, + nil, 4, nil, 35, nil, nil, 27, 27, nil, 28, + nil, nil, 26, 26, 35, 2, nil, 23, nil, nil, + 25, 23, nil, nil, 28, 28, 35, 4, 35, 29, + 29, 25, nil, nil, nil, 26, nil, nil, nil, 24, + nil, 24, 24, nil, nil, nil, nil, 28, 24, 25, + nil, nil, nil, 29, 35, nil, nil, nil, 4, 4, + 26, nil, nil, nil, 25, 25, 23, 23, nil, nil, + nil, nil, 28, nil, nil, 35, 2, nil, 24, 49, + nil, 49, 22, 35, 2, 35, 35, 25, nil, 24, + nil, 29, 49, 49, nil, nil, nil, nil, nil, nil, + 23, 29, 23, 23, nil, 29, nil, 24, nil, 23, + 22, nil, 25, 49, 22, nil, nil, nil, 23, 47, + nil, 47, 24, 24, nil, nil, nil, nil, nil, nil, + nil, nil, 47, 47, nil, nil, 49, nil, nil, 23, + nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, + 23, 49, nil, 47, nil, nil, nil, nil, nil, 22, + 22, nil, nil, nil, nil, nil, nil, nil, 23, nil, + 24, nil, nil, nil, nil, nil, 47, nil, nil, nil, + nil, 23, nil, 23, 23, nil, nil, nil, nil, nil, + nil, 47, nil, 22, nil, 22, 22, nil, nil, nil, + nil, nil, 22, nil, nil, nil, 23, nil, nil, nil, + nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 49, 49, nil, nil, nil, + nil, 23, 22, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 22, nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 22, nil, nil, nil, 47, 47, nil, nil, nil, + nil, nil, nil, nil, 22, nil, 22, 22, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 49, nil, 47, + nil, nil, nil, nil, nil, nil, nil, 49, nil, 22, + nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 48, nil, nil, nil, 46, - nil, nil, nil, nil, nil, nil, 28, nil, nil, 48, - 48, nil, nil, 46, 46, nil, nil, nil, nil, nil, - 28, 28 ] + nil, nil, nil, nil, 22, nil, nil, 47, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 47, nil, nil, + nil, 47 ] racc_goto_pointer = [ - nil, 19, 1, 12, -24, 27, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -6, nil, nil, - -73, 167, 157, 30, 17, 51, 10, -4, 271, 12, - -1, -75, -23, -62, 0, -4, nil, 8, -69, -183, - nil, nil, nil, -183, -33, nil, 264, -39, 260, -23, - nil, -35, -43, -121, 17, -196, -99, -118, nil, -110, - -84, -119, -135, 23, -38, 15, 40, 11, 3, -83, - -82, -131, -37 ] + nil, 19, 1, 15, -27, 59, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, -6, nil, + nil, -75, 254, 161, 100, 42, -10, -16, 2, 53, + 23, -1, -78, -36, -83, 0, -4, nil, -1, -73, + -185, nil, nil, nil, -175, -25, nil, 289, -29, 249, + -42, nil, -38, -50, -122, 11, -200, -103, -120, nil, + -125, -86, -118, -133, 23, -39, 17, 43, 12, -3, + -78, -76, -124, -35 ] racc_goto_default = [ - nil, nil, nil, 150, 4, 7, 10, 12, 14, 16, - 18, 20, 24, 26, 30, 3, 6, nil, 52, 55, - 57, 74, 75, 76, 78, 79, 69, 70, 9, 11, - nil, nil, nil, nil, 61, nil, 29, nil, nil, 143, - 205, 145, 146, nil, nil, 119, 63, 80, nil, 109, - 104, nil, nil, nil, nil, nil, nil, nil, 194, 42, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil ] + nil, nil, nil, 148, 8, 11, 14, 16, 19, 21, + 23, 25, 28, 31, 2, 7, 10, 13, nil, 64, + 66, 67, 83, 84, 85, 74, 75, 79, 80, 15, + 17, nil, nil, nil, nil, 71, nil, 6, nil, nil, + 150, 210, 152, 153, nil, nil, 126, 48, 76, nil, + 117, 109, nil, nil, nil, nil, nil, nil, nil, 195, + 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil ] racc_token_table = { false => 0, @@ -568,47 +576,48 @@ racc_token_table = { :TRUE => 11, :FALSE => 12, :EQUALS => 13, - :LESSEQUAL => 14, - :NOTEQUAL => 15, - :DOT => 16, - :COLON => 17, - :LLCOLLECT => 18, - :RRCOLLECT => 19, - :QMARK => 20, - :LPAREN => 21, - :RPAREN => 22, - :ISEQUAL => 23, - :GREATEREQUAL => 24, - :GREATERTHAN => 25, - :LESSTHAN => 26, - :IF => 27, - :ELSE => 28, - :IMPORT => 29, - :DEFINE => 30, - :ELSIF => 31, - :VARIABLE => 32, - :CLASS => 33, - :INHERITS => 34, - :NODE => 35, - :BOOLEAN => 36, - :NAME => 37, - :SEMIC => 38, - :CASE => 39, - :DEFAULT => 40, - :AT => 41, - :LCOLLECT => 42, - :RCOLLECT => 43, - :CLASSNAME => 44, - :CLASSREF => 45, - :NOT => 46, - :OR => 47, - :AND => 48, - :UNDEF => 49, - :PARROW => 50 } + :APPENDS => 14, + :LESSEQUAL => 15, + :NOTEQUAL => 16, + :DOT => 17, + :COLON => 18, + :LLCOLLECT => 19, + :RRCOLLECT => 20, + :QMARK => 21, + :LPAREN => 22, + :RPAREN => 23, + :ISEQUAL => 24, + :GREATEREQUAL => 25, + :GREATERTHAN => 26, + :LESSTHAN => 27, + :IF => 28, + :ELSE => 29, + :IMPORT => 30, + :DEFINE => 31, + :ELSIF => 32, + :VARIABLE => 33, + :CLASS => 34, + :INHERITS => 35, + :NODE => 36, + :BOOLEAN => 37, + :NAME => 38, + :SEMIC => 39, + :CASE => 40, + :DEFAULT => 41, + :AT => 42, + :LCOLLECT => 43, + :RCOLLECT => 44, + :CLASSNAME => 45, + :CLASSREF => 46, + :NOT => 47, + :OR => 48, + :AND => 49, + :UNDEF => 50, + :PARROW => 51 } racc_use_result_var = true -racc_nt_base = 51 +racc_nt_base = 52 Racc_arg = [ racc_action_table, @@ -641,6 +650,7 @@ Racc_token_to_s_table = [ 'TRUE', 'FALSE', 'EQUALS', +'APPENDS', 'LESSEQUAL', 'NOTEQUAL', 'DOT', @@ -695,6 +705,7 @@ Racc_token_to_s_table = [ 'hostclass', 'nodedef', 'resourceoverride', +'append', 'funcvalues', 'namestrings', 'resourcerefs', @@ -823,8 +834,10 @@ module_eval <<'.,.,', 'grammar.ra', 46 # reduce 16 omitted -module_eval <<'.,.,', 'grammar.ra', 68 - def _reduce_17( val, _values, result ) + # reduce 17 omitted + +module_eval <<'.,.,', 'grammar.ra', 69 + def _reduce_18( val, _values, result ) args = aryfy(val[2]) result = ast AST::Function, :name => val[0], @@ -834,8 +847,8 @@ module_eval <<'.,.,', 'grammar.ra', 68 end .,., -module_eval <<'.,.,', 'grammar.ra', 74 - def _reduce_18( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 75 + def _reduce_19( val, _values, result ) result = ast AST::Function, :name => val[0], :arguments => AST::ASTArray.new({}), @@ -844,8 +857,8 @@ module_eval <<'.,.,', 'grammar.ra', 74 end .,., -module_eval <<'.,.,', 'grammar.ra', 81 - def _reduce_19( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 82 + def _reduce_20( val, _values, result ) args = aryfy(val[1]) result = ast AST::Function, :name => val[0], @@ -855,14 +868,14 @@ module_eval <<'.,.,', 'grammar.ra', 81 end .,., - # reduce 20 omitted - # reduce 21 omitted # reduce 22 omitted -module_eval <<'.,.,', 'grammar.ra', 91 - def _reduce_23( val, _values, result ) + # reduce 23 omitted + +module_eval <<'.,.,', 'grammar.ra', 92 + def _reduce_24( val, _values, result ) result = aryfy(val[0], val[2]) result.line = @lexer.line result.file = @lexer.file @@ -870,8 +883,6 @@ module_eval <<'.,.,', 'grammar.ra', 91 end .,., - # reduce 24 omitted - # reduce 25 omitted # reduce 26 omitted @@ -884,17 +895,19 @@ module_eval <<'.,.,', 'grammar.ra', 91 # reduce 30 omitted -module_eval <<'.,.,', 'grammar.ra', 104 - def _reduce_31( val, _values, result ) + # reduce 31 omitted + +module_eval <<'.,.,', 'grammar.ra', 105 + def _reduce_32( val, _values, result ) result = ast AST::Name, :value => val[0] result end .,., - # reduce 32 omitted + # reduce 33 omitted -module_eval <<'.,.,', 'grammar.ra', 115 - def _reduce_33( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 116 + def _reduce_34( val, _values, result ) unless val[0].is_a?(AST::ASTArray) val[0] = aryfy(val[0]) end @@ -906,8 +919,8 @@ module_eval <<'.,.,', 'grammar.ra', 115 end .,., -module_eval <<'.,.,', 'grammar.ra', 136 - def _reduce_34( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 137 + def _reduce_35( val, _values, result ) array = val[2] if array.instance_of?(AST::ResourceInstance) array = [array] @@ -930,31 +943,31 @@ module_eval <<'.,.,', 'grammar.ra', 136 end .,., -module_eval <<'.,.,', 'grammar.ra', 139 - def _reduce_35( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 140 + def _reduce_36( val, _values, result ) # This is a deprecated syntax. error "All resource specifications require names" result end .,., -module_eval <<'.,.,', 'grammar.ra', 142 - def _reduce_36( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 143 + def _reduce_37( val, _values, result ) # a defaults setting for a type result = ast(AST::ResourceDefaults, :type => val[0], :params => val[2]) result end .,., -module_eval <<'.,.,', 'grammar.ra', 147 - def _reduce_37( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 148 + def _reduce_38( val, _values, result ) result = ast AST::ResourceOverride, :object => val[0], :params => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 174 - def _reduce_38( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 175 + def _reduce_39( val, _values, result ) type = val[0] if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly] @@ -981,22 +994,22 @@ module_eval <<'.,.,', 'grammar.ra', 174 end .,., -module_eval <<'.,.,', 'grammar.ra', 175 - def _reduce_39( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 176 + def _reduce_40( val, _values, result ) result = :virtual result end .,., -module_eval <<'.,.,', 'grammar.ra', 176 - def _reduce_40( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 177 + def _reduce_41( val, _values, result ) result = :exported result end .,., -module_eval <<'.,.,', 'grammar.ra', 199 - def _reduce_41( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 200 + def _reduce_42( val, _values, result ) if val[0] =~ /^[a-z]/ Puppet.warning addcontext("Collection names must now be capitalized") end @@ -1018,8 +1031,8 @@ module_eval <<'.,.,', 'grammar.ra', 199 end .,., -module_eval <<'.,.,', 'grammar.ra', 209 - def _reduce_42( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 210 + def _reduce_43( val, _values, result ) if val[1] result = val[1] result.form = :virtual @@ -1030,8 +1043,8 @@ module_eval <<'.,.,', 'grammar.ra', 209 end .,., -module_eval <<'.,.,', 'grammar.ra', 217 - def _reduce_43( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 218 + def _reduce_44( val, _values, result ) if val[1] result = val[1] result.form = :exported @@ -1042,33 +1055,33 @@ module_eval <<'.,.,', 'grammar.ra', 217 end .,., - # reduce 44 omitted - # reduce 45 omitted -module_eval <<'.,.,', 'grammar.ra', 225 - def _reduce_46( val, _values, result ) + # reduce 46 omitted + +module_eval <<'.,.,', 'grammar.ra', 226 + def _reduce_47( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] result end .,., - # reduce 47 omitted + # reduce 48 omitted -module_eval <<'.,.,', 'grammar.ra', 231 - def _reduce_48( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 232 + def _reduce_49( val, _values, result ) result = val[1] result.parens = true result end .,., - # reduce 49 omitted - # reduce 50 omitted -module_eval <<'.,.,', 'grammar.ra', 239 - def _reduce_51( val, _values, result ) + # reduce 51 omitted + +module_eval <<'.,.,', 'grammar.ra', 240 + def _reduce_52( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] #result = ast AST::CollExpr #result.push *val @@ -1076,8 +1089,8 @@ module_eval <<'.,.,', 'grammar.ra', 239 end .,., -module_eval <<'.,.,', 'grammar.ra', 244 - def _reduce_52( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 245 + def _reduce_53( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] #result = ast AST::CollExpr #result.push *val @@ -1085,21 +1098,21 @@ module_eval <<'.,.,', 'grammar.ra', 244 end .,., - # reduce 53 omitted - # reduce 54 omitted -module_eval <<'.,.,', 'grammar.ra', 251 - def _reduce_55( val, _values, result ) + # reduce 55 omitted + +module_eval <<'.,.,', 'grammar.ra', 252 + def _reduce_56( val, _values, result ) result = ast AST::ResourceInstance, :children => [val[0],val[2]] result end .,., - # reduce 56 omitted + # reduce 57 omitted -module_eval <<'.,.,', 'grammar.ra', 261 - def _reduce_57( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 262 + def _reduce_58( val, _values, result ) if val[0].instance_of?(AST::ResourceInstance) result = ast AST::ASTArray, :children => [val[0],val[2]] else @@ -1110,33 +1123,31 @@ module_eval <<'.,.,', 'grammar.ra', 261 end .,., - # reduce 58 omitted - # reduce 59 omitted -module_eval <<'.,.,', 'grammar.ra', 268 - def _reduce_60( val, _values, result ) + # reduce 60 omitted + +module_eval <<'.,.,', 'grammar.ra', 269 + def _reduce_61( val, _values, result ) result = ast AST::Undef, :value => :undef result end .,., -module_eval <<'.,.,', 'grammar.ra', 272 - def _reduce_61( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 273 + def _reduce_62( val, _values, result ) result = ast AST::Name, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 276 - def _reduce_62( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 277 + def _reduce_63( val, _values, result ) result = ast AST::Type, :value => val[0] result end .,., - # reduce 63 omitted - # reduce 64 omitted # reduce 65 omitted @@ -1147,8 +1158,10 @@ module_eval <<'.,.,', 'grammar.ra', 276 # reduce 68 omitted -module_eval <<'.,.,', 'grammar.ra', 292 - def _reduce_69( val, _values, result ) + # reduce 69 omitted + +module_eval <<'.,.,', 'grammar.ra', 293 + def _reduce_70( val, _values, result ) if val[0] =~ /::/ raise Puppet::ParseError, "Cannot assign to variables in other namespaces" end @@ -1159,22 +1172,30 @@ module_eval <<'.,.,', 'grammar.ra', 292 end .,., -module_eval <<'.,.,', 'grammar.ra', 297 - def _reduce_70( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 298 + def _reduce_71( val, _values, result ) + variable = ast AST::Name, :value => val[0] + result = ast AST::VarDef, :name => variable, :value => val[2], :append => true + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 303 + def _reduce_72( val, _values, result ) result = ast AST::ASTArray result end .,., -module_eval <<'.,.,', 'grammar.ra', 297 - def _reduce_71( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 303 + def _reduce_73( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 306 - def _reduce_72( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 312 + def _reduce_74( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1185,41 +1206,41 @@ module_eval <<'.,.,', 'grammar.ra', 306 end .,., -module_eval <<'.,.,', 'grammar.ra', 310 - def _reduce_73( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 316 + def _reduce_75( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 315 - def _reduce_74( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 321 + def _reduce_76( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2], :add => true result end .,., - # reduce 75 omitted + # reduce 77 omitted - # reduce 76 omitted + # reduce 78 omitted -module_eval <<'.,.,', 'grammar.ra', 323 - def _reduce_77( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 329 + def _reduce_79( val, _values, result ) result = ast AST::ASTArray result end .,., -module_eval <<'.,.,', 'grammar.ra', 323 - def _reduce_78( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 329 + def _reduce_80( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 332 - def _reduce_79( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 338 + def _reduce_81( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1230,10 +1251,10 @@ module_eval <<'.,.,', 'grammar.ra', 332 end .,., - # reduce 80 omitted + # reduce 82 omitted -module_eval <<'.,.,', 'grammar.ra', 341 - def _reduce_81( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 347 + def _reduce_83( val, _values, result ) if val[0].instance_of?(AST::ASTArray) result = val[0].push(val[2]) else @@ -1243,10 +1264,6 @@ module_eval <<'.,.,', 'grammar.ra', 341 end .,., - # reduce 82 omitted - - # reduce 83 omitted - # reduce 84 omitted # reduce 85 omitted @@ -1275,8 +1292,12 @@ module_eval <<'.,.,', 'grammar.ra', 341 # reduce 97 omitted -module_eval <<'.,.,', 'grammar.ra', 368 - def _reduce_98( val, _values, result ) + # reduce 98 omitted + + # reduce 99 omitted + +module_eval <<'.,.,', 'grammar.ra', 374 + def _reduce_100( val, _values, result ) args = aryfy(val[2]) result = ast AST::Function, :name => val[0], @@ -1286,8 +1307,8 @@ module_eval <<'.,.,', 'grammar.ra', 368 end .,., -module_eval <<'.,.,', 'grammar.ra', 373 - def _reduce_99( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 379 + def _reduce_101( val, _values, result ) result = ast AST::Function, :name => val[0], :arguments => AST::ASTArray.new({}), @@ -1296,44 +1317,44 @@ module_eval <<'.,.,', 'grammar.ra', 373 end .,., -module_eval <<'.,.,', 'grammar.ra', 377 - def _reduce_100( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 383 + def _reduce_102( val, _values, result ) result = ast AST::String, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 379 - def _reduce_101( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 385 + def _reduce_103( val, _values, result ) result = ast AST::FlatString, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 383 - def _reduce_102( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 389 + def _reduce_104( val, _values, result ) result = ast AST::Boolean, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 388 - def _reduce_103( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 394 + def _reduce_105( val, _values, result ) Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized") result = ast AST::ResourceReference, :type => val[0], :title => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 390 - def _reduce_104( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 396 + def _reduce_106( val, _values, result ) result = ast AST::ResourceReference, :type => val[0], :title => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 403 - def _reduce_105( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 409 + def _reduce_107( val, _values, result ) args = { :test => val[1], :statements => val[3] @@ -1348,19 +1369,19 @@ module_eval <<'.,.,', 'grammar.ra', 403 end .,., - # reduce 106 omitted + # reduce 108 omitted -module_eval <<'.,.,', 'grammar.ra', 408 - def _reduce_107( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 414 + def _reduce_109( val, _values, result ) result = ast AST::Else, :statements => val[2] result end .,., - # reduce 108 omitted + # reduce 110 omitted -module_eval <<'.,.,', 'grammar.ra', 420 - def _reduce_109( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 426 + def _reduce_111( val, _values, result ) options = val[3] unless options.instance_of?(AST::ASTArray) options = ast AST::ASTArray, :children => [val[3]] @@ -1370,10 +1391,10 @@ module_eval <<'.,.,', 'grammar.ra', 420 end .,., - # reduce 110 omitted + # reduce 112 omitted -module_eval <<'.,.,', 'grammar.ra', 430 - def _reduce_111( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 436 + def _reduce_113( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push val[1] result = val[0] @@ -1384,15 +1405,15 @@ module_eval <<'.,.,', 'grammar.ra', 430 end .,., -module_eval <<'.,.,', 'grammar.ra', 434 - def _reduce_112( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 440 + def _reduce_114( val, _values, result ) result = ast AST::CaseOpt, :value => val[0], :statements => val[3] result end .,., -module_eval <<'.,.,', 'grammar.ra', 439 - def _reduce_113( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 445 + def _reduce_115( val, _values, result ) result = ast(AST::CaseOpt, :value => val[0], :statements => ast(AST::ASTArray) @@ -1401,10 +1422,10 @@ module_eval <<'.,.,', 'grammar.ra', 439 end .,., - # reduce 114 omitted + # reduce 116 omitted -module_eval <<'.,.,', 'grammar.ra', 449 - def _reduce_115( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 455 + def _reduce_117( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1415,26 +1436,26 @@ module_eval <<'.,.,', 'grammar.ra', 449 end .,., -module_eval <<'.,.,', 'grammar.ra', 453 - def _reduce_116( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 459 + def _reduce_118( val, _values, result ) result = ast AST::Selector, :param => val[0], :values => val[2] result end .,., - # reduce 117 omitted + # reduce 119 omitted -module_eval <<'.,.,', 'grammar.ra', 455 - def _reduce_118( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 461 + def _reduce_120( val, _values, result ) result = val[1] result end .,., - # reduce 119 omitted + # reduce 121 omitted -module_eval <<'.,.,', 'grammar.ra', 466 - def _reduce_120( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 472 + def _reduce_122( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1445,17 +1466,13 @@ module_eval <<'.,.,', 'grammar.ra', 466 end .,., -module_eval <<'.,.,', 'grammar.ra', 470 - def _reduce_121( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 476 + def _reduce_123( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2] result end .,., - # reduce 122 omitted - - # reduce 123 omitted - # reduce 124 omitted # reduce 125 omitted @@ -1466,29 +1483,33 @@ module_eval <<'.,.,', 'grammar.ra', 470 # reduce 128 omitted -module_eval <<'.,.,', 'grammar.ra', 481 - def _reduce_129( val, _values, result ) + # reduce 129 omitted + + # reduce 130 omitted + +module_eval <<'.,.,', 'grammar.ra', 487 + def _reduce_131( val, _values, result ) result = ast AST::Default, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 483 - def _reduce_130( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 489 + def _reduce_132( val, _values, result ) result = [val[0].value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 487 - def _reduce_131( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 493 + def _reduce_133( val, _values, result ) results = val[0] << val[2].value result end .,., -module_eval <<'.,.,', 'grammar.ra', 495 - def _reduce_132( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 501 + def _reduce_134( val, _values, result ) val[1].each do |file| import(file) end @@ -1498,8 +1519,8 @@ module_eval <<'.,.,', 'grammar.ra', 495 end .,., -module_eval <<'.,.,', 'grammar.ra', 505 - def _reduce_133( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 511 + def _reduce_135( val, _values, result ) newdefine classname(val[1]), :arguments => val[2], :code => val[4] @lexer.indefine = false result = nil @@ -1509,8 +1530,8 @@ module_eval <<'.,.,', 'grammar.ra', 505 end .,., -module_eval <<'.,.,', 'grammar.ra', 509 - def _reduce_134( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 515 + def _reduce_136( val, _values, result ) newdefine classname(val[1]), :arguments => val[2] @lexer.indefine = false result = nil @@ -1518,8 +1539,8 @@ module_eval <<'.,.,', 'grammar.ra', 509 end .,., -module_eval <<'.,.,', 'grammar.ra', 517 - def _reduce_135( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 523 + def _reduce_137( val, _values, result ) # Our class gets defined in the parent namespace, not our own. @lexer.namepop newclass classname(val[1]), :code => val[4], :parent => val[2] @@ -1528,8 +1549,8 @@ module_eval <<'.,.,', 'grammar.ra', 517 end .,., -module_eval <<'.,.,', 'grammar.ra', 522 - def _reduce_136( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 528 + def _reduce_138( val, _values, result ) # Our class gets defined in the parent namespace, not our own. @lexer.namepop newclass classname(val[1]), :parent => val[2] @@ -1538,32 +1559,32 @@ module_eval <<'.,.,', 'grammar.ra', 522 end .,., -module_eval <<'.,.,', 'grammar.ra', 527 - def _reduce_137( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 533 + def _reduce_139( val, _values, result ) newnode val[1], :parent => val[2], :code => val[4] result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 530 - def _reduce_138( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 536 + def _reduce_140( val, _values, result ) newnode val[1], :parent => val[2] result = nil result end .,., - # reduce 139 omitted - - # reduce 140 omitted - # reduce 141 omitted # reduce 142 omitted -module_eval <<'.,.,', 'grammar.ra', 544 - def _reduce_143( val, _values, result ) + # reduce 143 omitted + + # reduce 144 omitted + +module_eval <<'.,.,', 'grammar.ra', 550 + def _reduce_145( val, _values, result ) result = val[0] result = [result] unless result.is_a?(Array) result << val[2] @@ -1571,49 +1592,49 @@ module_eval <<'.,.,', 'grammar.ra', 544 end .,., - # reduce 144 omitted - - # reduce 145 omitted - # reduce 146 omitted # reduce 147 omitted -module_eval <<'.,.,', 'grammar.ra', 553 - def _reduce_148( val, _values, result ) + # reduce 148 omitted + + # reduce 149 omitted + +module_eval <<'.,.,', 'grammar.ra', 559 + def _reduce_150( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 557 - def _reduce_149( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 563 + def _reduce_151( val, _values, result ) result = ast AST::ASTArray, :children => [] result end .,., - # reduce 150 omitted + # reduce 152 omitted -module_eval <<'.,.,', 'grammar.ra', 562 - def _reduce_151( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 568 + def _reduce_153( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 566 - def _reduce_152( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 572 + def _reduce_154( val, _values, result ) result = val[1] result = [result] unless result[0].is_a?(Array) result end .,., - # reduce 153 omitted + # reduce 155 omitted -module_eval <<'.,.,', 'grammar.ra', 573 - def _reduce_154( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 579 + def _reduce_156( val, _values, result ) result = val[0] result = [result] unless result[0].is_a?(Array) result << val[2] @@ -1621,67 +1642,67 @@ module_eval <<'.,.,', 'grammar.ra', 573 end .,., -module_eval <<'.,.,', 'grammar.ra', 578 - def _reduce_155( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 584 + def _reduce_157( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 582 - def _reduce_156( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 588 + def _reduce_158( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 584 - def _reduce_157( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 590 + def _reduce_159( val, _values, result ) result = [val[0], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 586 - def _reduce_158( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 592 + def _reduce_160( val, _values, result ) result = [val[0]] result end .,., - # reduce 159 omitted + # reduce 161 omitted -module_eval <<'.,.,', 'grammar.ra', 591 - def _reduce_160( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 597 + def _reduce_162( val, _values, result ) result = val[1] result end .,., - # reduce 161 omitted + # reduce 163 omitted -module_eval <<'.,.,', 'grammar.ra', 596 - def _reduce_162( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 602 + def _reduce_164( val, _values, result ) result = val[1] result end .,., - # reduce 163 omitted + # reduce 165 omitted - # reduce 164 omitted + # reduce 166 omitted -module_eval <<'.,.,', 'grammar.ra', 602 - def _reduce_165( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 608 + def _reduce_167( val, _values, result ) result = ast AST::Variable, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 610 - def _reduce_166( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 616 + def _reduce_168( val, _values, result ) if val[1].instance_of?(AST::ASTArray) result = val[1] else @@ -1691,21 +1712,21 @@ module_eval <<'.,.,', 'grammar.ra', 610 end .,., -module_eval <<'.,.,', 'grammar.ra', 612 - def _reduce_167( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 618 + def _reduce_169( val, _values, result ) result = ast AST::ASTArray result end .,., - # reduce 168 omitted + # reduce 170 omitted - # reduce 169 omitted + # reduce 171 omitted - # reduce 170 omitted + # reduce 172 omitted -module_eval <<'.,.,', 'grammar.ra', 617 - def _reduce_171( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 623 + def _reduce_173( val, _values, result ) result = nil result end diff --git a/lib/puppet/parser/parser_support.rb b/lib/puppet/parser/parser_support.rb index d70722fdd..853d6aa86 100644 --- a/lib/puppet/parser/parser_support.rb +++ b/lib/puppet/parser/parser_support.rb @@ -95,11 +95,10 @@ class Puppet::Parser::Parser raise Puppet::Error, "Could not find file %s" % file end end - if @files.detect { |f| f.file == file } - raise Puppet::AlreadyImportedError.new("Import loop detected") - else - @files << Puppet::Util::LoadedFile.new(file) + if check_and_add_to_watched_files(file) @lexer.file = file + else + raise Puppet::AlreadyImportedError.new("Import loop detected") end end @@ -216,7 +215,7 @@ class Puppet::Parser::Parser # Initialize or reset all of our variables. def initvars @lexer = Puppet::Parser::Lexer.new() - @files = [] + @files = {} @loaded = [] end @@ -435,8 +434,8 @@ class Puppet::Parser::Parser # See if any of the files have changed. def reparse? - if file = @files.detect { |file| file.changed? } - return file.stamp + if file = @files.detect { |name, file| file.changed? } + return file[1].stamp else return false end @@ -449,12 +448,18 @@ class Puppet::Parser::Parser # Add a new file to be checked when we're checking to see if we should be # reparsed. This is basically only used by the TemplateWrapper to let the # parser know about templates that should be parsed. - def watch_file(*files) - files.each do |file| - unless file.is_a? Puppet::Util::LoadedFile - file = Puppet::Util::LoadedFile.new(file) - end - @files << file + def watch_file(filename) + check_and_add_to_watched_files(filename) + end + + private + + def check_and_add_to_watched_files(filename) + unless @files.include?(filename) + @files[filename] = Puppet::Util::LoadedFile.new(filename) + return true + else + return false end end end diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb index d214a60ee..747338b3b 100644 --- a/lib/puppet/parser/resource.rb +++ b/lib/puppet/parser/resource.rb @@ -369,7 +369,7 @@ class Puppet::Parser::Resource next unless val = scope.lookupvar(name.to_s, false) and val != :undefined # The default case: just set the value - return set_parameter(name, val) unless @params[name] + set_parameter(name, val) and next unless @params[name] # For relationship params, though, join the values (a la #446). @params[name].value = [@params[name].value, val].flatten diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb index 32b127a6b..1ff998d96 100644 --- a/lib/puppet/parser/scope.rb +++ b/lib/puppet/parser/scope.rb @@ -260,11 +260,15 @@ class Puppet::Parser::Scope # Set a variable in the current scope. This will override settings # in scopes above, but will not allow variables in the current scope # to be reassigned. - def setvar(name,value, file = nil, line = nil) - #Puppet.debug "Setting %s to '%s' at level %s" % - # [name.inspect,value,self.level] + def setvar(name,value, file = nil, line = nil, append = false) + #Puppet.debug "Setting %s to '%s' at level %s mode append %s" % + # [name.inspect,value,self.level, append] if @symtable.include?(name) - error = Puppet::ParseError.new("Cannot reassign variable %s" % name) + unless append + error = Puppet::ParseError.new("Cannot reassign variable %s" % name) + else + error = Puppet::ParseError.new("Cannot append, variable %s is defined in this scope" % name) + end if file error.file = file end @@ -273,7 +277,19 @@ class Puppet::Parser::Scope end raise error end - @symtable[name] = value + + unless append + @symtable[name] = value + else # append case + # lookup the value in the scope if it exists and insert the var + @symtable[name] = lookupvar(name) + # concatenate if string, append if array, nothing for other types + if value.is_a?(Array) + @symtable[name] += value + else + @symtable[name] << value + end + end end # Return an interpolated string. |