summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/ast.rb47
-rw-r--r--lib/puppet/parser/grammar.ra18
-rw-r--r--lib/puppet/parser/parser.rb48
-rw-r--r--lib/puppet/parser/scope.rb5
4 files changed, 79 insertions, 39 deletions
diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
index 6a0ec2bd4..196e2447d 100644
--- a/lib/puppet/parser/ast.rb
+++ b/lib/puppet/parser/ast.rb
@@ -49,6 +49,8 @@ module Puppet
self.evaluate(*args)
rescue Puppet::DevError
raise
+ rescue Puppet::ParseError
+ raise
rescue => detail
if Puppet[:debug]
puts caller
@@ -200,8 +202,8 @@ module Puppet
@children.each { |child|
unless child.is_a?(AST)
- Puppet.err("child %s is not an ast" % child)
- exit
+ raise Puppet::DevError,
+ "child %s is not an ast" % child
end
}
return self
@@ -436,6 +438,19 @@ module Puppet
raise error
end
+ unless object
+ begin
+ Puppet::Type.type(objtype)
+ rescue TypeError
+ error = Puppet::ParseError.new(
+ "Invalid type %s" % objtype
+ )
+ error.line = @line
+ error.file = @file
+ raise error
+ end
+ end
+
# 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
@@ -1017,11 +1032,7 @@ module Puppet
# FIXME This creates a global list of types and their
# acceptable arguments. This should really be scoped
# instead.
- begin
@@settypes[@name.value] = self
- rescue
- raise "wtf?"
- end
end
def tree(indent = 0)
@@ -1057,7 +1068,7 @@ module Puppet
return true
# a nil parentclass is an empty astarray
# stupid but true
- elsif defined? @parentclass and ! @parentclass.is_a?(AST::ASTArray)
+ elsif @parentclass
parent = @@settypes[@parentclass.value]
if parent and parent != []
return parent.validarg?(param)
@@ -1079,7 +1090,11 @@ module Puppet
attr_accessor :parentclass
def each
- [@name,@args,@parentclass,@code].each { |child| yield child }
+ if @parentclass
+ [@name,@args,@parentclass,@code].each { |child| yield child }
+ else
+ [@name,@args,@code].each { |child| yield child }
+ end
end
def evaluate(scope)
@@ -1092,9 +1107,9 @@ module Puppet
:code => @code
}
- parent = @parentclass.safeevaluate(scope)
-
- if parent == []
+ if @parentclass
+ parent = @parentclass.safeevaluate(scope)
+ else
parent = nil
end
@@ -1136,6 +1151,10 @@ module Puppet
end
end
+ def initialize(hash)
+ super
+ end
+
def tree(indent = 0)
return [
@name.tree(indent + 1),
@@ -1304,9 +1323,6 @@ module Puppet
def initialize(hash)
@parentclass = nil
super
- if self.parent.is_a?(Array)
- self.parent = nil
- end
end
end
@@ -1334,7 +1350,8 @@ module Puppet
end
unless parentobj
error = Puppet::ParseError.new(
- "Could not find parent '%s' of '%s'" % [@parentclass,@name])
+ "Could not find parent '%s' of '%s'" %
+ [@parentclass,@name])
error.line = self.line
error.file = self.file
raise error
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index f63aea58b..8f9b713f2 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -409,6 +409,10 @@ import: IMPORT QTEXT {
if dir == ""
dir = "."
end
+ result = AST::ASTArray.new(
+ :file => @lexer.file,
+ :line => @lexer.line
+ )
Dir.chdir(dir) {
Dir.glob(val[1]).each { |file|
parser = Puppet::Parser::Parser.new()
@@ -427,7 +431,8 @@ import: IMPORT QTEXT {
)
next
end
- result = parser.parse
+ # push the results into the main result array
+ result.push parser.parse
}
}
}
@@ -443,14 +448,19 @@ definition: DEFINE NAME argumentlist LBRACE statements RBRACE {
}
hostclass: CLASS NAME argumentlist parent LBRACE statements RBRACE {
- result = AST::ClassDef.new(
+ args = {
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
:args => val[2],
- :parentclass => val[3],
:file => @lexer.file,
:line => @lexer.line,
:code => val[5]
- )
+ }
+ # It'll be an ASTArray if we didn't get a parent
+ if val[3].is_a?(AST::Name)
+ Puppet.notice "Assigning parent of %s as %s" % [val[1], val[3].value]
+ args[:parentclass] = val[3]
+ end
+ result = AST::ClassDef.new(args)
}
#nodedef: NODE words LBRACE statements RBRACE {
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index f7a80b22f..330609d46 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -31,7 +31,7 @@ module Puppet
class Parser < Racc::Parser
-module_eval <<'..end grammar.ra modeval..id9842a85864', 'grammar.ra', 569
+module_eval <<'..end grammar.ra modeval..id29ad235e83', 'grammar.ra', 579
attr_writer :stack
attr_reader :file
@@ -135,7 +135,7 @@ end
def string=(string)
@lexer.string = string
end
-..end grammar.ra modeval..id9842a85864
+..end grammar.ra modeval..id29ad235e83
##### racc 1.4.4 generates ###
@@ -1012,7 +1012,7 @@ module_eval <<'.,.,', 'grammar.ra', 400
# reduce 61 omitted
-module_eval <<'.,.,', 'grammar.ra', 433
+module_eval <<'.,.,', 'grammar.ra', 438
def _reduce_62( val, _values, result )
# importing files
# yuk, i hate keywords
@@ -1022,6 +1022,10 @@ module_eval <<'.,.,', 'grammar.ra', 433
if dir == ""
dir = "."
end
+ result = AST::ASTArray.new(
+ :file => @lexer.file,
+ :line => @lexer.line
+ )
Dir.chdir(dir) {
Dir.glob(val[1]).each { |file|
parser = Puppet::Parser::Parser.new()
@@ -1040,14 +1044,15 @@ module_eval <<'.,.,', 'grammar.ra', 433
)
next
end
- result = parser.parse
+ # push the results into the main result array
+ result.push parser.parse
}
}
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 443
+module_eval <<'.,.,', 'grammar.ra', 448
def _reduce_63( val, _values, result )
result = AST::CompDef.new(
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
@@ -1060,21 +1065,26 @@ module_eval <<'.,.,', 'grammar.ra', 443
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 454
+module_eval <<'.,.,', 'grammar.ra', 464
def _reduce_64( val, _values, result )
- result = AST::ClassDef.new(
+ args = {
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
:args => val[2],
- :parentclass => val[3],
:file => @lexer.file,
:line => @lexer.line,
:code => val[5]
- )
+ }
+ # It'll be an ASTArray if we didn't get a parent
+ if val[3].is_a?(AST::Name)
+ Puppet.notice "Assigning parent of %s as %s" % [val[1], val[3].value]
+ args[:parentclass] = val[3]
+ end
+ result = AST::ClassDef.new(args)
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 469
+module_eval <<'.,.,', 'grammar.ra', 479
def _reduce_65( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
@@ -1087,14 +1097,14 @@ module_eval <<'.,.,', 'grammar.ra', 469
# reduce 66 omitted
-module_eval <<'.,.,', 'grammar.ra', 474
+module_eval <<'.,.,', 'grammar.ra', 484
def _reduce_67( val, _values, result )
result = val[1]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 485
+module_eval <<'.,.,', 'grammar.ra', 495
def _reduce_68( val, _values, result )
if val[1].is_a?(AST::ASTArray)
result = val[1]
@@ -1111,7 +1121,7 @@ module_eval <<'.,.,', 'grammar.ra', 485
# reduce 69 omitted
-module_eval <<'.,.,', 'grammar.ra', 499
+module_eval <<'.,.,', 'grammar.ra', 509
def _reduce_70( val, _values, result )
if val[0].is_a?(AST::ASTArray)
val[0].push(val[2])
@@ -1127,7 +1137,7 @@ module_eval <<'.,.,', 'grammar.ra', 499
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 507
+module_eval <<'.,.,', 'grammar.ra', 517
def _reduce_71( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
@@ -1138,7 +1148,7 @@ module_eval <<'.,.,', 'grammar.ra', 507
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 514
+module_eval <<'.,.,', 'grammar.ra', 524
def _reduce_72( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
@@ -1151,7 +1161,7 @@ module_eval <<'.,.,', 'grammar.ra', 514
# reduce 73 omitted
-module_eval <<'.,.,', 'grammar.ra', 523
+module_eval <<'.,.,', 'grammar.ra', 533
def _reduce_74( val, _values, result )
result = AST::Name.new(
:value => val[1],
@@ -1162,7 +1172,7 @@ module_eval <<'.,.,', 'grammar.ra', 523
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 532
+module_eval <<'.,.,', 'grammar.ra', 542
def _reduce_75( val, _values, result )
name = val[0].sub(/^\$/,'')
result = AST::Variable.new(
@@ -1174,7 +1184,7 @@ module_eval <<'.,.,', 'grammar.ra', 532
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 541
+module_eval <<'.,.,', 'grammar.ra', 551
def _reduce_76( val, _values, result )
if val[1].is_a?(AST::ASTArray)
result = val[1]
@@ -1192,7 +1202,7 @@ module_eval <<'.,.,', 'grammar.ra', 541
# reduce 79 omitted
-module_eval <<'.,.,', 'grammar.ra', 546
+module_eval <<'.,.,', 'grammar.ra', 556
def _reduce_80( val, _values, result )
result = nil
result
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index 0c1f56f33..4779fabe7 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -113,7 +113,8 @@ module Puppet
table = @map[type]
if table.nil?
error = Puppet::ParseError.new(
- "Could not retrieve %s table at level %s" % [type,self.level]
+ "Could not retrieve %s table at level %s" %
+ [type,self.level]
)
error.stack = caller
raise error
@@ -175,6 +176,7 @@ module Puppet
if value == :undefined
return nil
else
+ Puppet.debug "Found type %s" % name
return value
end
end
@@ -350,6 +352,7 @@ module Puppet
results = []
@children.each { |child|
+ Puppet.notice "Transing child of type %s" % child.class
if child.is_a?(Scope)
cresult = child.to_trans
Puppet.debug "Got %s from scope %s" %