diff options
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r-- | lib/puppet/parser/ast.rb | 47 | ||||
-rw-r--r-- | lib/puppet/parser/grammar.ra | 18 | ||||
-rw-r--r-- | lib/puppet/parser/parser.rb | 48 | ||||
-rw-r--r-- | lib/puppet/parser/scope.rb | 5 |
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" % |