summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/ast/vardef.rb4
-rw-r--r--lib/puppet/parser/collector.rb3
-rw-r--r--lib/puppet/parser/functions.rb224
-rw-r--r--lib/puppet/parser/functions/defined.rb27
-rw-r--r--lib/puppet/parser/functions/fail.rb4
-rw-r--r--lib/puppet/parser/functions/file.rb21
-rw-r--r--lib/puppet/parser/functions/fqdn_rand.rb15
-rw-r--r--lib/puppet/parser/functions/generate.rb35
-rw-r--r--lib/puppet/parser/functions/include.rb26
-rw-r--r--lib/puppet/parser/functions/realize.rb14
-rw-r--r--lib/puppet/parser/functions/search.rb7
-rw-r--r--lib/puppet/parser/functions/sha1.rb6
-rw-r--r--lib/puppet/parser/functions/tag.rb6
-rw-r--r--lib/puppet/parser/functions/tagged.rb18
-rw-r--r--lib/puppet/parser/functions/template.rb22
-rw-r--r--lib/puppet/parser/grammar.ra8
-rw-r--r--lib/puppet/parser/lexer.rb1
-rw-r--r--lib/puppet/parser/parser.rb1437
-rw-r--r--lib/puppet/parser/parser_support.rb31
-rw-r--r--lib/puppet/parser/resource.rb2
-rw-r--r--lib/puppet/parser/scope.rb26
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.