summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/ast.rb53
-rw-r--r--lib/puppet/parser/ast/branch.rb2
-rw-r--r--lib/puppet/parser/ast/classdef.rb6
-rw-r--r--lib/puppet/parser/ast/compdef.rb27
-rw-r--r--lib/puppet/parser/ast/component.rb42
-rw-r--r--lib/puppet/parser/ast/hostclass.rb2
-rw-r--r--lib/puppet/parser/ast/objectdef.rb92
-rw-r--r--lib/puppet/parser/grammar.ra29
-rw-r--r--lib/puppet/parser/parser.rb413
-rw-r--r--lib/puppet/parser/scope.rb21
10 files changed, 415 insertions, 272 deletions
diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
index 47ff9599a..06798b44d 100644
--- a/lib/puppet/parser/ast.rb
+++ b/lib/puppet/parser/ast.rb
@@ -130,34 +130,37 @@ module Puppet
end
#---------------------------------------------------------------
# Now autoload everything.
- @autoloader = Puppet::Autoload.new(self,
- "puppet/parser/ast"
- )
- @autoloader.loadall
+ # XXX We can't do this, because it causes multiple loads of some
+ # things.
+ #@autoloader = Puppet::Autoload.new(self,
+ # "puppet/parser/ast"
+ #)
+ #@autoloader.loadall
end
end
end
-#require 'puppet/parser/ast/astarray'
-#require 'puppet/parser/ast/branch'
-#require 'puppet/parser/ast/collection'
-#require 'puppet/parser/ast/caseopt'
-#require 'puppet/parser/ast/casestatement'
-#require 'puppet/parser/ast/classdef'
-#require 'puppet/parser/ast/compdef'
-#require 'puppet/parser/ast/component'
-#require 'puppet/parser/ast/else'
-#require 'puppet/parser/ast/hostclass'
-#require 'puppet/parser/ast/leaf'
-#require 'puppet/parser/ast/node'
-#require 'puppet/parser/ast/nodedef'
-#require 'puppet/parser/ast/objectdef'
-#require 'puppet/parser/ast/objectparam'
-#require 'puppet/parser/ast/objectref'
-#require 'puppet/parser/ast/selector'
-#require 'puppet/parser/ast/typedefaults'
-#require 'puppet/parser/ast/vardef'
-#require 'puppet/parser/ast/tag'
-#require 'puppet/parser/ast/function'
+require 'puppet/parser/ast/astarray'
+require 'puppet/parser/ast/branch'
+require 'puppet/parser/ast/collection'
+require 'puppet/parser/ast/caseopt'
+require 'puppet/parser/ast/casestatement'
+require 'puppet/parser/ast/classdef'
+require 'puppet/parser/ast/compdef'
+require 'puppet/parser/ast/component'
+require 'puppet/parser/ast/else'
+require 'puppet/parser/ast/hostclass'
+require 'puppet/parser/ast/ifstatement'
+require 'puppet/parser/ast/leaf'
+require 'puppet/parser/ast/node'
+require 'puppet/parser/ast/nodedef'
+require 'puppet/parser/ast/objectdef'
+require 'puppet/parser/ast/objectparam'
+require 'puppet/parser/ast/objectref'
+require 'puppet/parser/ast/selector'
+require 'puppet/parser/ast/typedefaults'
+require 'puppet/parser/ast/vardef'
+require 'puppet/parser/ast/tag'
+require 'puppet/parser/ast/function'
# $Id$
diff --git a/lib/puppet/parser/ast/branch.rb b/lib/puppet/parser/ast/branch.rb
index 941c00a68..5a4d323f5 100644
--- a/lib/puppet/parser/ast/branch.rb
+++ b/lib/puppet/parser/ast/branch.rb
@@ -45,3 +45,5 @@ class Puppet::Parser::AST
end
end
end
+
+# $Id$
diff --git a/lib/puppet/parser/ast/classdef.rb b/lib/puppet/parser/ast/classdef.rb
index 0a6a86816..cb66b3a8a 100644
--- a/lib/puppet/parser/ast/classdef.rb
+++ b/lib/puppet/parser/ast/classdef.rb
@@ -5,7 +5,9 @@ class Puppet::Parser::AST
# but classes are always singletons -- only one can exist on a given
# host.
class ClassDef < AST::CompDef
- attr_accessor :parentclass
+ def self.genclass
+ AST::HostClass
+ end
def each
if @parentclass
@@ -18,7 +20,7 @@ class Puppet::Parser::AST
end
# Store our parse tree according to type.
- def evaluate(hash)
+ def disabled_evaluate(hash)
scope = hash[:scope]
type = @type.safeevaluate(:scope => scope)
#args = @args.safeevaluate(:scope => scope)
diff --git a/lib/puppet/parser/ast/compdef.rb b/lib/puppet/parser/ast/compdef.rb
index e5758d6f0..696e178e1 100644
--- a/lib/puppet/parser/ast/compdef.rb
+++ b/lib/puppet/parser/ast/compdef.rb
@@ -9,7 +9,11 @@ class Puppet::Parser::AST
# encounter an error if the component is instantiated more than
# once.
class CompDef < AST::Branch
- attr_accessor :type, :args, :code, :keyword, :scope
+ attr_accessor :type, :args, :code, :keyword, :scope, :parentclass
+
+ def self.genclass
+ AST::Component
+ end
def each
[@type,@args,@code].each { |child| yield child }
@@ -18,17 +22,21 @@ class Puppet::Parser::AST
# Store the parse tree.
def evaluate(hash)
scope = hash[:scope]
- type = @type.safeevaluate(:scope => scope)
- args = @args.safeevaluate(:scope => scope)
+ arghash = {:code => @code}
+ arghash[:type] = @type.safeevaluate(:scope => scope)
+
+ if @args
+ arghash[:args] = @args.safeevaluate(:scope => scope)
+ end
+
+ if @parentclass
+ arghash[:parentclass] = @parentclass.safeevaluate(:scope => scope)
+ end
begin
- comp = AST::Component.new(
- :type => type,
- :args => args,
- :code => @code
- )
+ comp = self.class.genclass.new(arghash)
comp.keyword = self.keyword
- scope.settype(type, comp)
+ scope.settype(arghash[:type], comp)
rescue Puppet::ParseError => except
except.line = self.line
except.file = self.file
@@ -44,6 +52,7 @@ class Puppet::Parser::AST
def initialize(hash)
@parentclass = nil
+ @args = nil
# Set a default keyword
@keyword = "define"
diff --git a/lib/puppet/parser/ast/component.rb b/lib/puppet/parser/ast/component.rb
index 317c8ced5..4d930f6a5 100644
--- a/lib/puppet/parser/ast/component.rb
+++ b/lib/puppet/parser/ast/component.rb
@@ -10,14 +10,18 @@ class Puppet::Parser::AST
# The class name
@name = :component
- attr_accessor :type, :args, :code, :scope, :keyword, :collectable
+ attr_accessor :type, :args, :code, :scope, :keyword
+ attr_accessor :collectable, :parentclass
+
+ # These are retrieved when looking up the superclass
+ attr_accessor :name, :arguments
#def evaluate(scope,hash,objtype,objname)
def evaluate(hash)
origscope = hash[:scope]
objtype = hash[:type]
- objname = hash[:name]
- arguments = hash[:arguments] || {}
+ @name = hash[:name]
+ @arguments = hash[:arguments] || {}
@collectable = hash[:collectable]
@@ -29,7 +33,7 @@ class Puppet::Parser::AST
#end
scope = pscope.newscope(
:type => @type,
- :name => objname,
+ :name => @name,
:keyword => self.keyword
)
newcontext = hash[:newcontext]
@@ -48,8 +52,8 @@ class Puppet::Parser::AST
# we are
scope.tag(@type)
- unless objname.nil?
- scope.tag(objname)
+ unless @name.nil?
+ scope.tag(@name)
end
# define all of the arguments in our local scope
@@ -59,15 +63,15 @@ class Puppet::Parser::AST
# FIXME This should probably also require each parent
# class's arguments...
self.args.each { |arg, default|
- unless arguments.include?(arg)
+ unless @arguments.include?(arg)
if defined? default and ! default.nil?
- arguments[arg] = default
+ @arguments[arg] = default
#Puppet.debug "Got default %s for %s in %s" %
- # [default.inspect, arg.inspect, objname.inspect]
+ # [default.inspect, arg.inspect, @name.inspect]
else
error = Puppet::ParseError.new(
"Must pass %s to %s of type %s" %
- [arg.inspect,objname,@type]
+ [arg.inspect,@name,@type]
)
error.line = self.line
error.file = self.file
@@ -79,10 +83,9 @@ class Puppet::Parser::AST
# Set each of the provided arguments as variables in the
# component's scope.
- arguments["name"] = objname
- arguments.each { |arg,value|
+ @arguments.each { |arg,value|
begin
- scope.setvar(arg,arguments[arg])
+ scope.setvar(arg,@arguments[arg])
rescue Puppet::ParseError => except
except.line = self.line
except.file = self.file
@@ -100,8 +103,14 @@ class Puppet::Parser::AST
end
}
+ unless @arguments.include? "name"
+ scope.setvar("name",@name)
+ end
+
# Now just evaluate the code with our new bindings.
- self.code.safeevaluate(:scope => scope)
+ scope.inside(self) do
+ self.code.safeevaluate(:scope => scope)
+ end
# If we're being evaluated as a parent class, we want to return the
# scope, so it can be overridden and such, but if not, we want to
@@ -134,9 +143,10 @@ class Puppet::Parser::AST
return true
elsif defined? @parentclass and @parentclass
# Else, check any existing parent
- parent = @scope.lookuptype(@parentclass)
- if parent and parent != []
+ if parent = @scope.lookuptype(@parentclass) and parent != []
return parent.validarg?(param)
+ elsif builtin = Puppet::Type.type(@parentclass)
+ return builtin.validattr?(param)
else
raise Puppet::Error, "Could not find parent class %s" %
@parentclass
diff --git a/lib/puppet/parser/ast/hostclass.rb b/lib/puppet/parser/ast/hostclass.rb
index f66078d7a..44077983d 100644
--- a/lib/puppet/parser/ast/hostclass.rb
+++ b/lib/puppet/parser/ast/hostclass.rb
@@ -4,9 +4,7 @@ class Puppet::Parser::AST
# node.
class HostClass < AST::Component
@name = :class
- attr_accessor :parentclass
- #def evaluate(scope,hash,objtype,objname)
def evaluate(hash)
scope = hash[:scope]
objname = hash[:name]
diff --git a/lib/puppet/parser/ast/objectdef.rb b/lib/puppet/parser/ast/objectdef.rb
index 7ab46a9d8..63577b60d 100644
--- a/lib/puppet/parser/ast/objectdef.rb
+++ b/lib/puppet/parser/ast/objectdef.rb
@@ -33,6 +33,13 @@ class Puppet::Parser::AST
# Get our type and name.
objtype = @type.safeevaluate(:scope => scope)
+ if objtype == "super"
+ objtype = supertype()
+ @subtype = true
+ else
+ @subtype = false
+ end
+
# If the type was a variable, we wouldn't have typechecked yet.
# Do it now, if so.
unless @checked
@@ -62,6 +69,11 @@ class Puppet::Parser::AST
hash[ary[0]] = ary[1]
}
+ # Now collect info from our parent.
+ if @subtype
+ parentname = supersetup(hash)
+ end
+
objnames = [nil]
# Determine our name if we have one.
if self.name
@@ -71,21 +83,26 @@ class Puppet::Parser::AST
objnames = [objnames]
end
else
- # See if they specified the name as a parameter instead of as a
- # normal name (i.e., before the colon).
- unless object # we're a builtin
- if objclass = Puppet::Type.type(objtype)
- namevar = objclass.namevar
+ if parentname
+ objnames = [parentname]
+ else
+ # See if they specified the name as a parameter instead of
+ # as a normal name (i.e., before the colon).
+ unless object # we're a builtin
+ if objclass = Puppet::Type.type(objtype)
+ namevar = objclass.namevar
- tmp = hash["name"] || hash[namevar.to_s]
+ tmp = hash["name"] || hash[namevar.to_s]
- if tmp
- objnames = [tmp]
+ if tmp
+ objnames = [tmp]
+ end
+ else
+ # this should never happen, because we've already
+ # typechecked, but it's no real problem if it does
+ # happen. We just end up with an object with no
+ # name.
end
- else
- # this should never happen, because we've already
- # typechecked, but it's no real problem if it does happen.
- # We just end up with an object with no name.
end
end
end
@@ -130,7 +147,7 @@ class Puppet::Parser::AST
@checked = false
super
- self.typecheck(@type.value)
+ #self.typecheck(@type.value)
end
# Verify that all passed parameters are valid
@@ -212,6 +229,55 @@ class Puppet::Parser::AST
end
end
+ def supercomp
+ unless defined? @supercomp
+ if @scope and comp = @scope.inside
+ @supercomp = comp
+ else
+ error = Puppet::ParseError.new(
+ "'super' is only valid within definitions"
+ )
+ error.line = self.line
+ error.file = self.file
+ raise error
+ end
+ end
+ @supercomp
+ end
+
+ # Take all of the arguments of our parent and add them into our own,
+ # without overriding anything.
+ def supersetup(hash)
+ comp = supercomp()
+
+ # Now check each of the arguments from the parent.
+ comp.arguments.each do |name, value|
+ unless hash.has_key? name
+ hash[name] = value
+ end
+ end
+
+ # Return the parent name, so it can be used if appropriate.
+ return comp.name
+ end
+
+ # Retrieve our supertype.
+ def supertype
+ unless defined? @supertype
+ if parent = supercomp.parentclass
+ @supertype = parent
+ else
+ error = Puppet::ParseError.new(
+ "%s does not have a parent class" % comp.type
+ )
+ error.line = self.line
+ error.file = self.file
+ raise error
+ end
+ end
+ @supertype
+ end
+
# Print this object out.
def tree(indent = 0)
return [
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index 9a5fb68a9..673c41a9f 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -400,22 +400,38 @@ import: IMPORT quotedtext {
}
}
-definition: DEFINE NAME argumentlist LBRACE statements RBRACE {
- result = ast AST::CompDef,
+definition: DEFINE NAME argumentlist parent LBRACE statements RBRACE {
+ args = {
+ :type => ast(AST::Name, :value => val[1]),
:args => val[2],
:keyword => val[0],
- :code => val[4]
-} | DEFINE NAME argumentlist LBRACE RBRACE {
- result = ast AST::CompDef,
+ :code => val[5]
+ }
+
+ if val[3].instance_of?(AST::Name)
+ args[:parentclass] = val[3]
+ end
+ result = ast AST::CompDef, args
+} | DEFINE NAME argumentlist parent LBRACE RBRACE {
+ args = {
+ :type => ast(AST::Name, :value => val[1]),
:args => val[2],
:keyword => val[0],
- :code => ast(AST::ASTArray, :children => [])
+ :code => ast(AST::ASTArray)
+ }
+
+ if val[3].instance_of?(AST::Name)
+ args[:parentclass] = val[3]
+ end
+
+ result = ast AST::CompDef,args
}
#hostclass: CLASS NAME argumentlist parent LBRACE statements RBRACE {
hostclass: CLASS NAME parent LBRACE statements RBRACE {
#:args => val[2],
args = {
+ :type => ast(AST::Name, :value => val[1]),
:keyword => val[0],
:code => val[4]
}
@@ -426,6 +442,7 @@ hostclass: CLASS NAME parent LBRACE statements RBRACE {
result = ast AST::ClassDef, args
} | CLASS NAME parent LBRACE RBRACE {
args = {
+ :type => ast(AST::Name, :value => val[1]),
:keyword => val[0],
:code => ast(AST::ASTArray, :children => [])
}
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index 2513acd7f..e7ae6f85d 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..idd2680482eb', 'grammar.ra', 586
+module_eval <<'..end grammar.ra modeval..idbd33cf53a5', 'grammar.ra', 603
require 'puppet/parser/functions'
attr_reader :file
@@ -174,7 +174,7 @@ end
# $Id$
-..end grammar.ra modeval..idd2680482eb
+..end grammar.ra modeval..idbd33cf53a5
##### racc 1.4.5 generates ###
@@ -266,8 +266,8 @@ racc_reduce_table = [
1, 85, :_reduce_none,
1, 85, :_reduce_85,
2, 54, :_reduce_86,
- 6, 56, :_reduce_87,
- 5, 56, :_reduce_88,
+ 7, 56, :_reduce_87,
+ 6, 56, :_reduce_88,
6, 57, :_reduce_89,
5, 57, :_reduce_90,
6, 58, :_reduce_91,
@@ -300,50 +300,50 @@ racc_reduce_table = [
racc_reduce_n = 118
-racc_shift_n = 197
+racc_shift_n = 198
racc_action_table = [
- 48, 36, 38, 81, 162, 20, 48, 36, 38, 64,
- 79, 161, 48, 36, 38, 86, 20, 36, 38, 75,
- 36, 38, 20, 37, -79, 145, 36, 38, 20, 44,
- 37, -82, -79, 49, 53, 44, 31, 55, 31, 49,
- 53, 44, 72, 55, 65, 49, 53, -81, 44, 55,
- 48, 36, 38, 37, 44, 145, 48, 36, 38, 37,
- 37, 137, 48, 36, 38, 113, 20, 139, 29, 79,
- 29, 33, 20, 33, -80, 79, 85, 170, 20, 44,
- 154, 146, 102, 49, 53, 44, 115, 55, 171, 49,
- 53, 44, 149, 55, 77, 49, 53, 36, 38, 55,
+ 48, 36, 38, 64, 162, 20, 48, 36, 38, 75,
+ -84, 161, 48, 36, 38, 81, 20, 36, 38, 145,
+ 36, 38, 20, 37, 37, -79, 36, 38, 20, 44,
+ 86, -82, 72, 49, 53, 44, 31, 55, 65, 49,
+ 53, 44, 31, 55, 113, 49, 53, -79, 44, 55,
+ 48, 36, 38, 37, 44, 85, 48, 36, 38, 37,
+ -81, 137, 48, 36, 38, 79, 20, 72, 29, 79,
+ 169, 33, 20, -80, 29, 146, 154, 33, 20, 44,
+ 115, 170, 102, 49, 53, 44, 149, 55, 77, 49,
+ 53, 44, 88, 55, -81, 49, 53, 36, 38, 55,
48, 36, 38, 36, 38, 116, 48, 36, 38, 117,
- 118, 88, 48, 36, 38, 179, 20, 117, 118, -81,
- 45, 87, 20, 112, 155, 44, -82, 158, 20, 44,
+ 118, 87, 48, 36, 38, 112, 20, 155, 145, -82,
+ 45, 158, 20, 37, 178, 44, 117, 118, 20, 44,
37, 44, 105, 49, 53, 44, 37, 55, 64, 49,
- 53, 44, 163, 55, 77, 49, 53, 85, 84, 55,
- 48, 36, 38, -80, 169, 72, 48, 36, 38, 172,
- 173, -83, 48, 36, 38, -84, 20, 178, 108, 136,
- 182, 77, 20, 36, 38, 112, 71, 160, 20, 44,
- 109, 70, 69, 49, 53, 44, 113, 55, 20, 49,
- 53, 44, 190, 55, 66, 49, 93, 36, 38, 55,
- 112, 44, 35, 28, 166, 49, 53, 36, 38, 55,
- 125, nil, 20, 36, 38, nil, nil, nil, nil, 36,
- 38, nil, 20, nil, nil, 44, nil, nil, 20, 49,
- 53, nil, nil, 55, 20, 44, nil, nil, nil, 49,
- 53, 44, nil, 55, nil, 49, 53, 44, nil, 55,
- nil, 49, 53, 36, 38, 55, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, 20, 176,
+ 53, 44, 163, 55, 77, 49, 93, 85, 84, 55,
+ 48, 36, 38, 167, 168, 72, 48, 36, 38, 171,
+ 172, -80, 48, 36, 38, -83, 20, 177, 108, 136,
+ 181, 79, 20, 36, 38, 112, 77, 109, 20, 44,
+ 71, 70, 69, 49, 53, 44, 190, 55, 20, 49,
+ 53, 44, 113, 55, 66, 49, 53, 36, 38, 55,
+ 125, 44, 112, 36, 38, 49, 53, 35, 28, 55,
+ 166, nil, 20, 36, 38, nil, nil, nil, 20, 36,
+ 38, nil, nil, nil, nil, 44, nil, nil, 20, 49,
+ 53, 44, nil, 55, 20, 49, 53, nil, nil, 55,
+ nil, 44, nil, nil, nil, 49, 53, 44, nil, 55,
+ nil, 49, 53, 36, 38, 55, nil, 160, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 20, 175,
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- 20, 44, nil, nil, 168, 49, 53, nil, 12, 55,
- 16, 19, nil, 24, 26, 20, 3, nil, 9, 175,
+ 20, 44, nil, nil, 174, 49, 53, nil, 12, 55,
+ 16, 19, nil, 24, 26, 20, 3, nil, 9, 185,
14, nil, 21, 12, nil, 16, 19, nil, 24, 26,
- 20, 3, nil, 9, 196, 14, nil, 21, 12, nil,
+ 20, 3, nil, 9, 197, 14, nil, 21, 12, nil,
16, 19, nil, 24, 26, 20, 3, nil, 9, 153,
14, nil, 21, 12, nil, 16, 19, nil, 24, 26,
- 20, 3, nil, 9, 185, 14, nil, 21, 12, nil,
- 16, 19, nil, 24, 26, 20, 3, nil, 9, 189,
+ 20, 3, nil, 9, 189, 14, nil, 21, 12, nil,
+ 16, 19, nil, 24, 26, 20, 3, nil, 9, 193,
14, nil, 21, 12, nil, 16, 19, nil, 24, 26,
- 20, 3, nil, 9, 195, 14, nil, 21, 12, nil,
+ 20, 3, nil, 9, 196, 14, nil, 21, 12, nil,
16, 19, nil, 24, 26, 20, 3, nil, 9, 148,
14, nil, 21, 12, nil, 16, 19, nil, 24, 26,
- 20, 3, nil, 9, 193, 14, nil, 21, 12, nil,
+ 20, 3, nil, 9, 194, 14, nil, 21, 12, nil,
16, 19, nil, 24, 26, 20, 3, nil, 9, nil,
14, nil, 21, 12, nil, 16, 19, nil, 24, 26,
20, 3, nil, 9, nil, 14, nil, 21, 12, nil,
@@ -355,50 +355,50 @@ racc_action_table = [
nil, 3, nil, 9, nil, 14, nil, 21 ]
racc_action_check = [
- 48, 48, 48, 48, 133, 21, 86, 86, 86, 17,
- 39, 133, 137, 137, 137, 57, 48, 16, 16, 30,
- 79, 79, 86, 21, 98, 170, 45, 45, 137, 48,
- 170, 99, 57, 48, 48, 86, 3, 48, 75, 86,
- 86, 137, 30, 86, 17, 137, 137, 100, 79, 137,
- 69, 69, 69, 79, 45, 105, 119, 119, 119, 45,
- 105, 101, 172, 172, 172, 93, 69, 103, 3, 121,
- 75, 3, 119, 75, 92, 80, 93, 141, 172, 69,
- 121, 107, 65, 69, 69, 119, 80, 69, 141, 119,
- 119, 172, 111, 119, 112, 172, 172, 85, 85, 172,
+ 158, 158, 158, 17, 133, 21, 86, 86, 86, 30,
+ 46, 133, 48, 48, 48, 48, 158, 16, 16, 169,
+ 79, 79, 86, 21, 169, 98, 45, 45, 48, 158,
+ 57, 99, 30, 158, 158, 86, 3, 158, 17, 86,
+ 86, 48, 75, 86, 93, 48, 48, 57, 79, 48,
+ 69, 69, 69, 79, 45, 93, 137, 137, 137, 45,
+ 100, 101, 171, 171, 171, 121, 69, 103, 3, 80,
+ 141, 3, 137, 92, 75, 107, 121, 75, 171, 69,
+ 80, 141, 65, 69, 69, 137, 111, 69, 112, 137,
+ 137, 171, 62, 137, 61, 171, 171, 85, 85, 171,
12, 12, 12, 9, 9, 83, 14, 14, 14, 83,
- 83, 62, 113, 113, 113, 156, 12, 156, 156, 61,
- 9, 60, 14, 90, 122, 85, 59, 128, 113, 12,
+ 83, 60, 64, 64, 64, 90, 12, 122, 105, 59,
+ 9, 128, 14, 105, 156, 85, 156, 156, 64, 12,
85, 9, 66, 12, 12, 14, 9, 12, 68, 14,
- 14, 113, 135, 14, 136, 113, 113, 53, 52, 113,
- 173, 173, 173, 51, 140, 70, 158, 158, 158, 142,
- 144, 50, 64, 64, 64, 46, 173, 153, 72, 95,
- 161, 35, 158, 131, 131, 164, 28, 131, 64, 173,
- 74, 26, 24, 173, 173, 158, 77, 173, 131, 158,
- 158, 64, 178, 158, 19, 64, 64, 88, 88, 64,
- 76, 131, 6, 2, 138, 131, 131, 87, 87, 131,
- 87, nil, 88, 125, 125, nil, nil, nil, nil, 162,
- 162, nil, 87, nil, nil, 88, nil, nil, 125, 88,
- 88, nil, nil, 88, 162, 87, nil, nil, nil, 87,
- 87, 125, nil, 87, nil, 125, 125, 162, nil, 125,
- nil, 162, 162, 180, 180, 162, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, 180, 147,
+ 14, 64, 135, 14, 136, 64, 64, 53, 52, 64,
+ 172, 172, 172, 139, 140, 70, 119, 119, 119, 142,
+ 144, 51, 113, 113, 113, 50, 172, 153, 72, 95,
+ 161, 39, 119, 179, 179, 164, 35, 74, 113, 172,
+ 28, 26, 24, 172, 172, 119, 177, 172, 179, 119,
+ 119, 113, 77, 119, 19, 113, 113, 87, 87, 113,
+ 87, 179, 76, 88, 88, 179, 179, 6, 2, 179,
+ 138, nil, 87, 125, 125, nil, nil, nil, 88, 162,
+ 162, nil, nil, nil, nil, 87, nil, nil, 125, 87,
+ 87, 88, nil, 87, 162, 88, 88, nil, nil, 88,
+ nil, 125, nil, nil, nil, 125, 125, 162, nil, 125,
+ nil, 162, 162, 131, 131, 162, nil, 131, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 131, 147,
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- 147, 180, nil, nil, 139, 180, 180, nil, 147, 180,
- 147, 147, nil, 147, 147, 139, 147, nil, 147, 146,
- 147, nil, 147, 139, nil, 139, 139, nil, 139, 139,
- 146, 139, nil, 139, 194, 139, nil, 139, 146, nil,
- 146, 146, nil, 146, 146, 194, 146, nil, 146, 120,
- 146, nil, 146, 194, nil, 194, 194, nil, 194, 194,
- 120, 194, nil, 194, 167, 194, nil, 194, 120, nil,
- 120, 120, nil, 120, 120, 167, 120, nil, 120, 174,
- 120, nil, 120, 167, nil, 167, 167, nil, 167, 167,
- 174, 167, nil, 167, 192, 167, nil, 167, 174, nil,
- 174, 174, nil, 174, 174, 192, 174, nil, 174, 109,
- 174, nil, 174, 192, nil, 192, 192, nil, 192, 192,
- 109, 192, nil, 192, 182, 192, nil, 192, 109, nil,
- 109, 109, nil, 109, 109, 182, 109, nil, 109, nil,
- 109, nil, 109, 182, nil, 182, 182, nil, 182, 182,
- 84, 182, nil, 182, nil, 182, nil, 182, 84, nil,
+ 147, 131, nil, nil, 146, 131, 131, nil, 147, 131,
+ 147, 147, nil, 147, 147, 146, 147, nil, 147, 167,
+ 147, nil, 147, 146, nil, 146, 146, nil, 146, 146,
+ 167, 146, nil, 146, 195, 146, nil, 146, 167, nil,
+ 167, 167, nil, 167, 167, 195, 167, nil, 167, 120,
+ 167, nil, 167, 195, nil, 195, 195, nil, 195, 195,
+ 120, 195, nil, 195, 173, 195, nil, 195, 120, nil,
+ 120, 120, nil, 120, 120, 173, 120, nil, 120, 181,
+ 120, nil, 120, 173, nil, 173, 173, nil, 173, 173,
+ 181, 173, nil, 173, 192, 173, nil, 173, 181, nil,
+ 181, 181, nil, 181, 181, 192, 181, nil, 181, 109,
+ 181, nil, 181, 192, nil, 192, 192, nil, 192, 192,
+ 109, 192, nil, 192, 184, 192, nil, 192, 109, nil,
+ 109, 109, nil, 109, 109, 184, 109, nil, 109, nil,
+ 109, nil, 109, 184, nil, 184, 184, nil, 184, 184,
+ 84, 184, nil, 184, nil, 184, nil, 184, 84, nil,
84, 84, nil, 84, 84, 190, 84, nil, 84, nil,
84, nil, 84, 190, nil, 190, 190, nil, 190, 190,
5, 190, nil, 190, nil, 190, nil, 190, 5, nil,
@@ -407,26 +407,26 @@ racc_action_check = [
nil, 0, nil, 0, nil, 0, nil, 0 ]
racc_action_pointer = [
- 457, nil, 203, 32, nil, 442, 196, nil, nil, 100,
- nil, nil, 98, nil, 104, nil, 14, 3, nil, 158,
- nil, -13, nil, nil, 169, nil, 145, nil, 176, nil,
- 9, nil, nil, nil, nil, 135, nil, nil, nil, 0,
- nil, nil, nil, nil, nil, 23, 146, nil, -2, nil,
- 142, 134, 142, 127, nil, nil, nil, 13, nil, 107,
- 102, 100, 105, nil, 160, 40, 112, nil, 132, 48,
- 122, nil, 132, nil, 174, 34, 190, 177, nil, 17,
- 65, nil, nil, 100, 412, 94, 4, 204, 194, nil,
- 113, nil, 55, 56, nil, 152, nil, nil, 5, 12,
- 28, 24, nil, 61, nil, 24, nil, 75, nil, 382,
- nil, 85, 58, 110, nil, nil, nil, nil, nil, 54,
- 322, 59, 119, nil, nil, 210, nil, nil, 118, nil,
- nil, 170, nil, -6, nil, 135, 108, 10, 197, 277,
- 133, 67, 146, nil, 147, nil, 292, 262, nil, nil,
- nil, nil, nil, 140, nil, nil, 108, nil, 154, nil,
- nil, 164, 216, nil, 165, nil, nil, 337, nil, nil,
- -6, nil, 60, 148, 352, nil, nil, nil, 186, nil,
- 250, nil, 397, nil, nil, nil, nil, nil, nil, nil,
- 427, nil, 367, nil, 307, nil, nil ]
+ 457, nil, 208, 32, nil, 442, 201, nil, nil, 100,
+ nil, nil, 98, nil, 104, nil, 14, -3, nil, 158,
+ nil, -13, nil, nil, 169, nil, 145, nil, 180, nil,
+ -1, nil, nil, nil, nil, 140, nil, nil, nil, 161,
+ nil, nil, nil, nil, nil, 23, -9, nil, 10, nil,
+ 146, 142, 142, 127, nil, nil, nil, 28, nil, 100,
+ 92, 75, 86, nil, 110, 40, 112, nil, 132, 48,
+ 122, nil, 132, nil, 171, 38, 192, 183, nil, 17,
+ 59, nil, nil, 100, 412, 94, 4, 194, 200, nil,
+ 105, nil, 54, 35, nil, 152, nil, nil, 6, 12,
+ 41, 24, nil, 34, nil, 87, nil, 69, nil, 382,
+ nil, 79, 52, 160, nil, nil, nil, nil, nil, 154,
+ 322, 55, 112, nil, nil, 210, nil, nil, 112, nil,
+ nil, 250, nil, -6, nil, 135, 108, 54, 203, 147,
+ 133, 60, 146, nil, 147, nil, 277, 262, nil, nil,
+ nil, nil, nil, 140, nil, nil, 117, nil, -2, nil,
+ nil, 164, 216, nil, 165, nil, nil, 292, nil, -12,
+ nil, 60, 148, 337, nil, nil, nil, 180, nil, 170,
+ nil, 352, nil, nil, 397, nil, nil, nil, nil, nil,
+ 427, nil, 367, nil, nil, 307, nil, nil ]
racc_action_default = [
-98, -12, -118, -118, -13, -1, -118, -14, -2, -33,
@@ -436,93 +436,91 @@ racc_action_default = [
-18, -20, -21, -22, -110, -118, -51, -55, -118, -60,
-56, -50, -118, -33, -52, -85, -54, -49, -65, -53,
-118, -48, -118, -86, -42, -118, -98, -26, -118, -118,
- -98, 197, -118, -108, -118, -118, -116, -118, -43, -118,
+ -98, 198, -118, -108, -118, -118, -116, -118, -43, -118,
-118, -113, -46, -118, -118, -118, -118, -118, -118, -84,
-116, -83, -37, -33, -29, -118, -38, -40, -36, -39,
- -35, -31, -27, -118, -99, -98, -41, -118, -109, -118,
+ -35, -31, -27, -98, -99, -98, -41, -118, -109, -118,
-94, -118, -117, -118, -19, -16, -112, -114, -115, -118,
-118, -118, -118, -80, -79, -118, -82, -81, -118, -73,
-74, -118, -67, -118, -71, -118, -42, -32, -118, -118,
-118, -118, -105, -102, -107, -111, -118, -118, -92, -25,
-44, -45, -47, -63, -57, -61, -118, -76, -118, -68,
- -66, -118, -118, -24, -116, -30, -23, -118, -88, -100,
- -118, -101, -118, -118, -118, -90, -91, -62, -118, -75,
- -118, -78, -118, -72, -28, -87, -103, -104, -106, -89,
- -118, -77, -118, -70, -118, -69, -64 ]
+ -66, -118, -118, -24, -116, -30, -23, -118, -100, -118,
+ -101, -118, -118, -118, -90, -91, -62, -118, -75, -118,
+ -78, -118, -72, -28, -118, -88, -103, -104, -106, -89,
+ -118, -77, -118, -70, -87, -118, -69, -64 ]
racc_goto_table = [
- 5, 76, 34, 43, 32, 8, 58, 42, 62, 111,
- 63, 132, 39, 143, 150, 51, 52, 51, 130, 94,
- 74, 128, 134, 135, 177, 96, 89, 119, 97, 131,
- 90, 83, 138, 129, 101, 156, 103, 114, 30, 43,
- 67, 141, 82, 42, 2, nil, nil, nil, 80, 89,
- 89, 51, nil, nil, 159, nil, 157, nil, 100, 128,
- 107, nil, 99, 106, nil, 134, nil, 92, nil, nil,
- nil, 104, 51, 43, nil, nil, 110, 42, 186, 43,
- 122, 127, 127, 42, 120, 126, 126, 89, 121, 51,
- 123, 123, 165, 89, nil, nil, 183, 184, 96, 89,
- 180, 97, 164, nil, nil, nil, nil, 151, nil, 147,
- 140, 191, nil, 152, 128, nil, 51, 34, nil, 127,
- nil, nil, 51, 126, 89, 127, nil, nil, 123, 126,
- nil, 100, nil, 41, 123, 99, 57, nil, 57, 167,
- 92, nil, 89, nil, 34, 68, 174, nil, nil, nil,
- nil, nil, 181, nil, nil, nil, 127, nil, nil, nil,
- 126, 51, nil, nil, 34, 123, 187, 188, nil, 41,
- nil, 34, 57, 91, 127, 51, 51, nil, 126, nil,
- nil, nil, 192, 123, nil, nil, nil, nil, 98, 34,
- 194, 34, nil, 57, nil, nil, 91, 91, nil, nil,
- nil, nil, nil, 41, nil, nil, nil, nil, nil, 41,
- 57, 124, 124, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, 142,
- nil, nil, nil, nil, 91, nil, nil, 57, nil, nil,
- 91, nil, nil, 57, nil, nil, 91, nil, nil, 124,
- nil, nil, nil, nil, nil, 124, nil, nil, nil, nil,
- nil, 98, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, 91, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, 57, nil, nil, nil, 124, nil, nil, 91,
- nil, nil, nil, nil, 142, nil, 57, 57, nil, nil,
- nil, nil, nil, nil, 124 ]
+ 34, 43, 5, 8, 130, 42, 111, 132, 63, 89,
+ 128, 134, 150, 39, 94, 76, 32, 52, 96, 97,
+ 135, 176, 131, 83, 119, 74, 138, 129, 101, 143,
+ 156, 103, 89, 89, 114, 30, 67, 43, 51, 141,
+ 51, 42, 157, 2, 90, nil, nil, nil, 128, 80,
+ 159, nil, nil, nil, 134, nil, 100, nil, nil, nil,
+ 99, nil, nil, nil, nil, 107, nil, nil, nil, 104,
+ 89, 43, nil, nil, 51, 42, 89, 43, nil, 127,
+ 127, 42, 89, 126, 126, 182, 120, 165, 110, 121,
+ 92, 96, 97, 186, 183, 51, 191, 179, 139, 58,
+ nil, 62, 128, nil, nil, nil, nil, 89, 140, nil,
+ nil, 147, 51, 123, 123, 34, 164, 127, nil, nil,
+ nil, 126, nil, 127, 89, 41, nil, 126, 57, 100,
+ 57, nil, nil, 99, nil, 82, nil, 68, nil, 51,
+ nil, nil, 34, nil, nil, 51, nil, nil, 173, nil,
+ nil, 123, nil, 91, 127, nil, 106, 123, 126, nil,
+ nil, 41, nil, 92, 57, nil, nil, nil, 34, 184,
+ nil, 127, nil, 122, nil, 126, 91, 91, nil, 34,
+ 98, nil, nil, 192, 51, 57, nil, 34, 123, nil,
+ 34, nil, 195, nil, nil, 41, nil, 51, 51, nil,
+ 151, 41, 57, 124, 124, 123, 152, nil, nil, nil,
+ nil, nil, nil, nil, 91, nil, nil, nil, nil, nil,
+ 91, 142, nil, nil, nil, nil, 91, nil, nil, 57,
+ nil, nil, nil, nil, nil, 57, nil, nil, nil, nil,
+ nil, 124, nil, nil, nil, 180, nil, 124, nil, nil,
+ nil, 91, nil, 98, nil, nil, nil, nil, 187, 188,
+ nil, nil, nil, nil, nil, nil, nil, nil, 91, nil,
+ nil, nil, nil, nil, 57, nil, nil, nil, 124, nil,
+ nil, nil, nil, nil, nil, 142, nil, 57, 57, nil,
+ nil, nil, nil, nil, nil, 124 ]
racc_goto_check = [
- 2, 23, 4, 20, 49, 3, 30, 19, 30, 24,
- 20, 40, 16, 51, 31, 25, 37, 25, 44, 26,
- 47, 42, 42, 24, 38, 28, 34, 33, 29, 39,
- 23, 32, 22, 43, 21, 45, 46, 17, 48, 20,
- 5, 50, 30, 19, 1, nil, nil, nil, 16, 34,
- 34, 25, nil, nil, 40, nil, 44, nil, 20, 42,
- 47, nil, 19, 30, nil, 42, nil, 25, nil, nil,
- nil, 3, 25, 20, nil, nil, 49, 19, 51, 20,
- 30, 20, 20, 19, 2, 19, 19, 34, 16, 25,
- 25, 25, 26, 34, nil, nil, 42, 24, 28, 34,
- 33, 29, 23, nil, nil, nil, nil, 30, nil, 2,
- 3, 44, nil, 30, 42, nil, 25, 4, nil, 20,
- nil, nil, 25, 19, 34, 20, nil, nil, 25, 19,
- nil, 20, nil, 18, 25, 19, 18, nil, 18, 2,
- 25, nil, 34, nil, 4, 18, 2, nil, nil, nil,
- nil, nil, 30, nil, nil, nil, 20, nil, nil, nil,
- 19, 25, nil, nil, 4, 25, 30, 30, nil, 18,
- nil, 4, 18, 36, 20, 25, 25, nil, 19, nil,
- nil, nil, 2, 25, nil, nil, nil, nil, 18, 4,
- 2, 4, nil, 18, nil, nil, 36, 36, nil, nil,
- nil, nil, nil, 18, nil, nil, nil, nil, nil, 18,
- 18, 18, 18, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, nil, nil, 18,
- nil, nil, nil, nil, 36, nil, nil, 18, nil, nil,
- 36, nil, nil, 18, nil, nil, 36, nil, nil, 18,
+ 4, 20, 2, 3, 44, 19, 24, 40, 20, 34,
+ 42, 42, 31, 16, 26, 23, 49, 37, 28, 29,
+ 24, 38, 39, 32, 33, 47, 22, 43, 21, 51,
+ 45, 46, 34, 34, 17, 48, 5, 20, 25, 50,
+ 25, 19, 44, 1, 23, nil, nil, nil, 42, 16,
+ 40, nil, nil, nil, 42, nil, 20, nil, nil, nil,
+ 19, nil, nil, nil, nil, 47, nil, nil, nil, 3,
+ 34, 20, nil, nil, 25, 19, 34, 20, nil, 20,
+ 20, 19, 34, 19, 19, 42, 2, 26, 49, 16,
+ 25, 28, 29, 51, 24, 25, 44, 33, 47, 30,
+ nil, 30, 42, nil, nil, nil, nil, 34, 3, nil,
+ nil, 2, 25, 25, 25, 4, 23, 20, nil, nil,
+ nil, 19, nil, 20, 34, 18, nil, 19, 18, 20,
+ 18, nil, nil, 19, nil, 30, nil, 18, nil, 25,
+ nil, nil, 4, nil, nil, 25, nil, nil, 2, nil,
+ nil, 25, nil, 36, 20, nil, 30, 25, 19, nil,
+ nil, 18, nil, 25, 18, nil, nil, nil, 4, 2,
+ nil, 20, nil, 30, nil, 19, 36, 36, nil, 4,
+ 18, nil, nil, 2, 25, 18, nil, 4, 25, nil,
+ 4, nil, 2, nil, nil, 18, nil, 25, 25, nil,
+ 30, 18, 18, 18, 18, 25, 30, nil, nil, nil,
+ nil, nil, nil, nil, 36, nil, nil, nil, nil, nil,
+ 36, 18, nil, nil, nil, nil, 36, nil, nil, 18,
nil, nil, nil, nil, nil, 18, nil, nil, nil, nil,
- nil, 18, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, 36, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, 18, nil, nil, nil, 18, nil, nil, 36,
- nil, nil, nil, nil, 18, nil, 18, 18, nil, nil,
- nil, nil, nil, nil, 18 ]
+ nil, 18, nil, nil, nil, 30, nil, 18, nil, nil,
+ nil, 36, nil, 18, nil, nil, nil, nil, 30, 30,
+ nil, nil, nil, nil, nil, nil, nil, nil, 36, nil,
+ nil, nil, nil, nil, 18, nil, nil, nil, 18, nil,
+ nil, nil, nil, nil, nil, 18, nil, 18, 18, nil,
+ nil, nil, nil, nil, nil, 18 ]
racc_goto_pointer = [
- nil, 44, 0, 5, -3, 19, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, 3, -42, 124, -2,
- -6, -30, -69, -34, -67, 3, -45, nil, -39, -36,
- -6, -98, -17, -56, -38, nil, 109, 4, -129, -59,
- -77, nil, -66, -54, -69, -90, -30, -10, 35, 1,
- -64, -92, nil ]
+ nil, 43, 2, 3, -5, 15, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 4, -45, 116, -4,
+ -8, -36, -75, -20, -70, 26, -50, nil, -46, -45,
+ 87, -100, -25, -59, -55, nil, 89, 5, -132, -66,
+ -81, nil, -77, -60, -83, -95, -35, -5, 32, 13,
+ -66, -76, nil ]
racc_goto_default = [
nil, nil, nil, 73, 11, 13, 15, 18, 22, 23,
@@ -1235,30 +1233,46 @@ module_eval <<'.,.,', 'grammar.ra', 401
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 408
+module_eval <<'.,.,', 'grammar.ra', 415
def _reduce_87( val, _values, result )
- result = ast AST::CompDef,
+ args = {
+ :type => ast(AST::Name, :value => val[1]),
:args => val[2],
:keyword => val[0],
- :code => val[4]
+ :code => val[5]
+ }
+
+ if val[3].instance_of?(AST::Name)
+ args[:parentclass] = val[3]
+ end
+ result = ast AST::CompDef, args
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 413
+module_eval <<'.,.,', 'grammar.ra', 428
def _reduce_88( val, _values, result )
- result = ast AST::CompDef,
+ args = {
+ :type => ast(AST::Name, :value => val[1]),
:args => val[2],
:keyword => val[0],
- :code => ast(AST::ASTArray, :children => [])
+ :code => ast(AST::ASTArray)
+ }
+
+ if val[3].instance_of?(AST::Name)
+ args[:parentclass] = val[3]
+ end
+
+ result = ast AST::CompDef,args
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 427
+module_eval <<'.,.,', 'grammar.ra', 443
def _reduce_89( val, _values, result )
#:args => val[2],
args = {
+ :type => ast(AST::Name, :value => val[1]),
:keyword => val[0],
:code => val[4]
}
@@ -1271,9 +1285,10 @@ module_eval <<'.,.,', 'grammar.ra', 427
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 437
+module_eval <<'.,.,', 'grammar.ra', 454
def _reduce_90( val, _values, result )
args = {
+ :type => ast(AST::Name, :value => val[1]),
:keyword => val[0],
:code => ast(AST::ASTArray, :children => [])
}
@@ -1286,7 +1301,7 @@ module_eval <<'.,.,', 'grammar.ra', 437
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 455
+module_eval <<'.,.,', 'grammar.ra', 472
def _reduce_91( val, _values, result )
unless val[1].instance_of?(AST::ASTArray)
val[1] = ast AST::ASTArray,
@@ -1307,7 +1322,7 @@ module_eval <<'.,.,', 'grammar.ra', 455
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 471
+module_eval <<'.,.,', 'grammar.ra', 488
def _reduce_92( val, _values, result )
unless val[1].instance_of?(AST::ASTArray)
val[1] = ast AST::ASTArray,
@@ -1330,7 +1345,7 @@ module_eval <<'.,.,', 'grammar.ra', 471
# reduce 93 omitted
-module_eval <<'.,.,', 'grammar.ra', 482
+module_eval <<'.,.,', 'grammar.ra', 499
def _reduce_94( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
result = val[0]
@@ -1342,28 +1357,28 @@ module_eval <<'.,.,', 'grammar.ra', 482
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 486
+module_eval <<'.,.,', 'grammar.ra', 503
def _reduce_95( val, _values, result )
result = ast AST::HostName, :value => val[0]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 488
+module_eval <<'.,.,', 'grammar.ra', 505
def _reduce_96( val, _values, result )
result = ast AST::HostName, :value => val[0]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 490
+module_eval <<'.,.,', 'grammar.ra', 507
def _reduce_97( val, _values, result )
result = ast AST::Default, :value => val[0]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 494
+module_eval <<'.,.,', 'grammar.ra', 511
def _reduce_98( val, _values, result )
result = ast AST::ASTArray, :children => []
result
@@ -1372,14 +1387,14 @@ module_eval <<'.,.,', 'grammar.ra', 494
# reduce 99 omitted
-module_eval <<'.,.,', 'grammar.ra', 499
+module_eval <<'.,.,', 'grammar.ra', 516
def _reduce_100( val, _values, result )
result = val[1]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 506
+module_eval <<'.,.,', 'grammar.ra', 523
def _reduce_101( val, _values, result )
if val[1].instance_of?(AST::ASTArray)
result = val[1]
@@ -1392,7 +1407,7 @@ module_eval <<'.,.,', 'grammar.ra', 506
# reduce 102 omitted
-module_eval <<'.,.,', 'grammar.ra', 516
+module_eval <<'.,.,', 'grammar.ra', 533
def _reduce_103( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
val[0].push(val[2])
@@ -1404,7 +1419,7 @@ module_eval <<'.,.,', 'grammar.ra', 516
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 524
+module_eval <<'.,.,', 'grammar.ra', 541
def _reduce_104( val, _values, result )
msg = "Deprecation notice: Variables must now include '$' in prototypes"
msg += " at line %s" % @lexer.line
@@ -1415,7 +1430,7 @@ module_eval <<'.,.,', 'grammar.ra', 524
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 531
+module_eval <<'.,.,', 'grammar.ra', 548
def _reduce_105( val, _values, result )
msg = "Deprecation notice: Variables must now include '$' in prototypes"
msg += " at line %s" % @lexer.line
@@ -1426,14 +1441,14 @@ module_eval <<'.,.,', 'grammar.ra', 531
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 533
+module_eval <<'.,.,', 'grammar.ra', 550
def _reduce_106( val, _values, result )
result = ast AST::CompArgument, :children => [val[0],val[2]]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 535
+module_eval <<'.,.,', 'grammar.ra', 552
def _reduce_107( val, _values, result )
result = ast AST::CompArgument, :children => [val[0]]
result
@@ -1442,14 +1457,14 @@ module_eval <<'.,.,', 'grammar.ra', 535
# reduce 108 omitted
-module_eval <<'.,.,', 'grammar.ra', 540
+module_eval <<'.,.,', 'grammar.ra', 557
def _reduce_109( val, _values, result )
result = ast AST::Name, :value => val[1]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 545
+module_eval <<'.,.,', 'grammar.ra', 562
def _reduce_110( val, _values, result )
name = val[0].sub(/^\$/,'')
result = ast AST::Variable, :value => name
@@ -1457,14 +1472,14 @@ module_eval <<'.,.,', 'grammar.ra', 545
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 550
+module_eval <<'.,.,', 'grammar.ra', 567
def _reduce_111( val, _values, result )
result = ast AST::Name, :value => val[0].sub(/^\$/,'')
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 558
+module_eval <<'.,.,', 'grammar.ra', 575
def _reduce_112( val, _values, result )
if val[1].instance_of?(AST::ASTArray)
result = val[1]
@@ -1475,7 +1490,7 @@ module_eval <<'.,.,', 'grammar.ra', 558
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 560
+module_eval <<'.,.,', 'grammar.ra', 577
def _reduce_113( val, _values, result )
result = ast AST::ASTArray
result
@@ -1488,7 +1503,7 @@ module_eval <<'.,.,', 'grammar.ra', 560
# reduce 116 omitted
-module_eval <<'.,.,', 'grammar.ra', 565
+module_eval <<'.,.,', 'grammar.ra', 582
def _reduce_117( val, _values, result )
result = nil
result
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index f800c38ec..bff1f24a0 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -475,6 +475,7 @@ module Puppet::Parser
hash[:declarative] = true
end
self.istop(hash[:declarative])
+ @inside = nil
else
# This is here, rather than in newchild(), so that all
# of the later variable initialization works.
@@ -484,6 +485,7 @@ module Puppet::Parser
@interp = @parent.interp
@topscope = @parent.topscope
@context = @parent.context
+ @inside = @parent.inside
end
# Our child scopes and objects
@@ -525,6 +527,19 @@ module Puppet::Parser
}
end
+ # Associate the object directly with the scope, so that contained objects
+ # can look up what container they're running within.
+ def inside(arg = nil)
+ return @inside unless arg
+
+ old = @inside
+ @inside = arg
+ yield
+ ensure
+ #Puppet.warning "exiting %s" % @inside.name
+ @inside = old
+ end
+
# Mark that we're the top scope, and set some hard-coded info.
def istop(declarative = true)
# the level is mostly used for debugging
@@ -797,6 +812,12 @@ module Puppet::Parser
# Define our type.
def settype(name,ltype)
+ unless name
+ raise Puppet::DevError, "Got told to set type with a nil type"
+ end
+ unless ltype
+ raise Puppet::DevError, "Got told to set type with a nil object"
+ end
# Don't let them redefine the class in this scope.
if @typetable.include?(name)
raise Puppet::ParseError,