summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2005-09-22 23:24:20 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2005-09-22 23:24:20 +0000
commit781c69b7d2c2a70b794d4fccb011c68e4d7a4950 (patch)
tree63bcc54688d52eedf415d1912eeee35737325563 /lib/puppet/parser
parent400b1034348b5218a0234bfdfd94d253f98f5b84 (diff)
downloadpuppet-781c69b7d2c2a70b794d4fccb011c68e4d7a4950.tar.gz
puppet-781c69b7d2c2a70b794d4fccb011c68e4d7a4950.tar.xz
puppet-781c69b7d2c2a70b794d4fccb011c68e4d7a4950.zip
The new "include" syntax works now.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@700 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/ast.rb290
-rw-r--r--lib/puppet/parser/grammar.ra67
-rw-r--r--lib/puppet/parser/interpreter.rb2
-rw-r--r--lib/puppet/parser/lexer.rb13
-rw-r--r--lib/puppet/parser/parser.rb737
-rw-r--r--lib/puppet/parser/scope.rb4
6 files changed, 646 insertions, 467 deletions
diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
index 897de71e9..5d1b5c47d 100644
--- a/lib/puppet/parser/ast.rb
+++ b/lib/puppet/parser/ast.rb
@@ -342,6 +342,21 @@ module Puppet
return @params[index]
end
+ # Auto-generate a name
+ def autoname(type, object)
+ case object
+ when Puppet::Type:
+ raise Puppet::Error,
+ "Built-in types must be provided with a name"
+ when HostClass:
+ return type
+ else
+ Puppet.info "Autogenerating name for object of type %s" %
+ type
+ return [type, "-", self.object_id].join("")
+ end
+ end
+
# Iterate across all of our children.
def each
[@type,@name,@params].flatten.each { |param|
@@ -357,38 +372,11 @@ module Puppet
# Get our type and name.
objtype = @type.safeevaluate(scope)
- objnames = @name.safeevaluate(scope)
-
- # first, retrieve the defaults
- begin
- defaults = scope.lookupdefaults(objtype)
- if defaults.length > 0
- Puppet.debug "Got defaults for %s: %s" %
- [objtype,defaults.inspect]
- end
- rescue => detail
- raise Puppet::DevError,
- "Could not lookup defaults for %s: %s" %
- [objtype, detail.to_s]
- end
-
- # Add any found defaults to our argument list
- defaults.each { |var,value|
- Puppet.debug "Found default %s for %s" %
- [var,objtype]
-
- hash[var] = value
- }
- # then set all of the specified params
- @params.each { |param|
- ary = param.safeevaluate(scope)
- hash[ary[0]] = ary[1]
- }
-
- # it's easier to always use an array, even for only one name
- unless objnames.is_a?(Array)
- objnames = [objnames]
+ # If the type was a variable, we wouldn't have typechecked yet.
+ # Do it now, if so.
+ unless @checked
+ self.typecheck(objtype)
end
# See if our object was defined
@@ -406,10 +394,10 @@ module Puppet
raise error
end
- # If not, verify that it's a builtin type
unless object
+ # If not, verify that it's a builtin type
begin
- Puppet::Type.type(objtype)
+ object = Puppet::Type.type(objtype)
rescue TypeError
# otherwise, the user specified an invalid type
error = Puppet::ParseError.new(
@@ -421,14 +409,33 @@ module Puppet
end
end
+ # Autogenerate the name if one was not passed.
+ if defined? @name
+ objnames = @name.safeevaluate(scope)
+ else
+ objnames = self.autoname(objtype, object)
+ end
+
+ # it's easier to always use an array, even for only one name
+ unless objnames.is_a?(Array)
+ objnames = [objnames]
+ end
+
+ # Retrieve the defaults for our type
+ hash = getdefaults(objtype, scope)
+
+ # then set all of the specified params
+ @params.each { |param|
+ ary = param.safeevaluate(scope)
+ hash[ary[0]] = ary[1]
+ }
+
# this is where our implicit iteration takes place;
# if someone passed an array as the name, then we act
# just like the called us many times
objnames.collect { |objname|
- # if the type is not defined in our scope, we assume
- # that it's a type that the client will understand, so we
- # just store it in our objectable
- if object.nil?
+ # If the object is a class, that means it's a builtin type
+ if object.is_a?(Class)
begin
Puppet.debug(
("Setting object '%s' " +
@@ -464,93 +471,109 @@ module Puppet
}.reject { |obj| obj.nil? }
end
+ # Retrieve the defaults for our type
+ def getdefaults(objtype, scope)
+ # first, retrieve the defaults
+ begin
+ defaults = scope.lookupdefaults(objtype)
+ if defaults.length > 0
+ Puppet.debug "Got defaults for %s: %s" %
+ [objtype,defaults.inspect]
+ end
+ rescue => detail
+ raise Puppet::DevError,
+ "Could not lookup defaults for %s: %s" %
+ [objtype, detail.to_s]
+ end
+
+ hash = {}
+ # Add any found defaults to our argument list
+ defaults.each { |var,value|
+ Puppet.debug "Found default %s for %s" %
+ [var,objtype]
+
+ hash[var] = value
+ }
+
+ return hash
+ end
+
# Create our ObjectDef. Handles type checking for us.
def initialize(hash)
+ @checked = false
super
- # we don't have to evaluate because we require bare words
- # for types
- objtype = @type.value
+ if @type.is_a?(Variable)
+ Puppet.debug "Delaying typecheck"
+ return
+ else
+ self.typecheck(@type.value)
- # This will basically always be on, but I wanted to make it at
- # least simple to turn off if it came to that
- if Puppet[:typecheck]
- builtin = false
- begin
- builtin = Puppet::Type.type(objtype)
- rescue TypeError
- # nothing; we've already set builtin to false
- end
- if builtin
- # we're a builtin type
- # like :typecheck, this always defaults to on, but
- # at least it's easy to turn off if necessary
- if Puppet[:paramcheck]
- # Verify that each param is valid
- @params.each { |param|
- unless param.is_a?(AST::ObjectParam)
- raise Puppet::DevError,
- "Got something other than param"
- end
- begin
- pname = param.param.value
- rescue => detail
- raise Puppet::DevError, detail.to_s
- end
- next if pname == "name" # always allow these
- unless builtin.validarg?(pname)
- error = Puppet::ParseError.new(
- "Invalid parameter '%s' for type '%s'" %
- [pname,objtype]
- )
- error.stack = caller
- error.line = self.line
- error.file = self.file
- raise error
- end
- }
- end
- # Find the defined type and verify arguments are valid.
- # FIXME this should use scoping rules to find the set type,
- # not a global list
- elsif @@settypes.include?(objtype)
- # we've defined it locally
- Puppet.debug "%s is a defined type" % objtype
-
- # this is somewhat hackish, using a global type list...
- type = @@settypes[objtype]
- @params.each { |param|
- # FIXME we might need to do more here eventually...
- if Puppet::Type.metaparam?(param.param.value.intern)
- next
- end
+ objtype = @type.value
+ end
- begin
- pname = param.param.value
- rescue => detail
- raise Puppet::DevError, detail.to_s
- end
- unless type.validarg?(pname)
- error = Puppet::ParseError.new(
- "Invalid parameter '%s' for type '%s'" %
- [pname,objtype]
- )
- error.stack = caller
- error.line = self.line
- error.file = self.file
- raise error
- end
- }
+ end
+
+ # Verify that all passed parameters are valid
+ def paramcheck(builtin, objtype)
+ # This defaults to true
+ unless Puppet[:paramcheck]
+ return
+ end
+
+ @params.each { |param|
+ if builtin
+ self.parambuiltincheck(builtin, param)
else
- # we don't know anything about it
- error = Puppet::ParseError.new(
- "Unknown type '%s'" % objtype
- )
- error.line = self.line
- error.file = self.file
- error.stack = caller
- raise error
+ self.paramdefinedcheck(objtype, param)
end
+ }
+ end
+
+ def parambuiltincheck(type, param)
+ unless param.is_a?(AST::ObjectParam)
+ raise Puppet::DevError,
+ "Got something other than param"
+ end
+ begin
+ pname = param.param.value
+ rescue => detail
+ raise Puppet::DevError, detail.to_s
+ end
+ next if pname == "name" # always allow these
+ unless type.validarg?(pname)
+ error = Puppet::ParseError.new(
+ "Invalid parameter '%s' for type '%s'" %
+ [pname,type.name]
+ )
+ error.stack = caller
+ error.line = self.line
+ error.file = self.file
+ raise error
+ end
+ end
+
+ def paramdefinedcheck(objtype, param)
+ # FIXME we might need to do more here eventually...
+ if Puppet::Type.metaparam?(param.param.value.intern)
+ next
+ end
+
+ begin
+ pname = param.param.value
+ rescue => detail
+ raise Puppet::DevError, detail.to_s
+ end
+
+ unless @@settypes[objtype].validarg?(pname)
+ error = Puppet::ParseError.new(
+ "Invalid parameter '%s' for type '%s'" %
+ [pname,objtype]
+ )
+ error.stack = caller
+ error.line = self.line
+ error.file = self.file
+ raise error
end
end
@@ -588,6 +611,41 @@ module Puppet
].join("\n")
end
+ # Verify that the type is valid. This throws an error if there's
+ # a problem, so the return value doesn't matter
+ def typecheck(objtype)
+ # This will basically always be on, but I wanted to make it at
+ # least simple to turn off if it came to that
+ unless Puppet[:typecheck]
+ return
+ end
+
+ builtin = false
+ begin
+ builtin = Puppet::Type.type(objtype)
+ rescue TypeError
+ # nothing; we've already set builtin to false
+ end
+
+ unless builtin or @@settypes.include?(objtype)
+ error = Puppet::ParseError.new(
+ "Unknown type '%s'" % objtype
+ )
+ error.line = self.line
+ error.file = self.file
+ error.stack = caller
+ raise error
+ end
+
+ unless builtin
+ Puppet.debug "%s is a defined type" % objtype
+ end
+
+ self.paramcheck(builtin, objtype)
+
+ @checked = true
+ end
+
def to_s
return "%s => { %s }" % [@name,
@params.collect { |param|
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index 95ffa9772..bbc679f78 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -10,7 +10,7 @@ class Puppet::Parser::Parser
token LBRACK QTEXT RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE FALSE EQUALS
token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL NOTEQUAL
token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN DOT COLON TYPE
-token NAME SEMIC CASE DEFAULT
+token NAME SEMIC CASE DEFAULT INCLUDE
rule
program: statements {
@@ -58,10 +58,48 @@ statement: object
| assignment
| casestatement
| import
+ | include
| definition
| hostclass
| nodedef
-
+
+# Includes are just syntactic sugar for classes with no names and
+# no
+include: INCLUDE classnames {
+ classnames = aryfy(val[1])
+
+ klasses = []
+
+ # Now just iterate over each of the class names and create a new
+ # object instance. FIXME This should probably eventually include
+ # some kind of checking that the asked-for class is a defined class.
+ classnames.each { |classname|
+ emptyary = AST::ASTArray.new(:children => [])
+ klasses << AST::ObjectDef.new(
+ :pin => "{}",
+ :line => @lexer.line,
+ :file => @lexer.file,
+ :type => classname,
+ :params => emptyary
+ )
+ }
+ result = AST::ASTArray.new(
+ :line => @lexer.line,
+ :file => @lexer.file,
+ :children => klasses
+ )
+}
+
+classnames: classname
+ | classnames COMMA classname {
+ result = aryfy(val[0], val[2])
+ result.line = @lexer.line
+ result.file = @lexer.file
+}
+
+classname: name
+ | variable
+
#object: name LBRACE objectname COLON params endcomma RBRACE {
object: name LBRACE objectinstances endsemi RBRACE {
if val[0].is_a?(AST::ASTArray)
@@ -99,19 +137,12 @@ object: name LBRACE objectinstances endsemi RBRACE {
# an object but without a name
# this cannot be an instance of a library type
- # make a unique name for bookkeeping purposes
- name = AST::Name.new(
- :line => @lexer.line,
- :file => @lexer.file,
- :value => [val[0].value, "-", val[0].object_id].join('')
- )
-
+ # the objects will autogenerate a name if we don't provide one
result = AST::ObjectDef.new(
:pin => "{}",
:line => @lexer.line,
:file => @lexer.file,
:type => val[0],
- :name => name,
:params => val[2]
)
} | type LBRACE params endcomma RBRACE {
@@ -606,6 +637,22 @@ Puppet[:paramcheck] = true
---- inner ----
attr_reader :file, :files
+# Create an AST array out of all of the args
+def aryfy(*args)
+ if args[0].is_a?(AST::ASTArray)
+ result = args.shift
+ args.each { |arg|
+ args.push arg
+ }
+ else
+ result = AST::ASTArray.new(
+ :children => args
+ )
+ end
+
+ return result
+end
+
def file=(file)
unless FileTest.exists?(file)
raise Puppet::Error, "Could not find file %s" % file
diff --git a/lib/puppet/parser/interpreter.rb b/lib/puppet/parser/interpreter.rb
index 2b036018f..cd7ac46d6 100644
--- a/lib/puppet/parser/interpreter.rb
+++ b/lib/puppet/parser/interpreter.rb
@@ -23,10 +23,8 @@ module Puppet
@file = hash[:Manifest]
if hash.include?(:UseNodes)
- Puppet.warning "Usenodes is %s" % hash[:UseNodes]
@usenodes = hash[:UseNodes]
else
- Puppet.warning "Usenodes is missing"
@usenodes = true
end
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
index 371960c91..2918d3947 100644
--- a/lib/puppet/parser/lexer.rb
+++ b/lib/puppet/parser/lexer.rb
@@ -48,16 +48,17 @@ module Puppet
}
@@keywords = {
- "import" => :IMPORT,
- "class" => :CLASS,
- "node" => :NODE,
- "host" => :NODE,
"case" => :CASE,
- "true" => :BOOLEAN,
+ "class" => :CLASS,
"default" => :DEFAULT,
+ "define" => :DEFINE,
"false" => :BOOLEAN,
+ "host" => :NODE,
+ "import" => :IMPORT,
+ "include" => :INCLUDE,
"inherits" => :INHERITS,
- "define" => :DEFINE
+ "node" => :NODE,
+ "true" => :BOOLEAN
}
# scan the whole file
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index 6115dee4b..94fd83cfb 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -32,9 +32,25 @@ module Puppet
class Parser < Racc::Parser
-module_eval <<'..end grammar.ra modeval..id859845cfb5', 'grammar.ra', 607
+module_eval <<'..end grammar.ra modeval..id9e2c7fc335', 'grammar.ra', 638
attr_reader :file, :files
+# Create an AST array out of all of the args
+def aryfy(*args)
+ if args[0].is_a?(AST::ASTArray)
+ result = args.shift
+ args.each { |arg|
+ args.push arg
+ }
+ else
+ result = AST::ASTArray.new(
+ :children => args
+ )
+ end
+
+ return result
+end
+
def file=(file)
unless FileTest.exists?(file)
raise Puppet::Error, "Could not find file %s" % file
@@ -128,244 +144,258 @@ end
def string=(string)
@lexer.string = string
end
-..end grammar.ra modeval..id859845cfb5
+..end grammar.ra modeval..id9e2c7fc335
##### racc 1.4.4 generates ###
racc_reduce_table = [
0, 0, :racc_error,
- 1, 40, :_reduce_1,
- 1, 41, :_reduce_none,
- 2, 41, :_reduce_3,
- 1, 42, :_reduce_none,
+ 1, 41, :_reduce_1,
1, 42, :_reduce_none,
- 1, 42, :_reduce_none,
- 1, 42, :_reduce_none,
- 1, 42, :_reduce_none,
- 1, 42, :_reduce_none,
- 1, 42, :_reduce_none,
- 5, 43, :_reduce_11,
- 5, 43, :_reduce_12,
- 5, 43, :_reduce_13,
- 3, 56, :_reduce_14,
- 1, 51, :_reduce_none,
- 3, 51, :_reduce_16,
- 0, 52, :_reduce_none,
+ 2, 42, :_reduce_3,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 1, 43, :_reduce_none,
+ 2, 48, :_reduce_12,
1, 52, :_reduce_none,
- 1, 50, :_reduce_19,
- 1, 55, :_reduce_20,
- 1, 57, :_reduce_none,
- 1, 57, :_reduce_none,
- 1, 57, :_reduce_none,
+ 3, 52, :_reduce_14,
+ 1, 53, :_reduce_none,
+ 1, 53, :_reduce_none,
+ 5, 44, :_reduce_17,
+ 5, 44, :_reduce_18,
+ 5, 44, :_reduce_19,
+ 3, 61, :_reduce_20,
+ 1, 56, :_reduce_none,
+ 3, 56, :_reduce_22,
+ 0, 57, :_reduce_none,
1, 57, :_reduce_none,
- 1, 57, :_reduce_none,
- 1, 57, :_reduce_none,
- 3, 44, :_reduce_27,
- 0, 53, :_reduce_28,
- 1, 53, :_reduce_29,
- 3, 53, :_reduce_30,
- 3, 63, :_reduce_31,
- 1, 64, :_reduce_none,
- 3, 64, :_reduce_33,
- 1, 62, :_reduce_none,
- 1, 62, :_reduce_none,
- 1, 62, :_reduce_none,
+ 1, 54, :_reduce_25,
+ 1, 60, :_reduce_26,
1, 62, :_reduce_none,
1, 62, :_reduce_none,
1, 62, :_reduce_none,
1, 62, :_reduce_none,
1, 62, :_reduce_none,
1, 62, :_reduce_none,
- 1, 58, :_reduce_43,
- 1, 66, :_reduce_44,
- 4, 67, :_reduce_45,
- 5, 45, :_reduce_46,
+ 3, 45, :_reduce_33,
+ 0, 58, :_reduce_34,
+ 1, 58, :_reduce_35,
+ 3, 58, :_reduce_36,
+ 3, 67, :_reduce_37,
1, 68, :_reduce_none,
- 2, 68, :_reduce_48,
- 5, 69, :_reduce_49,
- 1, 70, :_reduce_none,
- 3, 70, :_reduce_51,
- 3, 59, :_reduce_52,
+ 3, 68, :_reduce_39,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 66, :_reduce_none,
+ 1, 63, :_reduce_49,
+ 1, 70, :_reduce_50,
+ 4, 71, :_reduce_51,
+ 5, 46, :_reduce_52,
1, 72, :_reduce_none,
- 3, 72, :_reduce_54,
+ 2, 72, :_reduce_54,
+ 5, 73, :_reduce_55,
1, 74, :_reduce_none,
- 3, 74, :_reduce_56,
- 3, 73, :_reduce_57,
- 1, 71, :_reduce_58,
- 1, 71, :_reduce_59,
- 1, 71, :_reduce_60,
- 1, 71, :_reduce_61,
- 1, 71, :_reduce_none,
- 2, 46, :_reduce_63,
- 6, 47, :_reduce_64,
- 6, 48, :_reduce_65,
- 5, 49, :_reduce_66,
- 1, 77, :_reduce_none,
- 2, 77, :_reduce_68,
- 0, 78, :_reduce_69,
+ 3, 74, :_reduce_57,
+ 3, 64, :_reduce_58,
+ 1, 76, :_reduce_none,
+ 3, 76, :_reduce_60,
+ 1, 78, :_reduce_none,
+ 3, 78, :_reduce_62,
+ 3, 77, :_reduce_63,
+ 1, 75, :_reduce_64,
+ 1, 75, :_reduce_65,
+ 1, 75, :_reduce_66,
+ 1, 75, :_reduce_67,
1, 75, :_reduce_none,
- 3, 75, :_reduce_71,
- 3, 75, :_reduce_72,
+ 2, 47, :_reduce_69,
+ 6, 49, :_reduce_70,
+ 6, 50, :_reduce_71,
+ 5, 51, :_reduce_72,
+ 1, 81, :_reduce_none,
+ 2, 81, :_reduce_74,
+ 0, 82, :_reduce_75,
1, 79, :_reduce_none,
- 3, 79, :_reduce_74,
- 3, 80, :_reduce_75,
- 1, 80, :_reduce_76,
- 1, 76, :_reduce_none,
- 2, 76, :_reduce_78,
- 1, 60, :_reduce_79,
- 3, 61, :_reduce_80,
- 1, 65, :_reduce_none,
- 1, 65, :_reduce_none,
- 0, 54, :_reduce_none,
- 1, 54, :_reduce_84 ]
-
-racc_reduce_n = 85
-
-racc_shift_n = 143
+ 3, 79, :_reduce_77,
+ 3, 79, :_reduce_78,
+ 1, 83, :_reduce_none,
+ 3, 83, :_reduce_80,
+ 3, 84, :_reduce_81,
+ 1, 84, :_reduce_82,
+ 1, 80, :_reduce_none,
+ 2, 80, :_reduce_84,
+ 1, 55, :_reduce_85,
+ 3, 65, :_reduce_86,
+ 1, 69, :_reduce_none,
+ 1, 69, :_reduce_none,
+ 0, 59, :_reduce_none,
+ 1, 59, :_reduce_90 ]
+
+racc_reduce_n = 91
+
+racc_shift_n = 151
racc_action_table = [
- 89, 123, 89, 112, 134, 119, 83, 84, 89, 111,
- 89, 54, 92, 74, 40, 102, 89, 75, 89, 121,
- 103, 75, 72, 74, 71, 122, 45, 109, 36, 110,
- 36, 87, 88, 87, 88, 90, 36, 90, 36, 87,
- 88, 87, 88, 90, 36, 90, 36, 87, 88, 87,
- 88, 90, 6, 90, 27, 28, 27, 28, 82, 100,
- 113, 58, 83, 84, 55, 27, 28, 27, 28, 116,
- 27, 28, 6, 101, 53, 21, 27, 28, 49, 31,
- 45, 31, 45, 36, 127, 36, 3, 6, 3, 6,
- 31, 128, 31, 6, 36, 31, 36, 3, 6, 3,
- 6, 31, 3, 6, 6, 36, 27, 28, 3, 6,
- 41, 27, 28, 40, 39, 81, 27, 28, 136, 38,
- 23, 27, 28, 139, 22, 21, 45, 53, nil, nil,
- nil, 31, nil, nil, nil, 36, 31, 132, 3, 6,
- nil, 31, nil, 3, 62, 36, 31, nil, 3, 6,
- 36, 138, nil, 3, 6, 5, 8, nil, 12, 14,
- nil, 17, nil, nil, nil, 3, 6, 129, 10, 5,
- 8, nil, 12, 14, nil, 17, nil, nil, nil, 3,
- 6, 142, 10, nil, nil, 5, 8, nil, 12, 14,
- nil, 17, nil, nil, nil, 3, 6, nil, 10, 5,
- 8, nil, 12, 14, nil, 17, nil, nil, nil, 3,
- 6, nil, 10, 5, 8, nil, 12, 14, nil, 17,
- nil, nil, nil, 3, 6, nil, 10, 5, 8, nil,
- 12, 14, nil, 17, nil, nil, nil, 3, 6, nil,
- 10, 5, 8, nil, 12, 14, nil, 17, nil, nil,
- nil, 3, 6, nil, 10, 5, 8, nil, 12, 14,
- nil, 17, nil, nil, nil, 3, 6, nil, 10, 5,
- 8, nil, 12, 14, nil, 17, nil, nil, nil, 3,
- 6, nil, 10, 5, 8, nil, 12, 14, nil, 17,
- nil, nil, nil, 3, 6, nil, 10 ]
+ 88, 123, 88, 118, 96, 31, 31, 52, 88, 117,
+ 88, 120, 107, 5, 5, 100, 88, 106, 88, 101,
+ 102, 55, 112, 58, 67, 122, 50, 104, 35, 106,
+ 35, 86, 87, 86, 87, 90, 35, 90, 35, 86,
+ 87, 86, 87, 90, 35, 90, 35, 86, 87, 86,
+ 87, 90, 133, 90, 5, 144, 114, 101, 102, 104,
+ 116, 40, 119, 55, 54, 108, 126, 50, 138, 128,
+ 4, 7, 61, 11, 14, 130, 18, 28, 29, 61,
+ 2, 5, 66, 9, 48, 15, 4, 7, 134, 11,
+ 14, 5, 18, 28, 29, 136, 2, 5, 61, 9,
+ 5, 15, 31, 28, 29, 28, 29, 5, 41, 2,
+ 5, 141, 40, 81, 28, 29, 28, 29, 31, 39,
+ 24, 147, 35, 65, 23, 2, 5, 61, 31, 69,
+ 31, nil, 35, 146, 35, 2, 5, 2, 5, 31,
+ nil, 31, nil, 35, 28, 29, 2, 5, 2, 72,
+ nil, 4, 7, nil, 11, 14, nil, 18, 28, 29,
+ nil, 2, 5, nil, 9, nil, 15, nil, nil, 31,
+ nil, nil, nil, 35, 150, nil, 2, 5, nil, 28,
+ 29, 28, 29, 31, nil, nil, nil, 35, nil, nil,
+ 2, 5, 4, 7, nil, 11, 14, nil, 18, nil,
+ nil, nil, 2, 5, 31, 9, 31, 15, 35, nil,
+ 35, 2, 5, 2, 5, 4, 7, nil, 11, 14,
+ nil, 18, nil, nil, nil, 2, 5, nil, 9, nil,
+ 15, 4, 7, nil, 11, 14, nil, 18, nil, nil,
+ nil, 2, 5, nil, 9, nil, 15, 4, 7, nil,
+ 11, 14, nil, 18, nil, nil, nil, 2, 5, nil,
+ 9, nil, 15, 4, 7, nil, 11, 14, nil, 18,
+ nil, nil, nil, 2, 5, nil, 9, nil, 15, 4,
+ 7, nil, 11, 14, nil, 18, nil, nil, nil, 2,
+ 5, nil, 9, nil, 15, 4, 7, nil, 11, 14,
+ nil, 18, nil, nil, nil, 2, 5, nil, 9, nil,
+ 15 ]
racc_action_check = [
- 92, 98, 55, 78, 118, 95, 118, 118, 135, 78,
- 53, 34, 53, 62, 34, 63, 96, 47, 123, 96,
- 69, 70, 42, 45, 41, 98, 75, 76, 92, 77,
- 55, 92, 92, 55, 55, 92, 135, 55, 53, 135,
- 135, 53, 53, 135, 96, 53, 123, 96, 96, 123,
- 123, 96, 42, 123, 54, 54, 116, 116, 52, 58,
- 80, 39, 52, 52, 35, 113, 113, 10, 10, 91,
- 103, 103, 49, 59, 32, 25, 85, 85, 23, 54,
- 102, 116, 21, 54, 104, 116, 54, 54, 116, 116,
- 113, 105, 10, 17, 113, 103, 10, 113, 113, 10,
- 10, 85, 103, 103, 112, 85, 74, 74, 85, 85,
- 16, 40, 40, 15, 14, 50, 27, 27, 122, 12,
- 8, 38, 38, 125, 5, 1, 139, 66, nil, nil,
- nil, 74, nil, nil, nil, 74, 40, 114, 74, 74,
- nil, 27, nil, 40, 40, 27, 38, nil, 27, 27,
- 38, 124, nil, 38, 38, 114, 114, nil, 114, 114,
- nil, 114, nil, nil, nil, 114, 114, 106, 114, 124,
- 124, nil, 124, 124, nil, 124, nil, nil, nil, 124,
- 124, 141, 124, nil, nil, 106, 106, nil, 106, 106,
- nil, 106, nil, nil, nil, 106, 106, nil, 106, 141,
- 141, nil, 141, 141, nil, 141, nil, nil, nil, 141,
- 141, nil, 141, 72, 72, nil, 72, 72, nil, 72,
- nil, nil, nil, 72, 72, nil, 72, 101, 101, nil,
- 101, 101, nil, 101, nil, nil, nil, 101, 101, nil,
- 101, 18, 18, nil, 18, 18, nil, 18, nil, nil,
- nil, 18, 18, nil, 18, 136, 136, nil, 136, 136,
- nil, 136, nil, nil, nil, 136, 136, nil, 136, 81,
- 81, nil, 81, 81, nil, 81, nil, nil, nil, 81,
- 81, nil, 81, 0, 0, nil, 0, 0, nil, 0,
- nil, nil, nil, 0, 0, nil, 0 ]
+ 143, 93, 55, 83, 55, 15, 66, 24, 91, 83,
+ 96, 91, 63, 15, 66, 57, 54, 62, 123, 57,
+ 57, 70, 71, 38, 46, 93, 38, 72, 143, 73,
+ 55, 143, 143, 55, 55, 143, 91, 55, 96, 91,
+ 91, 96, 96, 91, 54, 96, 123, 54, 54, 123,
+ 123, 54, 110, 123, 46, 125, 76, 125, 125, 61,
+ 82, 33, 85, 26, 25, 65, 97, 21, 115, 103,
+ 110, 110, 40, 110, 110, 105, 110, 112, 112, 106,
+ 110, 110, 43, 110, 19, 110, 115, 115, 111, 115,
+ 115, 18, 115, 119, 119, 113, 115, 115, 114, 115,
+ 52, 115, 112, 104, 104, 126, 126, 118, 14, 112,
+ 112, 122, 12, 51, 9, 9, 50, 50, 119, 11,
+ 7, 137, 119, 41, 4, 119, 119, 147, 104, 48,
+ 126, nil, 104, 132, 126, 104, 104, 126, 126, 9,
+ nil, 50, nil, 9, 28, 28, 9, 9, 50, 50,
+ nil, 132, 132, nil, 132, 132, nil, 132, 58, 58,
+ nil, 132, 132, nil, 132, nil, 132, nil, nil, 28,
+ nil, nil, nil, 28, 148, nil, 28, 28, nil, 39,
+ 39, 99, 99, 58, nil, nil, nil, 58, nil, nil,
+ 58, 58, 148, 148, nil, 148, 148, nil, 148, nil,
+ nil, nil, 148, 148, 39, 148, 99, 148, 39, nil,
+ 99, 39, 39, 99, 99, 107, 107, nil, 107, 107,
+ nil, 107, nil, nil, nil, 107, 107, nil, 107, nil,
+ 107, 0, 0, nil, 0, 0, nil, 0, nil, nil,
+ nil, 0, 0, nil, 0, nil, 0, 141, 141, nil,
+ 141, 141, nil, 141, nil, nil, nil, 141, 141, nil,
+ 141, nil, 141, 67, 67, nil, 67, 67, nil, 67,
+ nil, nil, nil, 67, 67, nil, 67, nil, 67, 20,
+ 20, nil, 20, 20, nil, 20, nil, nil, nil, 20,
+ 20, nil, 20, nil, 20, 81, 81, nil, 81, 81,
+ nil, 81, nil, nil, nil, 81, 81, nil, 81, nil,
+ 81 ]
racc_action_pointer = [
- 259, 120, nil, nil, nil, 121, nil, nil, 85, nil,
- 65, nil, 107, nil, 79, 108, 110, 58, 217, nil,
- nil, 47, nil, 64, nil, 70, nil, 114, nil, nil,
- nil, nil, 61, nil, 9, 59, nil, nil, 119, 32,
- 109, 24, 17, nil, nil, 15, nil, 8, nil, 37,
- 110, nil, 54, 7, 52, -1, nil, nil, 24, 68,
- nil, nil, 5, -18, nil, nil, 114, nil, nil, -16,
- 12, nil, 189, nil, 104, -9, 21, 14, -6, nil,
- 48, 245, nil, nil, nil, 74, nil, nil, nil, nil,
- nil, 61, -3, nil, nil, 1, 13, nil, -8, nil,
- nil, 203, 45, 68, 78, 85, 161, nil, nil, nil,
- nil, nil, 69, 63, 131, nil, 54, nil, -2, nil,
- nil, nil, 113, 15, 145, 114, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, 5, 231, nil, nil, 91,
- nil, 175, nil ]
+ 207, nil, nil, nil, 121, nil, nil, 85, nil, 112,
+ nil, 107, 107, nil, 73, -22, nil, nil, 56, 84,
+ 255, 62, nil, nil, -7, 59, 50, nil, 142, nil,
+ nil, nil, nil, 56, nil, nil, nil, nil, 21, 177,
+ 37, 94, nil, 73, nil, nil, 19, nil, 129, nil,
+ 114, 108, 65, nil, 13, -1, nil, 11, 156, nil,
+ nil, 51, 8, 7, nil, 30, -21, 239, nil, nil,
+ 8, -14, 19, 20, nil, nil, 23, nil, nil, nil,
+ nil, 271, 45, -6, nil, 50, nil, nil, nil, nil,
+ nil, 5, nil, -8, nil, nil, 7, 58, nil, 179,
+ nil, nil, nil, 65, 101, 69, 44, 191, nil, nil,
+ 46, 82, 75, 89, 63, 62, nil, nil, 72, 91,
+ nil, nil, 106, 15, nil, 49, 103, nil, nil, nil,
+ nil, nil, 127, nil, nil, nil, nil, 112, nil, nil,
+ nil, 223, nil, -3, nil, nil, nil, 92, 168, nil,
+ nil ]
racc_action_default = [
- -85, -85, -5, -20, -6, -85, -19, -7, -85, -8,
- -85, -9, -85, -10, -85, -85, -85, -85, -1, -2,
- -4, -28, -63, -69, -37, -36, -42, -85, -43, -34,
- -38, -79, -40, -41, -35, -85, -44, -39, -85, -69,
- -28, -85, -85, -67, -3, -85, -29, -83, -70, -69,
- -85, -32, -85, -85, -85, -85, -27, -77, -85, -85,
- -23, -15, -19, -85, -21, -24, -25, -26, -22, -17,
- -83, 143, -85, -68, -85, -84, -85, -85, -85, -73,
- -76, -85, -80, -81, -82, -85, -62, -59, -58, -60,
- -61, -85, -85, -52, -53, -85, -85, -47, -85, -50,
- -78, -85, -28, -18, -85, -85, -85, -31, -30, -13,
- -71, -72, -85, -85, -85, -33, -85, -55, -85, -45,
- -48, -46, -85, -85, -85, -14, -16, -11, -12, -66,
- -74, -75, -64, -57, -54, -85, -85, -51, -65, -85,
- -56, -85, -49 ]
+ -91, -4, -26, -5, -91, -25, -6, -91, -7, -91,
+ -8, -91, -91, -9, -91, -91, -10, -11, -91, -91,
+ -1, -91, -2, -69, -75, -91, -46, -45, -91, -49,
+ -43, -85, -48, -42, -40, -50, -44, -47, -41, -91,
+ -34, -75, -16, -12, -13, -15, -91, -73, -91, -3,
+ -34, -91, -75, -76, -91, -91, -38, -91, -91, -33,
+ -35, -91, -89, -91, -83, -91, -91, -91, -74, 151,
+ -31, -23, -25, -89, -29, -21, -91, -27, -30, -32,
+ -28, -91, -91, -91, -79, -82, -65, -64, -66, -68,
+ -67, -91, -53, -91, -56, -59, -91, -91, -58, -91,
+ -86, -87, -88, -91, -91, -91, -90, -91, -84, -14,
+ -91, -91, -24, -91, -34, -91, -77, -78, -91, -91,
+ -52, -54, -91, -91, -61, -91, -91, -39, -51, -37,
+ -19, -36, -91, -72, -17, -22, -18, -20, -70, -80,
+ -81, -91, -57, -91, -60, -63, -71, -91, -91, -62,
+ -55 ]
racc_goto_table = [
- 18, 44, 37, 25, 94, 108, 86, 35, 86, 34,
- 47, 99, 67, 97, 85, 76, 43, 118, 48, 37,
- 25, 104, 66, 93, 51, 69, 34, 65, 96, 70,
- 37, 25, 61, 60, 57, 56, 64, 34, 105, 68,
- 79, 73, 50, 117, 77, 86, 37, 25, 80, 86,
- 59, 95, 99, 34, 120, 42, 52, 78, 16, nil,
- nil, nil, nil, nil, nil, nil, 37, 25, nil, 108,
- nil, 107, 106, 34, nil, 67, 86, 37, 25, 137,
- 135, 114, 115, nil, 34, 66, 140, nil, 86, 44,
- 65, 125, nil, nil, nil, 126, 60, 44, nil, 64,
- nil, 124, 68, 130, nil, 37, 25, 44, 37, 25,
- 131, 80, 34, 133, nil, 34, nil, nil, nil, nil,
- nil, nil, nil, nil, 44, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, 141 ]
+ 20, 49, 38, 62, 27, 25, 42, 99, 45, 94,
+ 84, 47, 75, 73, 33, 44, 125, 77, 78, 89,
+ 89, 38, 79, 27, 56, 92, 105, 131, 95, 57,
+ 53, 111, 38, 33, 27, 59, 98, 113, 43, 68,
+ 91, 70, 51, 80, 33, 85, 94, 64, 63, 46,
+ 71, 38, 83, 27, 103, 74, 89, 42, 82, 45,
+ 19, 89, 121, 33, nil, nil, 109, 110, 131, 124,
+ nil, nil, nil, nil, 135, 143, 139, 137, 142, 77,
+ 78, 115, nil, nil, 79, nil, nil, nil, 89, nil,
+ nil, 49, 38, nil, 27, 127, 49, 38, nil, 27,
+ 129, nil, nil, 70, 33, 80, nil, 132, 89, 33,
+ nil, 85, 38, 49, 27, 140, 149, 74, nil, 38,
+ nil, 27, 145, nil, 33, nil, nil, nil, nil, 49,
+ nil, 33, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 148 ]
racc_goto_check = [
- 2, 3, 4, 16, 34, 24, 27, 23, 27, 11,
- 14, 32, 22, 30, 26, 15, 11, 35, 39, 4,
- 16, 13, 21, 33, 23, 12, 11, 20, 29, 14,
- 4, 16, 17, 16, 39, 23, 19, 11, 15, 11,
- 41, 11, 36, 34, 39, 27, 4, 16, 11, 27,
- 37, 23, 32, 11, 30, 38, 25, 40, 1, nil,
- nil, nil, nil, nil, nil, nil, 4, 16, nil, 24,
- nil, 23, 2, 11, nil, 22, 27, 4, 16, 32,
- 26, 2, 23, nil, 11, 21, 34, nil, 27, 3,
- 20, 14, nil, nil, nil, 17, 16, 3, nil, 19,
- nil, 2, 11, 41, nil, 4, 16, 3, 4, 16,
- 23, 11, 11, 23, nil, 11, nil, nil, nil, nil,
- nil, nil, nil, nil, 3, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, 2 ]
+ 2, 3, 14, 18, 4, 26, 15, 29, 14, 35,
+ 44, 14, 21, 18, 20, 13, 38, 23, 24, 30,
+ 30, 14, 25, 4, 26, 33, 19, 27, 37, 28,
+ 42, 17, 14, 20, 4, 26, 36, 19, 12, 14,
+ 32, 15, 39, 14, 20, 14, 35, 42, 40, 41,
+ 16, 14, 43, 4, 26, 20, 30, 15, 42, 14,
+ 1, 30, 33, 20, nil, nil, 13, 2, 27, 37,
+ nil, nil, nil, nil, 21, 29, 44, 18, 35, 23,
+ 24, 2, nil, nil, 25, nil, nil, nil, 30, nil,
+ nil, 3, 14, nil, 4, 26, 3, 14, nil, 4,
+ 26, nil, nil, 15, 20, 14, nil, 2, 30, 20,
+ nil, 14, 14, 3, 4, 26, 37, 20, nil, 14,
+ nil, 4, 26, nil, 20, nil, nil, nil, nil, 3,
+ nil, 20, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 2 ]
racc_goto_pointer = [
- nil, 58, 0, -17, -8, nil, nil, nil, nil, nil,
- nil, -1, -15, -48, -11, -32, -7, -8, nil, -4,
- -13, -18, -28, -3, -70, 29, -38, -47, nil, -27,
- -42, nil, -44, -30, -49, -75, 19, 11, 38, -5,
- 8, -9 ]
+ nil, 60, 0, -19, -5, nil, nil, nil, nil, nil,
+ nil, nil, 23, 0, -7, -9, 0, -40, -37, -36,
+ 5, -38, nil, -33, -32, -28, -4, -79, 1, -50,
+ -35, nil, -14, -29, nil, -45, -19, -27, -80, 18,
+ 7, 31, 6, 0, -42 ]
racc_goto_default = [
- nil, nil, nil, 19, 20, 2, 4, 7, 9, 11,
- 13, 15, nil, nil, nil, nil, 1, nil, 63, 29,
- 30, 32, 33, nil, 46, nil, nil, 24, 26, nil,
- nil, 98, 91, nil, nil, nil, nil, nil, nil, nil,
- nil, nil ]
+ nil, nil, nil, 22, 1, 3, 6, 8, 10, 13,
+ 16, 17, nil, nil, 21, 26, nil, nil, nil, nil,
+ 12, nil, 76, 34, 36, 37, nil, 60, nil, nil,
+ 30, 32, nil, nil, 93, 97, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil ]
racc_token_table = {
false => 0,
@@ -406,11 +436,12 @@ racc_token_table = {
:NAME => 35,
:SEMIC => 36,
:CASE => 37,
- :DEFAULT => 38 }
+ :DEFAULT => 38,
+ :INCLUDE => 39 }
racc_use_result_var = true
-racc_nt_base = 39
+racc_nt_base = 40
Racc_arg = [
racc_action_table,
@@ -468,6 +499,7 @@ Racc_token_to_s_table = [
'SEMIC',
'CASE',
'DEFAULT',
+'INCLUDE',
'$start',
'program',
'statements',
@@ -476,10 +508,14 @@ Racc_token_to_s_table = [
'assignment',
'casestatement',
'import',
+'include',
'definition',
'hostclass',
'nodedef',
+'classnames',
+'classname',
'name',
+'variable',
'objectinstances',
'endsemi',
'params',
@@ -489,7 +525,6 @@ Racc_token_to_s_table = [
'objectname',
'quotedtext',
'selector',
-'variable',
'array',
'rvalue',
'param',
@@ -578,8 +613,53 @@ module_eval <<'.,.,', 'grammar.ra', 54
# reduce 10 omitted
-module_eval <<'.,.,', 'grammar.ra', 94
- def _reduce_11( val, _values, result )
+ # reduce 11 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 91
+ def _reduce_12( val, _values, result )
+ classnames = aryfy(val[1])
+
+ klasses = []
+
+ # Now just iterate over each of the class names and create a new
+ # object instance. FIXME This should probably eventually include
+ # some kind of checking that the asked-for class is a defined class.
+ classnames.each { |classname|
+ emptyary = AST::ASTArray.new(:children => [])
+ klasses << AST::ObjectDef.new(
+ :pin => "{}",
+ :line => @lexer.line,
+ :file => @lexer.file,
+ :type => classname,
+ :params => emptyary
+ )
+ }
+ result = AST::ASTArray.new(
+ :line => @lexer.line,
+ :file => @lexer.file,
+ :children => klasses
+ )
+ result
+ end
+.,.,
+
+ # reduce 13 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 98
+ def _reduce_14( val, _values, result )
+ result = aryfy(val[0], val[2])
+ result.line = @lexer.line
+ result.file = @lexer.file
+ result
+ end
+.,.,
+
+ # reduce 15 omitted
+
+ # reduce 16 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 132
+ def _reduce_17( val, _values, result )
if val[0].is_a?(AST::ASTArray)
raise Puppet::ParseError, "Invalid name"
end
@@ -611,8 +691,8 @@ module_eval <<'.,.,', 'grammar.ra', 94
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 117
- def _reduce_12( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 148
+ def _reduce_18( val, _values, result )
if val[0].is_a?(AST::ASTArray)
Puppet.notice "invalid name"
raise Puppet::ParseError, "Invalid name"
@@ -620,27 +700,20 @@ module_eval <<'.,.,', 'grammar.ra', 117
# an object but without a name
# this cannot be an instance of a library type
- # make a unique name for bookkeeping purposes
- name = AST::Name.new(
- :line => @lexer.line,
- :file => @lexer.file,
- :value => [val[0].value, "-", val[0].object_id].join('')
- )
-
+ # the objects will autogenerate a name if we don't provide one
result = AST::ObjectDef.new(
:pin => "{}",
:line => @lexer.line,
:file => @lexer.file,
:type => val[0],
- :name => name,
:params => val[2]
)
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 129
- def _reduce_13( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 160
+ def _reduce_19( val, _values, result )
# a template setting for a type
if val[0].is_a?(AST::ASTArray)
raise Puppet::ParseError, "Invalid type"
@@ -656,8 +729,8 @@ module_eval <<'.,.,', 'grammar.ra', 129
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 137
- def _reduce_14( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 168
+ def _reduce_20( val, _values, result )
result = AST::ObjectInst.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -667,10 +740,10 @@ module_eval <<'.,.,', 'grammar.ra', 137
end
.,.,
- # reduce 15 omitted
+ # reduce 21 omitted
-module_eval <<'.,.,', 'grammar.ra', 151
- def _reduce_16( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 182
+ def _reduce_22( val, _values, result )
if val[0].is_a?(AST::ObjectInst)
result = AST::ASTArray.new(
:line => @lexer.line,
@@ -685,12 +758,12 @@ module_eval <<'.,.,', 'grammar.ra', 151
end
.,.,
- # reduce 17 omitted
+ # reduce 23 omitted
- # reduce 18 omitted
+ # reduce 24 omitted
-module_eval <<'.,.,', 'grammar.ra', 162
- def _reduce_19( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 193
+ def _reduce_25( val, _values, result )
result = AST::Name.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -700,8 +773,8 @@ module_eval <<'.,.,', 'grammar.ra', 162
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 170
- def _reduce_20( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 201
+ def _reduce_26( val, _values, result )
result = AST::Type.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -711,20 +784,20 @@ module_eval <<'.,.,', 'grammar.ra', 170
end
.,.,
- # reduce 21 omitted
+ # reduce 27 omitted
- # reduce 22 omitted
+ # reduce 28 omitted
- # reduce 23 omitted
+ # reduce 29 omitted
- # reduce 24 omitted
+ # reduce 30 omitted
- # reduce 25 omitted
+ # reduce 31 omitted
- # reduce 26 omitted
+ # reduce 32 omitted
-module_eval <<'.,.,', 'grammar.ra', 193
- def _reduce_27( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 224
+ def _reduce_33( val, _values, result )
# this is distinct from referencing a variable
variable = AST::Name.new(
:line => @lexer.line,
@@ -742,8 +815,8 @@ module_eval <<'.,.,', 'grammar.ra', 193
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 202
- def _reduce_28( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 233
+ def _reduce_34( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -753,15 +826,15 @@ module_eval <<'.,.,', 'grammar.ra', 202
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 202
- def _reduce_29( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 233
+ def _reduce_35( val, _values, result )
result = val[0]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 215
- def _reduce_30( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 246
+ def _reduce_36( val, _values, result )
if val[0].is_a?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -776,8 +849,8 @@ module_eval <<'.,.,', 'grammar.ra', 215
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 230
- def _reduce_31( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 261
+ def _reduce_37( val, _values, result )
leaf = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -794,10 +867,10 @@ module_eval <<'.,.,', 'grammar.ra', 230
end
.,.,
- # reduce 32 omitted
+ # reduce 38 omitted
-module_eval <<'.,.,', 'grammar.ra', 243
- def _reduce_33( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 274
+ def _reduce_39( val, _values, result )
if val[0].is_a?(AST::ASTArray)
result = val[0].push(val[2])
else
@@ -811,26 +884,26 @@ module_eval <<'.,.,', 'grammar.ra', 243
end
.,.,
- # reduce 34 omitted
+ # reduce 40 omitted
- # reduce 35 omitted
+ # reduce 41 omitted
- # reduce 36 omitted
+ # reduce 42 omitted
- # reduce 37 omitted
+ # reduce 43 omitted
- # reduce 38 omitted
+ # reduce 44 omitted
- # reduce 39 omitted
+ # reduce 45 omitted
- # reduce 40 omitted
+ # reduce 46 omitted
- # reduce 41 omitted
+ # reduce 47 omitted
- # reduce 42 omitted
+ # reduce 48 omitted
-module_eval <<'.,.,', 'grammar.ra', 261
- def _reduce_43( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 292
+ def _reduce_49( val, _values, result )
result = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -840,8 +913,8 @@ module_eval <<'.,.,', 'grammar.ra', 261
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 269
- def _reduce_44( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 300
+ def _reduce_50( val, _values, result )
result = AST::Boolean.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -851,8 +924,8 @@ module_eval <<'.,.,', 'grammar.ra', 269
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 279
- def _reduce_45( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 310
+ def _reduce_51( val, _values, result )
result = AST::ObjectRef.new(
:pin => '[]',
:line => @lexer.line,
@@ -864,8 +937,8 @@ module_eval <<'.,.,', 'grammar.ra', 279
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 296
- def _reduce_46( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 327
+ def _reduce_52( val, _values, result )
options = val[3]
unless options.is_a?(AST::ASTArray)
options = AST::ASTArray.new(
@@ -884,10 +957,10 @@ module_eval <<'.,.,', 'grammar.ra', 296
end
.,.,
- # reduce 47 omitted
+ # reduce 53 omitted
-module_eval <<'.,.,', 'grammar.ra', 310
- def _reduce_48( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 341
+ def _reduce_54( val, _values, result )
if val[0].is_a?(AST::ASTArray)
val[0].push val[1]
result = val[0]
@@ -902,8 +975,8 @@ module_eval <<'.,.,', 'grammar.ra', 310
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 320
- def _reduce_49( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 351
+ def _reduce_55( val, _values, result )
result = AST::CaseOpt.new(
:pin => ":",
:value => val[0],
@@ -915,10 +988,10 @@ module_eval <<'.,.,', 'grammar.ra', 320
end
.,.,
- # reduce 50 omitted
+ # reduce 56 omitted
-module_eval <<'.,.,', 'grammar.ra', 334
- def _reduce_51( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 365
+ def _reduce_57( val, _values, result )
if val[0].is_a?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -933,8 +1006,8 @@ module_eval <<'.,.,', 'grammar.ra', 334
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 344
- def _reduce_52( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 375
+ def _reduce_58( val, _values, result )
result = AST::Selector.new(
:pin => "?",
:line => @lexer.line,
@@ -946,19 +1019,19 @@ module_eval <<'.,.,', 'grammar.ra', 344
end
.,.,
- # reduce 53 omitted
+ # reduce 59 omitted
-module_eval <<'.,.,', 'grammar.ra', 346
- def _reduce_54( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 377
+ def _reduce_60( val, _values, result )
result = val[1]
result
end
.,.,
- # reduce 55 omitted
+ # reduce 61 omitted
-module_eval <<'.,.,', 'grammar.ra', 361
- def _reduce_56( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 392
+ def _reduce_62( val, _values, result )
if val[0].is_a?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -973,8 +1046,8 @@ module_eval <<'.,.,', 'grammar.ra', 361
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 371
- def _reduce_57( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 402
+ def _reduce_63( val, _values, result )
result = AST::ObjectParam.new(
:pin => "=>",
:line => @lexer.line,
@@ -986,8 +1059,8 @@ module_eval <<'.,.,', 'grammar.ra', 371
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 379
- def _reduce_58( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 410
+ def _reduce_64( val, _values, result )
result = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -997,8 +1070,8 @@ module_eval <<'.,.,', 'grammar.ra', 379
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 386
- def _reduce_59( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 417
+ def _reduce_65( val, _values, result )
result = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1008,8 +1081,8 @@ module_eval <<'.,.,', 'grammar.ra', 386
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 393
- def _reduce_60( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 424
+ def _reduce_66( val, _values, result )
result = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1019,8 +1092,8 @@ module_eval <<'.,.,', 'grammar.ra', 393
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 400
- def _reduce_61( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 431
+ def _reduce_67( val, _values, result )
result = AST::Default.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1030,10 +1103,10 @@ module_eval <<'.,.,', 'grammar.ra', 400
end
.,.,
- # reduce 62 omitted
+ # reduce 68 omitted
-module_eval <<'.,.,', 'grammar.ra', 438
- def _reduce_63( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 469
+ def _reduce_69( val, _values, result )
# importing files
# yuk, i hate keywords
# we'll probably have to have some kind of search path eventually
@@ -1072,8 +1145,8 @@ module_eval <<'.,.,', 'grammar.ra', 438
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 448
- def _reduce_64( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 479
+ def _reduce_70( val, _values, result )
result = AST::CompDef.new(
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
:args => val[2],
@@ -1085,8 +1158,8 @@ module_eval <<'.,.,', 'grammar.ra', 448
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 464
- def _reduce_65( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 495
+ def _reduce_71( val, _values, result )
#:args => val[2],
args = {
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
@@ -1103,8 +1176,8 @@ module_eval <<'.,.,', 'grammar.ra', 464
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 484
- def _reduce_66( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 515
+ def _reduce_72( val, _values, result )
unless val[1].is_a?(AST::ASTArray)
val[1] = AST::ASTArray.new(
:line => val[1].line,
@@ -1126,10 +1199,10 @@ module_eval <<'.,.,', 'grammar.ra', 484
end
.,.,
- # reduce 67 omitted
+ # reduce 73 omitted
-module_eval <<'.,.,', 'grammar.ra', 498
- def _reduce_68( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 529
+ def _reduce_74( val, _values, result )
if val[0].is_a?(AST::ASTArray)
result = val[0]
result.push val[1]
@@ -1144,8 +1217,8 @@ module_eval <<'.,.,', 'grammar.ra', 498
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 506
- def _reduce_69( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 537
+ def _reduce_75( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1155,17 +1228,17 @@ module_eval <<'.,.,', 'grammar.ra', 506
end
.,.,
- # reduce 70 omitted
+ # reduce 76 omitted
-module_eval <<'.,.,', 'grammar.ra', 511
- def _reduce_71( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 542
+ def _reduce_77( val, _values, result )
result = val[1]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 522
- def _reduce_72( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 553
+ def _reduce_78( val, _values, result )
if val[1].is_a?(AST::ASTArray)
result = val[1]
else
@@ -1179,10 +1252,10 @@ module_eval <<'.,.,', 'grammar.ra', 522
end
.,.,
- # reduce 73 omitted
+ # reduce 79 omitted
-module_eval <<'.,.,', 'grammar.ra', 536
- def _reduce_74( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 567
+ def _reduce_80( val, _values, result )
if val[0].is_a?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -1197,8 +1270,8 @@ module_eval <<'.,.,', 'grammar.ra', 536
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 544
- def _reduce_75( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 575
+ def _reduce_81( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1208,8 +1281,8 @@ module_eval <<'.,.,', 'grammar.ra', 544
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 551
- def _reduce_76( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 582
+ def _reduce_82( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1219,10 +1292,10 @@ module_eval <<'.,.,', 'grammar.ra', 551
end
.,.,
- # reduce 77 omitted
+ # reduce 83 omitted
-module_eval <<'.,.,', 'grammar.ra', 560
- def _reduce_78( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 591
+ def _reduce_84( val, _values, result )
result = AST::Name.new(
:value => val[1],
:file => @lexer.file,
@@ -1232,8 +1305,8 @@ module_eval <<'.,.,', 'grammar.ra', 560
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 569
- def _reduce_79( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 600
+ def _reduce_85( val, _values, result )
name = val[0].sub(/^\$/,'')
result = AST::Variable.new(
:line => @lexer.line,
@@ -1244,8 +1317,8 @@ module_eval <<'.,.,', 'grammar.ra', 569
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 578
- def _reduce_80( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 609
+ def _reduce_86( val, _values, result )
if val[1].is_a?(AST::ASTArray)
result = val[1]
else
@@ -1256,14 +1329,14 @@ module_eval <<'.,.,', 'grammar.ra', 578
end
.,.,
- # reduce 81 omitted
+ # reduce 87 omitted
- # reduce 82 omitted
+ # reduce 88 omitted
- # reduce 83 omitted
+ # reduce 89 omitted
-module_eval <<'.,.,', 'grammar.ra', 583
- def _reduce_84( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 614
+ def _reduce_90( val, _values, result )
result = nil
result
end
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index d813ea804..ef78bf218 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -91,7 +91,9 @@ module Puppet
scope = code = nil
names.each { |node|
scope = self.findnode(node)
- code = scope.node(node)
+ if scope
+ code = scope.node(node)
+ end
if scope and code
break
end