diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-05-13 18:27:22 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-05-13 18:27:22 +0000 |
commit | 9e9ef1acc6231254e52b96257ed1e81475d2d1bc (patch) | |
tree | db3fec56ad53ee8741c1c07e56e4f965e1f24320 /lib/puppet/parser | |
parent | 8ed666a7c202420d4bc59cea77f3bd0bec95cc11 (diff) | |
download | puppet-9e9ef1acc6231254e52b96257ed1e81475d2d1bc.tar.gz puppet-9e9ef1acc6231254e52b96257ed1e81475d2d1bc.tar.xz puppet-9e9ef1acc6231254e52b96257ed1e81475d2d1bc.zip |
The "collectable" syntax now works end-to-end -- the parser correctly recognizes it, the AST objects retain the settings, the scopes do the right conversion, the interpreter stores them all in the database, and then it strips the collectable objects out before sending the object list to the client
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1189 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r-- | lib/puppet/parser/ast/objectdef.rb | 7 | ||||
-rw-r--r-- | lib/puppet/parser/grammar.ra | 22 | ||||
-rw-r--r-- | lib/puppet/parser/interpreter.rb | 10 | ||||
-rw-r--r-- | lib/puppet/parser/lexer.rb | 3 | ||||
-rw-r--r-- | lib/puppet/parser/parser.rb | 799 | ||||
-rw-r--r-- | lib/puppet/parser/scope.rb | 120 |
6 files changed, 474 insertions, 487 deletions
diff --git a/lib/puppet/parser/ast/objectdef.rb b/lib/puppet/parser/ast/objectdef.rb index 9acf56b49..f15a082e2 100644 --- a/lib/puppet/parser/ast/objectdef.rb +++ b/lib/puppet/parser/ast/objectdef.rb @@ -2,7 +2,7 @@ class Puppet::Parser::AST # Any normal puppet object declaration. Can result in a class or a # component, in addition to builtin types. class ObjectDef < AST::Branch - attr_accessor :name, :type + attr_accessor :name, :type, :collectable attr_reader :params # probably not used at all @@ -93,6 +93,11 @@ class Puppet::Parser::AST :file => @file, :line => @line ) + + # Retain our collectable marking + if self.collectable + obj.collectable = true + end rescue Puppet::ParseError => except except.line = self.line except.file = self.file diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra index c3b694534..b10999bbd 100644 --- a/lib/puppet/parser/grammar.ra +++ b/lib/puppet/parser/grammar.ra @@ -7,7 +7,7 @@ class Puppet::Parser::Parser token LBRACK DQTEXT SQTEXT 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 INCLUDE TAG FUNCTION +token NAME SEMIC CASE DEFAULT FUNCTION AT # We have 2 shift/reduce conflicts expect 2 @@ -40,6 +40,7 @@ statements: statement # The main list of valid statements statement: object + | collectable | assignment | casestatement | import @@ -148,6 +149,25 @@ object: name LBRACE objectinstances endsemi RBRACE { ) } +# Collectable objects; these get stored in the database, instead of +# being passed to the client. +collectable: AT object { + if val[1].is_a? AST::TypeDefaults + raise Puppet::ParseError, "Defaults are not collectable" + end + + # Just mark our objects as collectable and pass them through. + if val[1].instance_of?(AST::ASTArray) + val[1].each do |obj| + obj.collectable = true + end + else + val[1].collectable = true + end + + result = val[1] +} + objectinst: objectname COLON params endcomma { result = AST::ObjectInst.new( :line => @lexer.line, diff --git a/lib/puppet/parser/interpreter.rb b/lib/puppet/parser/interpreter.rb index a11e870ab..5ddd82829 100644 --- a/lib/puppet/parser/interpreter.rb +++ b/lib/puppet/parser/interpreter.rb @@ -246,13 +246,21 @@ module Puppet raise LoadError, "storeconfigs is enabled but rails is unavailable" end - Puppet::Rails.init end + + Puppet::Rails.init + + # We store all of the objects, even the collectable ones Puppet::Rails::Host.store( :objects => objects, :host => client, :facts => facts ) + + # Now that we've stored everything, we need to strip out + # the collectable objects so that they are not sent on + # to the host + objects.collectstrip! end return objects diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb index e3fc9ded7..65a513624 100644 --- a/lib/puppet/parser/lexer.rb +++ b/lib/puppet/parser/lexer.rb @@ -34,6 +34,9 @@ module Puppet %r{,} => :COMMA, %r{\.} => :DOT, %r{:} => :COLON, + %r{@} => :AT, + %r{<\|} => :LCOLLECT, + %r{\|>} => :RCOLLECT, %r{;} => :SEMIC, %r{\?} => :QMARK, %r{\\} => :BACKSLASH, diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb index 7a5fd7c55..5b3495a8c 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..id81e5fd5119', 'grammar.ra', 737 +module_eval <<'..end grammar.ra modeval..id4642cdeefd', 'grammar.ra', 757 require 'puppet/parser/functions' attr_reader :file @@ -155,52 +155,54 @@ end # $Id$ -..end grammar.ra modeval..id81e5fd5119 +..end grammar.ra modeval..id4642cdeefd ##### racc 1.4.4 generates ### racc_reduce_table = [ 0, 0, :racc_error, - 1, 44, :_reduce_1, + 1, 43, :_reduce_1, + 1, 44, :_reduce_none, + 2, 44, :_reduce_3, 1, 45, :_reduce_none, - 2, 45, :_reduce_3, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 1, 46, :_reduce_none, - 4, 51, :_reduce_12, - 2, 51, :_reduce_13, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 1, 45, :_reduce_none, + 4, 51, :_reduce_13, + 2, 51, :_reduce_14, 1, 55, :_reduce_none, - 3, 55, :_reduce_15, + 3, 55, :_reduce_16, 1, 56, :_reduce_none, 1, 56, :_reduce_none, - 5, 47, :_reduce_18, - 5, 47, :_reduce_19, - 5, 47, :_reduce_20, - 4, 64, :_reduce_21, + 5, 46, :_reduce_19, + 5, 46, :_reduce_20, + 5, 46, :_reduce_21, + 2, 47, :_reduce_22, + 4, 64, :_reduce_23, 1, 59, :_reduce_none, - 3, 59, :_reduce_23, + 3, 59, :_reduce_25, 0, 60, :_reduce_none, 1, 60, :_reduce_none, - 1, 57, :_reduce_26, - 1, 63, :_reduce_27, + 1, 57, :_reduce_28, + 1, 63, :_reduce_29, 1, 65, :_reduce_none, 1, 65, :_reduce_none, 1, 65, :_reduce_none, 1, 65, :_reduce_none, 1, 65, :_reduce_none, 1, 65, :_reduce_none, - 3, 48, :_reduce_34, - 0, 61, :_reduce_35, - 1, 61, :_reduce_36, - 3, 61, :_reduce_37, - 3, 70, :_reduce_38, + 3, 48, :_reduce_36, + 0, 61, :_reduce_37, + 1, 61, :_reduce_38, + 3, 61, :_reduce_39, + 3, 70, :_reduce_40, 1, 71, :_reduce_none, - 3, 71, :_reduce_40, + 3, 71, :_reduce_42, 1, 69, :_reduce_none, 1, 69, :_reduce_none, 1, 69, :_reduce_none, @@ -211,258 +213,268 @@ racc_reduce_table = [ 1, 69, :_reduce_none, 1, 69, :_reduce_none, 1, 69, :_reduce_none, - 4, 75, :_reduce_51, - 1, 66, :_reduce_52, - 1, 66, :_reduce_53, - 1, 73, :_reduce_54, - 4, 74, :_reduce_55, - 5, 49, :_reduce_56, + 4, 75, :_reduce_53, + 1, 66, :_reduce_54, + 1, 66, :_reduce_55, + 1, 73, :_reduce_56, + 4, 74, :_reduce_57, + 5, 49, :_reduce_58, 1, 76, :_reduce_none, - 2, 76, :_reduce_58, - 5, 77, :_reduce_59, - 4, 77, :_reduce_60, + 2, 76, :_reduce_60, + 5, 77, :_reduce_61, + 4, 77, :_reduce_62, 1, 78, :_reduce_none, - 3, 78, :_reduce_62, - 3, 67, :_reduce_63, + 3, 78, :_reduce_64, + 3, 67, :_reduce_65, 1, 80, :_reduce_none, - 3, 80, :_reduce_65, + 3, 80, :_reduce_67, 1, 82, :_reduce_none, - 3, 82, :_reduce_67, - 3, 81, :_reduce_68, + 3, 82, :_reduce_69, + 3, 81, :_reduce_70, 1, 79, :_reduce_none, 1, 79, :_reduce_none, 1, 79, :_reduce_none, 1, 79, :_reduce_none, 1, 79, :_reduce_none, 1, 79, :_reduce_none, - 1, 79, :_reduce_75, - 2, 50, :_reduce_76, - 6, 52, :_reduce_77, - 5, 52, :_reduce_78, - 6, 53, :_reduce_79, - 5, 53, :_reduce_80, - 6, 54, :_reduce_81, - 5, 54, :_reduce_82, + 1, 79, :_reduce_77, + 2, 50, :_reduce_78, + 6, 52, :_reduce_79, + 5, 52, :_reduce_80, + 6, 53, :_reduce_81, + 5, 53, :_reduce_82, + 6, 54, :_reduce_83, + 5, 54, :_reduce_84, 1, 85, :_reduce_none, - 2, 85, :_reduce_84, - 1, 86, :_reduce_85, - 1, 86, :_reduce_86, - 0, 87, :_reduce_87, + 2, 85, :_reduce_86, + 1, 86, :_reduce_87, + 1, 86, :_reduce_88, + 0, 87, :_reduce_89, 1, 83, :_reduce_none, - 3, 83, :_reduce_89, - 3, 83, :_reduce_90, + 3, 83, :_reduce_91, + 3, 83, :_reduce_92, 1, 88, :_reduce_none, - 3, 88, :_reduce_92, - 3, 89, :_reduce_93, - 1, 89, :_reduce_94, + 3, 88, :_reduce_94, + 3, 89, :_reduce_95, + 1, 89, :_reduce_96, 1, 84, :_reduce_none, - 2, 84, :_reduce_96, - 1, 58, :_reduce_97, - 3, 68, :_reduce_98, + 2, 84, :_reduce_98, + 1, 58, :_reduce_99, + 3, 68, :_reduce_100, 1, 72, :_reduce_none, 1, 72, :_reduce_none, 0, 62, :_reduce_none, - 1, 62, :_reduce_102 ] + 1, 62, :_reduce_104 ] -racc_reduce_n = 103 +racc_reduce_n = 105 -racc_shift_n = 170 +racc_shift_n = 173 racc_action_table = [ - 32, 27, 28, 146, 51, 32, 27, 28, 58, 91, - 161, 87, 106, 107, 91, 149, 80, 32, 27, 28, - 25, 39, 32, 27, 28, 87, 39, 145, -69, 7, - 46, 39, 85, 3, 7, 46, 50, 40, 3, 7, - 44, 51, 40, 39, 7, 44, 122, 46, 39, 123, - 3, 7, 46, 39, 40, 3, 7, 44, 39, 40, - 93, 7, 44, 32, 27, 28, 7, 85, 32, 27, - 28, 39, 135, 50, 97, 49, 27, 28, 134, 7, - 32, 27, 28, -70, 91, 32, 27, 28, 125, 39, - 127, 98, -70, 46, 39, -73, 3, 7, 46, 82, - 40, 3, 65, 44, 130, 40, 39, 131, 44, 87, - 46, 39, 103, 3, 7, 46, 97, 40, 3, 7, - 44, 136, 40, 137, 94, 44, 32, 27, 28, -74, - 104, 32, 27, 28, 106, 107, -72, 81, 144, 93, - 79, -72, -71, 152, 27, 28, 74, 97, 7, 27, - 28, 59, 39, 148, 49, 48, 46, 39, -69, 3, - 7, 46, 162, 40, 3, 7, 44, 47, 40, 39, - 29, 44, -71, 46, 39, 25, 3, 7, 46, 23, - 40, 3, 7, 44, 141, 40, 27, 28, 44, nil, - nil, 27, 28, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 27, 28, nil, 114, nil, 27, 28, - nil, 39, nil, nil, nil, 46, 39, nil, 3, 7, - 46, nil, 40, 3, 7, 44, nil, 40, 39, nil, - 44, 169, 46, 39, nil, 3, 7, 46, nil, 40, - 3, 7, 44, nil, 40, nil, 151, 44, nil, 6, - 9, nil, 13, 15, nil, 19, nil, nil, nil, 3, - 7, 158, 11, nil, 6, 9, 20, 13, 15, nil, - 19, nil, nil, nil, 3, 7, 164, 11, nil, 6, - 9, 20, 13, 15, nil, 19, nil, nil, nil, 3, - 7, 165, 11, nil, 6, 9, 20, 13, 15, nil, - 19, nil, nil, nil, 3, 7, 168, 11, nil, 6, - 9, 20, 13, 15, nil, 19, nil, nil, nil, 3, - 7, 139, 11, nil, 6, 9, 20, 13, 15, nil, - 19, nil, nil, nil, 3, 7, 154, 11, nil, 6, - 9, 20, 13, 15, nil, 19, nil, nil, nil, 3, - 7, nil, 11, nil, 6, 9, 20, 13, 15, nil, - 19, nil, nil, nil, 3, 7, nil, 11, nil, 6, - 9, 20, 13, 15, nil, 19, nil, nil, nil, 3, - 7, nil, 11, nil, 6, 9, 20, 13, 15, nil, - 19, nil, nil, nil, 3, 7, nil, 11, nil, nil, - nil, 20 ] + 33, 28, 29, 58, 149, 40, 33, 28, 29, 140, + 58, 56, 40, 7, -76, 33, 28, 29, 89, -72, + 7, 33, 28, 29, 128, 138, 40, 84, 148, 87, + 47, 137, 40, 3, 7, 57, 47, 41, 42, 3, + 7, 40, 57, 41, 42, 47, -74, 40, 3, 67, + 54, 47, 41, 42, 3, 7, 40, 100, 41, 42, + 33, 28, 29, 40, 7, 107, 33, 28, 29, 109, + 110, 7, 89, 28, 29, 33, 28, 29, 152, 3, + 7, 33, 28, 29, 125, 164, 40, 109, 110, 126, + 47, 97, 40, 3, 7, 96, 47, 41, 42, 3, + 7, 40, 96, 41, 42, 47, 100, 40, 3, 7, + 130, 47, 41, 42, 3, 7, 83, -74, 41, 42, + 33, 28, 29, 133, 134, 91, 33, 28, 29, 82, + 91, -71, 139, 26, -72, 81, 28, 29, -73, 144, + 76, -71, 28, 29, 147, -73, 40, 61, 95, 91, + 47, 155, 40, 3, 7, 56, 47, 41, 42, 3, + 7, 40, 100, 41, 42, 47, 7, 40, 3, 7, + 106, 47, 41, 42, 3, 7, 28, 29, 41, 42, + 151, 89, 28, 29, 49, 7, 165, 48, 30, 101, + 26, 28, 29, 87, -75, nil, nil, 28, 29, nil, + 117, 40, nil, nil, nil, 47, nil, 40, 3, 7, + nil, 47, 41, 42, 3, 7, 40, 157, 41, 42, + 47, nil, 40, 3, 7, nil, 47, 41, 42, 3, + 7, nil, nil, 41, 42, 6, 9, 142, 13, 15, + nil, 21, nil, nil, nil, 3, 7, nil, 11, nil, + 16, 18, nil, nil, 161, 6, 9, nil, 13, 15, + nil, 21, nil, nil, nil, 3, 7, nil, 11, nil, + 16, 18, 6, 9, 167, 13, 15, nil, 21, nil, + nil, nil, 3, 7, nil, 11, nil, 16, 18, nil, + nil, 168, 6, 9, nil, 13, 15, nil, 21, nil, + nil, nil, 3, 7, nil, 11, nil, 16, 18, 6, + 9, 171, 13, 15, nil, 21, nil, nil, nil, 3, + 7, nil, 11, nil, 16, 18, nil, nil, 154, 6, + 9, nil, 13, 15, nil, 21, nil, nil, nil, 3, + 7, nil, 11, nil, 16, 18, 6, 9, 172, 13, + 15, nil, 21, nil, nil, nil, 3, 7, nil, 11, + nil, 16, 18, nil, nil, nil, 6, 9, nil, 13, + 15, nil, 21, nil, nil, nil, 3, 7, nil, 11, + nil, 16, 18, 6, 9, nil, 13, 15, nil, 21, + nil, nil, nil, 3, 7, nil, 11, nil, 16, 18, + 6, 9, nil, 13, 15, nil, 21, nil, nil, nil, + 3, 7, nil, 11, nil, 16, 18 ] racc_action_check = [ - 47, 47, 47, 118, 19, 105, 105, 105, 20, 121, - 143, 98, 143, 143, 54, 121, 35, 80, 80, 80, - 35, 20, 32, 32, 32, 49, 47, 118, 35, 20, - 47, 105, 48, 47, 47, 105, 19, 47, 105, 105, - 47, 52, 105, 80, 74, 105, 84, 80, 32, 85, - 80, 80, 32, 91, 80, 32, 32, 80, 82, 32, - 87, 91, 32, 94, 94, 94, 82, 52, 25, 25, - 25, 58, 99, 52, 88, 43, 6, 6, 99, 58, - 11, 11, 11, 43, 92, 136, 136, 136, 89, 94, - 92, 73, 70, 94, 25, 45, 94, 94, 25, 44, - 94, 25, 25, 94, 95, 25, 11, 96, 25, 97, - 11, 136, 75, 11, 11, 136, 68, 11, 136, 136, - 11, 101, 136, 102, 67, 136, 93, 93, 93, 41, - 78, 141, 141, 141, 78, 78, 37, 36, 116, 65, - 33, 64, 30, 124, 81, 81, 29, 133, 135, 120, - 120, 23, 93, 120, 17, 15, 93, 141, 63, 93, - 93, 141, 145, 93, 141, 141, 93, 13, 141, 81, - 9, 141, 60, 81, 120, 4, 81, 81, 120, 1, - 81, 120, 120, 81, 110, 120, 146, 146, 120, nil, - nil, 114, 114, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 79, 79, nil, 79, nil, 160, 160, - nil, 146, nil, nil, nil, 146, 114, nil, 146, 146, - 114, nil, 146, 114, 114, 146, nil, 114, 79, nil, - 114, 167, 79, 160, nil, 79, 79, 160, nil, 79, - 160, 160, 79, nil, 160, nil, 122, 160, nil, 167, - 167, nil, 167, 167, nil, 167, nil, nil, nil, 167, - 167, 138, 167, nil, 122, 122, 167, 122, 122, nil, - 122, nil, nil, nil, 122, 122, 150, 122, nil, 138, - 138, 122, 138, 138, nil, 138, nil, nil, nil, 138, - 138, 153, 138, nil, 150, 150, 138, 150, 150, nil, - 150, nil, nil, nil, 150, 150, 162, 150, nil, 153, - 153, 150, 153, 153, nil, 153, nil, nil, nil, 153, - 153, 103, 153, nil, 162, 162, 153, 162, 162, nil, - 162, nil, nil, nil, 162, 162, 125, 162, nil, 103, - 103, 162, 103, 103, nil, 103, nil, nil, nil, 103, - 103, nil, 103, nil, 125, 125, 103, 125, 125, nil, - 125, nil, nil, nil, 125, 125, nil, 125, nil, 2, - 2, 125, 2, 2, nil, 2, nil, nil, nil, 2, - 2, nil, 2, nil, 0, 0, 2, 0, 0, nil, - 0, nil, nil, nil, 0, 0, nil, 0, nil, nil, - nil, 0 ] + 48, 48, 48, 59, 121, 54, 82, 82, 82, 105, + 21, 45, 84, 54, 43, 26, 26, 26, 90, 45, + 84, 108, 108, 108, 90, 102, 48, 42, 121, 59, + 48, 102, 82, 48, 48, 59, 82, 48, 48, 82, + 82, 26, 21, 82, 82, 26, 39, 108, 26, 26, + 16, 108, 26, 26, 108, 108, 89, 70, 108, 108, + 96, 96, 96, 16, 89, 80, 11, 11, 11, 80, + 80, 16, 124, 6, 6, 33, 33, 33, 124, 18, + 18, 139, 139, 139, 86, 146, 96, 146, 146, 87, + 96, 69, 11, 96, 96, 67, 11, 96, 96, 11, + 11, 33, 91, 11, 11, 33, 92, 139, 33, 33, + 93, 139, 33, 33, 139, 139, 38, 66, 139, 139, + 97, 97, 97, 98, 99, 100, 144, 144, 144, 37, + 101, 65, 104, 37, 72, 34, 149, 149, 31, 113, + 30, 37, 83, 83, 119, 62, 97, 24, 61, 56, + 97, 129, 144, 97, 97, 19, 144, 97, 97, 144, + 144, 149, 136, 144, 144, 149, 138, 83, 149, 149, + 77, 83, 149, 149, 83, 83, 123, 123, 83, 83, + 123, 50, 163, 163, 15, 76, 148, 13, 9, 75, + 4, 117, 117, 49, 46, nil, nil, 81, 81, nil, + 81, 123, nil, nil, nil, 123, nil, 163, 123, 123, + nil, 163, 123, 123, 163, 163, 117, 130, 163, 163, + 117, nil, 81, 117, 117, nil, 81, 117, 117, 81, + 81, nil, nil, 81, 81, 130, 130, 106, 130, 130, + nil, 130, nil, nil, nil, 130, 130, nil, 130, nil, + 130, 130, nil, nil, 141, 106, 106, nil, 106, 106, + nil, 106, nil, nil, nil, 106, 106, nil, 106, nil, + 106, 106, 141, 141, 153, 141, 141, nil, 141, nil, + nil, nil, 141, 141, nil, 141, nil, 141, 141, nil, + nil, 156, 153, 153, nil, 153, 153, nil, 153, nil, + nil, nil, 153, 153, nil, 153, nil, 153, 153, 156, + 156, 165, 156, 156, nil, 156, nil, nil, nil, 156, + 156, nil, 156, nil, 156, 156, nil, nil, 125, 165, + 165, nil, 165, 165, nil, 165, nil, nil, nil, 165, + 165, nil, 165, nil, 165, 165, 125, 125, 170, 125, + 125, nil, 125, nil, nil, nil, 125, 125, nil, 125, + nil, 125, 125, nil, nil, nil, 170, 170, nil, 170, + 170, nil, 170, nil, nil, nil, 170, 170, nil, 170, + nil, 170, 170, 0, 0, nil, 0, 0, nil, 0, + nil, nil, nil, 0, 0, nil, 0, nil, 0, 0, + 1, 1, nil, 1, 1, nil, 1, nil, nil, nil, + 1, 1, nil, 1, nil, 1, 1 ] racc_action_pointer = [ - 359, 179, 344, nil, 169, nil, 73, nil, nil, 134, - nil, 78, nil, 154, nil, 119, nil, 148, nil, 0, - -7, nil, nil, 151, nil, 66, nil, nil, nil, 131, - 128, nil, 20, 126, nil, 14, 131, 122, nil, nil, - nil, 115, nil, 69, 84, 81, nil, -2, 2, -11, - nil, nil, 37, nil, 4, nil, nil, nil, 43, nil, - 158, nil, nil, 144, 127, 130, nil, 87, 106, nil, - 78, nil, nil, 57, 8, 106, nil, nil, 125, 200, - 15, 141, 30, nil, 40, 13, nil, 51, 64, 82, - nil, 25, 74, 124, 61, 97, 100, 73, -25, 62, - nil, 108, 107, 314, nil, 3, nil, nil, nil, nil, - 175, nil, nil, nil, 188, nil, 133, nil, -7, nil, - 146, -1, 239, nil, 136, 329, nil, nil, nil, nil, - nil, nil, nil, 137, nil, 112, 83, nil, 254, nil, - nil, 129, nil, 3, nil, 156, 183, nil, nil, nil, - 269, nil, nil, 284, nil, nil, nil, nil, nil, nil, - 205, nil, 299, nil, nil, nil, nil, 224, nil, nil ] + 358, 375, nil, nil, 184, nil, 70, nil, nil, 152, + nil, 64, nil, 174, nil, 148, 35, nil, 44, 149, + nil, 6, nil, nil, 147, nil, 13, nil, nil, nil, + 125, 124, nil, 73, 121, nil, nil, 127, 110, 32, + nil, nil, 12, 0, nil, 5, 180, nil, -2, 163, + 171, nil, nil, nil, -23, nil, 113, nil, nil, -1, + nil, 148, 131, nil, nil, 117, 103, 86, nil, 54, + 47, nil, 120, nil, nil, 155, 149, 164, nil, nil, + 60, 194, 4, 139, -16, nil, 78, 53, nil, 28, + 8, 93, 96, 104, nil, nil, 58, 118, 116, 117, + 89, 94, 15, nil, 119, -7, 230, nil, 19, nil, + nil, nil, nil, 130, nil, nil, nil, 188, nil, 139, + nil, -6, nil, 173, 62, 321, nil, nil, nil, 144, + 210, nil, nil, nil, nil, nil, 152, nil, 130, 79, + nil, 247, nil, nil, 124, nil, 78, nil, 180, 133, + nil, nil, nil, 267, nil, nil, 284, nil, nil, nil, + nil, nil, nil, 179, nil, 304, nil, nil, nil, nil, + 341, nil, nil ] racc_action_default = [ - -103, -103, -1, -27, -103, -2, -103, -26, -4, -103, - -5, -103, -6, -103, -7, -103, -8, -103, -9, -103, - -103, -10, -11, -103, -3, -35, -76, -52, -53, -87, - -41, -45, -103, -103, -48, -42, -103, -47, -46, -97, - -75, -44, -49, -43, -103, -50, -54, -103, -87, -35, - -85, -86, -87, -83, -13, -14, -16, -17, -103, 170, - -28, -31, -33, -29, -32, -26, -36, -24, -101, -74, - -30, -73, -22, -103, -87, -103, -88, -39, -103, -103, - -103, -103, -103, -34, -103, -103, -95, -103, -101, -103, - -84, -103, -103, -103, -25, -103, -103, -102, -35, -103, - -91, -94, -103, -103, -98, -103, -99, -100, -71, -69, - -103, -72, -63, -64, -103, -70, -103, -57, -103, -61, - -103, -103, -103, -96, -103, -103, -15, -12, -38, -23, - -18, -19, -37, -101, -90, -103, -103, -89, -103, -78, - -40, -103, -66, -103, -55, -103, -103, -58, -56, -51, - -103, -80, -20, -103, -82, -21, -92, -93, -77, -68, - -103, -65, -103, -62, -79, -81, -67, -103, -60, -59 ] + -105, -1, -2, -29, -105, -4, -105, -28, -5, -105, + -6, -105, -7, -105, -8, -105, -105, -9, -105, -105, + -10, -105, -11, -12, -105, -3, -37, -78, -54, -55, + -89, -43, -47, -105, -105, -50, -48, -44, -105, -49, + -99, -77, -105, -46, -51, -45, -52, -56, -105, -89, + -14, -15, -17, -18, -105, -22, -37, -87, -88, -89, + -85, -105, -30, -33, -35, -31, -34, -28, -38, -26, + -103, -76, -32, -75, -24, -105, -89, -105, -90, -41, + -105, -105, -105, -105, -105, -36, -105, -105, -97, -105, + -105, -105, -103, -105, -86, 173, -105, -27, -105, -105, + -104, -37, -105, -93, -96, -105, -105, -100, -105, -101, + -102, -73, -71, -105, -74, -65, -66, -105, -72, -105, + -59, -105, -63, -105, -105, -105, -98, -16, -13, -105, + -105, -40, -25, -19, -20, -39, -103, -92, -105, -105, + -91, -105, -80, -42, -105, -68, -105, -57, -105, -105, + -60, -58, -53, -105, -82, -21, -105, -84, -23, -94, + -95, -79, -70, -105, -67, -105, -64, -81, -83, -69, + -105, -62, -61 ] racc_goto_table = [ - 24, 2, 26, 35, 105, 96, 68, 113, 76, 132, - 117, 53, 56, 110, 78, 119, 112, 63, 61, 54, - 38, 60, 71, 72, 35, 124, 62, 84, 120, 143, - 88, 89, 100, 75, 95, 52, 67, 126, 99, 35, - 1, 38, 142, nil, 90, nil, nil, nil, 110, 147, - 56, nil, nil, 102, 119, nil, 38, 92, nil, nil, - 57, nil, nil, nil, nil, 64, 101, nil, nil, 160, - 155, 109, 35, 109, 56, 108, 71, 108, 71, 133, - 163, 121, nil, 56, nil, 35, 63, 61, 166, 38, - 60, 71, 129, 156, 110, 62, nil, 35, 57, 43, - nil, nil, 38, nil, 138, nil, 109, nil, nil, nil, - 108, 71, 109, 70, 38, nil, 108, 71, 69, 111, - 43, 111, 57, 150, nil, nil, 153, 101, 35, nil, - nil, 57, nil, 35, 64, 43, 24, 36, 109, nil, - nil, nil, 108, 71, nil, 38, nil, nil, 24, nil, - 38, 24, 109, nil, 111, nil, 108, 71, 77, nil, - 111, nil, nil, 167, nil, 24, nil, 115, 43, 115, - nil, nil, 69, 83, 69, nil, nil, nil, nil, nil, - nil, 43, 70, nil, nil, nil, 111, 69, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, nil, nil, - 111, nil, 115, nil, nil, nil, 116, 69, 115, nil, - nil, nil, nil, 69, nil, nil, nil, nil, nil, 128, - nil, nil, nil, nil, 43, nil, nil, nil, nil, 43, - nil, 140, nil, nil, 115, nil, nil, nil, nil, 69, - nil, nil, nil, nil, nil, nil, nil, nil, 115, nil, - nil, nil, nil, 69, nil, nil, nil, nil, nil, nil, - nil, nil, 157, nil, nil, nil, nil, 159 ] + 25, 1, 27, 63, 74, 50, 116, 78, 103, 120, + 86, 37, 60, 135, 80, 45, 52, 70, 115, 64, + 93, 123, 62, 73, 146, 108, 65, 113, 77, 122, + 72, 98, 59, 37, 69, 127, 99, 45, 102, 24, + nil, nil, 145, 90, nil, nil, nil, 92, 37, 150, + 94, nil, 45, 105, 52, nil, nil, nil, 129, nil, + nil, nil, nil, 113, nil, nil, nil, nil, nil, 122, + 159, nil, nil, 124, 63, 132, 104, 111, 73, 111, + 73, 112, 37, 112, 52, 118, 45, 118, 169, 52, + 64, 163, 136, 62, 73, 166, 37, 65, nil, nil, + 45, 72, 158, nil, nil, nil, nil, 141, 37, 113, + nil, nil, 45, 111, 73, nil, 71, 112, 53, 111, + 73, 118, nil, 112, nil, nil, 153, 118, 66, nil, + nil, 156, nil, nil, nil, 36, nil, nil, 104, 37, + 25, nil, 55, 45, 37, 111, 73, nil, 45, 112, + nil, nil, 25, 118, nil, 25, 53, 36, 38, 111, + 73, nil, nil, 112, nil, nil, 170, 118, nil, 25, + nil, 71, 36, 71, nil, nil, nil, nil, nil, nil, + 79, nil, nil, 114, nil, 114, 53, 71, nil, nil, + nil, 53, nil, nil, nil, 85, nil, nil, nil, 66, + nil, nil, nil, nil, nil, nil, 36, 71, nil, nil, + nil, nil, nil, 71, nil, nil, nil, nil, nil, 114, + 36, nil, nil, nil, nil, 114, nil, nil, nil, 119, + nil, nil, 36, nil, nil, nil, nil, nil, nil, 71, + nil, nil, nil, 131, nil, nil, nil, nil, nil, nil, + nil, 114, nil, 71, nil, 143, nil, nil, nil, nil, + nil, nil, nil, 36, nil, 114, nil, nil, 36, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 160, nil, nil, nil, + nil, 162 ] racc_goto_check = [ - 3, 2, 23, 14, 29, 19, 18, 38, 44, 27, - 34, 43, 14, 36, 28, 36, 37, 14, 24, 12, - 4, 23, 32, 21, 14, 19, 25, 41, 33, 39, - 18, 41, 46, 40, 17, 42, 16, 13, 45, 14, - 1, 4, 38, nil, 43, nil, nil, nil, 36, 34, - 14, nil, nil, 44, 36, nil, 4, 12, nil, nil, - 15, nil, nil, nil, nil, 15, 14, nil, nil, 29, - 19, 14, 14, 14, 14, 23, 32, 23, 32, 18, - 36, 12, nil, 14, nil, 14, 14, 24, 38, 4, - 23, 32, 21, 46, 36, 25, nil, 14, 15, 20, - nil, nil, 4, nil, 2, nil, 14, nil, nil, nil, - 23, 32, 14, 20, 4, nil, 23, 32, 30, 15, - 20, 15, 15, 2, nil, nil, 2, 14, 14, nil, - nil, 15, nil, 14, 15, 20, 3, 26, 14, nil, - nil, nil, 23, 32, nil, 4, nil, nil, 3, nil, - 4, 3, 14, nil, 15, nil, 23, 32, 26, nil, - 15, nil, nil, 2, nil, 3, nil, 20, 20, 20, - nil, nil, 30, 26, 30, nil, nil, nil, nil, nil, - nil, 20, 20, nil, nil, nil, 15, 30, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, nil, nil, - 15, nil, 20, nil, nil, nil, 26, 30, 20, nil, - nil, nil, nil, 30, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 20, - nil, 26, nil, nil, 20, nil, nil, nil, nil, 30, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 30, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, nil, nil, nil, 26 ] + 3, 2, 24, 25, 22, 13, 39, 45, 47, 35, + 42, 15, 44, 28, 29, 21, 15, 19, 38, 26, + 42, 34, 24, 33, 40, 30, 15, 37, 41, 37, + 21, 18, 43, 15, 17, 14, 20, 21, 46, 1, + nil, nil, 39, 13, nil, nil, nil, 19, 15, 35, + 44, nil, 21, 45, 15, nil, nil, nil, 20, nil, + nil, nil, nil, 37, nil, nil, nil, nil, nil, 37, + 47, nil, nil, 13, 25, 22, 15, 24, 33, 24, + 33, 15, 15, 15, 15, 21, 21, 21, 39, 15, + 26, 30, 19, 24, 33, 37, 15, 15, nil, nil, + 21, 21, 20, nil, nil, nil, nil, 2, 15, 37, + nil, nil, 21, 24, 33, nil, 31, 15, 16, 24, + 33, 21, nil, 15, nil, nil, 2, 21, 16, nil, + nil, 2, nil, nil, nil, 4, nil, nil, 15, 15, + 3, nil, 4, 21, 15, 24, 33, nil, 21, 15, + nil, nil, 3, 21, nil, 3, 16, 4, 27, 24, + 33, nil, nil, 15, nil, nil, 2, 21, nil, 3, + nil, 31, 4, 31, nil, nil, nil, nil, nil, nil, + 27, nil, nil, 16, nil, 16, 16, 31, nil, nil, + nil, 16, nil, nil, nil, 27, nil, nil, nil, 16, + nil, nil, nil, nil, nil, nil, 4, 31, nil, nil, + nil, nil, nil, 31, nil, nil, nil, nil, nil, 16, + 4, nil, nil, nil, nil, 16, nil, nil, nil, 27, + nil, nil, 4, nil, nil, nil, nil, nil, nil, 31, + nil, nil, nil, 27, nil, nil, nil, nil, nil, nil, + nil, 16, nil, 31, nil, 27, nil, nil, nil, nil, + nil, nil, nil, 4, nil, 16, nil, nil, 4, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 27, nil, nil, nil, + nil, 27 ] racc_goto_pointer = [ - nil, 40, 1, -2, 9, nil, nil, nil, nil, nil, - nil, nil, -1, -54, -8, 40, 11, -33, -19, -63, - 88, -2, nil, -4, -7, 1, 126, -88, -18, -74, - 93, nil, -3, -53, -71, nil, -66, -63, -72, -85, - 4, -21, 16, -8, -21, -36, -42 ] + nil, 39, 1, -1, 124, nil, nil, nil, nil, nil, + nil, nil, nil, -11, -54, 0, 102, 8, -38, -9, + -34, 4, -22, nil, -4, -23, -7, 147, -87, -19, + -55, 90, nil, -3, -62, -74, nil, -54, -63, -75, + -93, -2, -39, 11, -9, -23, -38, -68 ] racc_goto_default = [ - nil, nil, nil, 5, 8, 10, 12, 14, 16, 18, - 21, 22, nil, 55, 4, 37, nil, nil, nil, nil, - 17, nil, 73, 30, 31, 34, nil, 66, nil, nil, - 41, 42, 45, nil, nil, 118, 33, nil, nil, nil, - nil, nil, nil, nil, 86, nil, nil ] + nil, nil, nil, 2, 5, 8, 10, 12, 14, 17, + 20, 22, 23, nil, 51, 4, 39, nil, nil, nil, + nil, 19, nil, 75, 31, 32, 35, nil, 68, nil, + nil, 43, 44, 46, nil, nil, 121, 34, nil, nil, + nil, nil, nil, nil, nil, 88, nil, nil ] racc_token_table = { false => 0, @@ -505,13 +517,12 @@ racc_token_table = { :SEMIC => 37, :CASE => 38, :DEFAULT => 39, - :INCLUDE => 40, - :TAG => 41, - :FUNCTION => 42 } + :FUNCTION => 40, + :AT => 41 } racc_use_result_var = true -racc_nt_base = 43 +racc_nt_base = 42 Racc_arg = [ racc_action_table, @@ -570,14 +581,14 @@ Racc_token_to_s_table = [ 'SEMIC', 'CASE', 'DEFAULT', -'INCLUDE', -'TAG', 'FUNCTION', +'AT', '$start', 'program', 'statements', 'statement', 'object', +'collectable', 'assignment', 'casestatement', 'import', @@ -675,8 +686,10 @@ module_eval <<'.,.,', 'grammar.ra', 39 # reduce 11 omitted -module_eval <<'.,.,', 'grammar.ra', 60 - def _reduce_12( val, _values, result ) + # reduce 12 omitted + +module_eval <<'.,.,', 'grammar.ra', 61 + def _reduce_13( val, _values, result ) args = aryfy(val[2]) result = AST::Function.new( :line => @lexer.line, @@ -689,8 +702,8 @@ module_eval <<'.,.,', 'grammar.ra', 60 end .,., -module_eval <<'.,.,', 'grammar.ra', 70 - def _reduce_13( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 71 + def _reduce_14( val, _values, result ) args = aryfy(val[1]) result = AST::Function.new( :line => @lexer.line, @@ -703,10 +716,10 @@ module_eval <<'.,.,', 'grammar.ra', 70 end .,., - # reduce 14 omitted + # reduce 15 omitted -module_eval <<'.,.,', 'grammar.ra', 89 - def _reduce_15( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 90 + def _reduce_16( val, _values, result ) result = aryfy(val[0], val[2]) result.line = @lexer.line result.file = @lexer.file @@ -714,12 +727,12 @@ module_eval <<'.,.,', 'grammar.ra', 89 end .,., - # reduce 16 omitted - # reduce 17 omitted -module_eval <<'.,.,', 'grammar.ra', 123 - def _reduce_18( val, _values, result ) + # reduce 18 omitted + +module_eval <<'.,.,', 'grammar.ra', 124 + def _reduce_19( val, _values, result ) if val[0].instance_of?(AST::ASTArray) raise Puppet::ParseError, "Invalid name" end @@ -751,8 +764,8 @@ module_eval <<'.,.,', 'grammar.ra', 123 end .,., -module_eval <<'.,.,', 'grammar.ra', 137 - def _reduce_19( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 138 + def _reduce_20( val, _values, result ) if val[0].instance_of?(AST::ASTArray) Puppet.notice "invalid name" raise Puppet::ParseError, "Invalid name" @@ -770,8 +783,8 @@ module_eval <<'.,.,', 'grammar.ra', 137 end .,., -module_eval <<'.,.,', 'grammar.ra', 149 - def _reduce_20( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 150 + def _reduce_21( val, _values, result ) # a template setting for a type if val[0].instance_of?(AST::ASTArray) raise Puppet::ParseError, "Invalid type" @@ -787,8 +800,28 @@ module_eval <<'.,.,', 'grammar.ra', 149 end .,., -module_eval <<'.,.,', 'grammar.ra', 157 - def _reduce_21( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 169 + def _reduce_22( val, _values, result ) + if val[1].is_a? AST::TypeDefaults + raise Puppet::ParseError, "Defaults are not collectable" + end + + # Just mark our objects as collectable and pass them through. + if val[1].instance_of?(AST::ASTArray) + val[1].each do |obj| + obj.collectable = true + end + else + val[1].collectable = true + end + + result = val[1] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 177 + def _reduce_23( val, _values, result ) result = AST::ObjectInst.new( :line => @lexer.line, :file => @lexer.file, @@ -798,10 +831,10 @@ module_eval <<'.,.,', 'grammar.ra', 157 end .,., - # reduce 22 omitted + # reduce 24 omitted -module_eval <<'.,.,', 'grammar.ra', 171 - def _reduce_23( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 191 + def _reduce_25( val, _values, result ) if val[0].instance_of?(AST::ObjectInst) result = AST::ASTArray.new( :line => @lexer.line, @@ -816,12 +849,12 @@ module_eval <<'.,.,', 'grammar.ra', 171 end .,., - # reduce 24 omitted + # reduce 26 omitted - # reduce 25 omitted + # reduce 27 omitted -module_eval <<'.,.,', 'grammar.ra', 182 - def _reduce_26( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 202 + def _reduce_28( val, _values, result ) result = AST::Name.new( :line => @lexer.line, :file => @lexer.file, @@ -831,8 +864,8 @@ module_eval <<'.,.,', 'grammar.ra', 182 end .,., -module_eval <<'.,.,', 'grammar.ra', 190 - def _reduce_27( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 210 + def _reduce_29( val, _values, result ) result = AST::Type.new( :line => @lexer.line, :file => @lexer.file, @@ -842,10 +875,6 @@ module_eval <<'.,.,', 'grammar.ra', 190 end .,., - # reduce 28 omitted - - # reduce 29 omitted - # reduce 30 omitted # reduce 31 omitted @@ -854,8 +883,12 @@ module_eval <<'.,.,', 'grammar.ra', 190 # reduce 33 omitted -module_eval <<'.,.,', 'grammar.ra', 213 - def _reduce_34( val, _values, result ) + # reduce 34 omitted + + # reduce 35 omitted + +module_eval <<'.,.,', 'grammar.ra', 233 + def _reduce_36( val, _values, result ) # this is distinct from referencing a variable variable = AST::Name.new( :line => @lexer.line, @@ -873,8 +906,8 @@ module_eval <<'.,.,', 'grammar.ra', 213 end .,., -module_eval <<'.,.,', 'grammar.ra', 222 - def _reduce_35( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 242 + def _reduce_37( val, _values, result ) result = AST::ASTArray.new( :line => @lexer.line, :file => @lexer.file, @@ -884,15 +917,15 @@ module_eval <<'.,.,', 'grammar.ra', 222 end .,., -module_eval <<'.,.,', 'grammar.ra', 222 - def _reduce_36( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 242 + def _reduce_38( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 235 - def _reduce_37( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 255 + def _reduce_39( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -907,8 +940,8 @@ module_eval <<'.,.,', 'grammar.ra', 235 end .,., -module_eval <<'.,.,', 'grammar.ra', 250 - def _reduce_38( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 270 + def _reduce_40( val, _values, result ) leaf = AST::String.new( :line => @lexer.line, :file => @lexer.file, @@ -925,10 +958,10 @@ module_eval <<'.,.,', 'grammar.ra', 250 end .,., - # reduce 39 omitted + # reduce 41 omitted -module_eval <<'.,.,', 'grammar.ra', 263 - def _reduce_40( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 283 + def _reduce_42( val, _values, result ) if val[0].instance_of?(AST::ASTArray) result = val[0].push(val[2]) else @@ -942,10 +975,6 @@ module_eval <<'.,.,', 'grammar.ra', 263 end .,., - # reduce 41 omitted - - # reduce 42 omitted - # reduce 43 omitted # reduce 44 omitted @@ -962,8 +991,12 @@ module_eval <<'.,.,', 'grammar.ra', 263 # reduce 50 omitted -module_eval <<'.,.,', 'grammar.ra', 286 - def _reduce_51( val, _values, result ) + # reduce 51 omitted + + # reduce 52 omitted + +module_eval <<'.,.,', 'grammar.ra', 306 + def _reduce_53( val, _values, result ) args = aryfy(val[2]) result = AST::Function.new( :line => @lexer.line, @@ -976,8 +1009,8 @@ module_eval <<'.,.,', 'grammar.ra', 286 end .,., -module_eval <<'.,.,', 'grammar.ra', 294 - def _reduce_52( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 314 + def _reduce_54( val, _values, result ) result = AST::String.new( :line => @lexer.line, :file => @lexer.file, @@ -987,8 +1020,8 @@ module_eval <<'.,.,', 'grammar.ra', 294 end .,., -module_eval <<'.,.,', 'grammar.ra', 300 - def _reduce_53( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 320 + def _reduce_55( val, _values, result ) result = AST::FlatString.new( :line => @lexer.line, :file => @lexer.file, @@ -998,8 +1031,8 @@ module_eval <<'.,.,', 'grammar.ra', 300 end .,., -module_eval <<'.,.,', 'grammar.ra', 308 - def _reduce_54( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 328 + def _reduce_56( val, _values, result ) result = AST::Boolean.new( :line => @lexer.line, :file => @lexer.file, @@ -1009,8 +1042,8 @@ module_eval <<'.,.,', 'grammar.ra', 308 end .,., -module_eval <<'.,.,', 'grammar.ra', 318 - def _reduce_55( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 338 + def _reduce_57( val, _values, result ) result = AST::ObjectRef.new( :pin => '[]', :line => @lexer.line, @@ -1022,8 +1055,8 @@ module_eval <<'.,.,', 'grammar.ra', 318 end .,., -module_eval <<'.,.,', 'grammar.ra', 335 - def _reduce_56( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 355 + def _reduce_58( val, _values, result ) options = val[3] unless options.instance_of?(AST::ASTArray) options = AST::ASTArray.new( @@ -1042,10 +1075,10 @@ module_eval <<'.,.,', 'grammar.ra', 335 end .,., - # reduce 57 omitted + # reduce 59 omitted -module_eval <<'.,.,', 'grammar.ra', 349 - def _reduce_58( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 369 + def _reduce_60( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push val[1] result = val[0] @@ -1060,8 +1093,8 @@ module_eval <<'.,.,', 'grammar.ra', 349 end .,., -module_eval <<'.,.,', 'grammar.ra', 359 - def _reduce_59( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 379 + def _reduce_61( val, _values, result ) result = AST::CaseOpt.new( :pin => ":", :value => val[0], @@ -1073,8 +1106,8 @@ module_eval <<'.,.,', 'grammar.ra', 359 end .,., -module_eval <<'.,.,', 'grammar.ra', 371 - def _reduce_60( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 391 + def _reduce_62( val, _values, result ) result = AST::CaseOpt.new( :pin => ":", :value => val[0], @@ -1090,10 +1123,10 @@ module_eval <<'.,.,', 'grammar.ra', 371 end .,., - # reduce 61 omitted + # reduce 63 omitted -module_eval <<'.,.,', 'grammar.ra', 385 - def _reduce_62( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 405 + def _reduce_64( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1108,8 +1141,8 @@ module_eval <<'.,.,', 'grammar.ra', 385 end .,., -module_eval <<'.,.,', 'grammar.ra', 395 - def _reduce_63( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 415 + def _reduce_65( val, _values, result ) result = AST::Selector.new( :pin => "?", :line => @lexer.line, @@ -1121,19 +1154,19 @@ module_eval <<'.,.,', 'grammar.ra', 395 end .,., - # reduce 64 omitted + # reduce 66 omitted -module_eval <<'.,.,', 'grammar.ra', 397 - def _reduce_65( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 417 + def _reduce_67( val, _values, result ) result = val[1] result end .,., - # reduce 66 omitted + # reduce 68 omitted -module_eval <<'.,.,', 'grammar.ra', 412 - def _reduce_67( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 432 + def _reduce_69( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1148,8 +1181,8 @@ module_eval <<'.,.,', 'grammar.ra', 412 end .,., -module_eval <<'.,.,', 'grammar.ra', 422 - def _reduce_68( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 442 + def _reduce_70( val, _values, result ) result = AST::ObjectParam.new( :pin => "=>", :line => @lexer.line, @@ -1161,10 +1194,6 @@ module_eval <<'.,.,', 'grammar.ra', 422 end .,., - # reduce 69 omitted - - # reduce 70 omitted - # reduce 71 omitted # reduce 72 omitted @@ -1173,8 +1202,12 @@ module_eval <<'.,.,', 'grammar.ra', 422 # reduce 74 omitted -module_eval <<'.,.,', 'grammar.ra', 436 - def _reduce_75( val, _values, result ) + # reduce 75 omitted + + # reduce 76 omitted + +module_eval <<'.,.,', 'grammar.ra', 456 + def _reduce_77( val, _values, result ) result = AST::Default.new( :line => @lexer.line, :file => @lexer.file, @@ -1184,8 +1217,8 @@ module_eval <<'.,.,', 'grammar.ra', 436 end .,., -module_eval <<'.,.,', 'grammar.ra', 498 - def _reduce_76( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 518 + def _reduce_78( val, _values, result ) # importing files # yuk, i hate keywords # we'll probably have to have some kind of search path eventually @@ -1249,8 +1282,8 @@ module_eval <<'.,.,', 'grammar.ra', 498 end .,., -module_eval <<'.,.,', 'grammar.ra', 509 - def _reduce_77( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 529 + def _reduce_79( val, _values, result ) result = AST::CompDef.new( :type => AST::Name.new(:value => val[1], :line => @lexer.line), :args => val[2], @@ -1263,8 +1296,8 @@ module_eval <<'.,.,', 'grammar.ra', 509 end .,., -module_eval <<'.,.,', 'grammar.ra', 522 - def _reduce_78( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 542 + def _reduce_80( val, _values, result ) result = AST::CompDef.new( :type => AST::Name.new(:value => val[1], :line => @lexer.line), :args => val[2], @@ -1281,8 +1314,8 @@ module_eval <<'.,.,', 'grammar.ra', 522 end .,., -module_eval <<'.,.,', 'grammar.ra', 539 - def _reduce_79( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 559 + def _reduce_81( val, _values, result ) #:args => val[2], args = { :type => AST::Name.new(:value => val[1], :line => @lexer.line), @@ -1300,8 +1333,8 @@ module_eval <<'.,.,', 'grammar.ra', 539 end .,., -module_eval <<'.,.,', 'grammar.ra', 556 - def _reduce_80( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 576 + def _reduce_82( val, _values, result ) args = { :type => AST::Name.new(:value => val[1], :line => @lexer.line), :file => @lexer.file, @@ -1322,8 +1355,8 @@ module_eval <<'.,.,', 'grammar.ra', 556 end .,., -module_eval <<'.,.,', 'grammar.ra', 577 - def _reduce_81( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 597 + def _reduce_83( val, _values, result ) unless val[1].instance_of?(AST::ASTArray) val[1] = AST::ASTArray.new( :line => val[1].line, @@ -1346,8 +1379,8 @@ module_eval <<'.,.,', 'grammar.ra', 577 end .,., -module_eval <<'.,.,', 'grammar.ra', 600 - def _reduce_82( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 620 + def _reduce_84( val, _values, result ) unless val[1].instance_of?(AST::ASTArray) val[1] = AST::ASTArray.new( :line => val[1].line, @@ -1374,10 +1407,10 @@ module_eval <<'.,.,', 'grammar.ra', 600 end .,., - # reduce 83 omitted + # reduce 85 omitted -module_eval <<'.,.,', 'grammar.ra', 614 - def _reduce_84( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 634 + def _reduce_86( val, _values, result ) if val[0].instance_of?(AST::ASTArray) result = val[0] result.push val[1] @@ -1392,8 +1425,8 @@ module_eval <<'.,.,', 'grammar.ra', 614 end .,., -module_eval <<'.,.,', 'grammar.ra', 622 - def _reduce_85( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 642 + def _reduce_87( val, _values, result ) result = AST::HostName.new( :line => @lexer.line, :file => @lexer.file, @@ -1403,8 +1436,8 @@ module_eval <<'.,.,', 'grammar.ra', 622 end .,., -module_eval <<'.,.,', 'grammar.ra', 628 - def _reduce_86( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 648 + def _reduce_88( val, _values, result ) result = AST::HostName.new( :line => @lexer.line, :file => @lexer.file, @@ -1414,8 +1447,8 @@ module_eval <<'.,.,', 'grammar.ra', 628 end .,., -module_eval <<'.,.,', 'grammar.ra', 636 - def _reduce_87( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 656 + def _reduce_89( val, _values, result ) result = AST::ASTArray.new( :line => @lexer.line, :file => @lexer.file, @@ -1425,17 +1458,17 @@ module_eval <<'.,.,', 'grammar.ra', 636 end .,., - # reduce 88 omitted + # reduce 90 omitted -module_eval <<'.,.,', 'grammar.ra', 641 - def _reduce_89( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 661 + def _reduce_91( val, _values, result ) result = val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 652 - def _reduce_90( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 672 + def _reduce_92( val, _values, result ) if val[1].instance_of?(AST::ASTArray) result = val[1] else @@ -1449,10 +1482,10 @@ module_eval <<'.,.,', 'grammar.ra', 652 end .,., - # reduce 91 omitted + # reduce 93 omitted -module_eval <<'.,.,', 'grammar.ra', 666 - def _reduce_92( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 686 + def _reduce_94( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1467,8 +1500,8 @@ module_eval <<'.,.,', 'grammar.ra', 666 end .,., -module_eval <<'.,.,', 'grammar.ra', 674 - def _reduce_93( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 694 + def _reduce_95( val, _values, result ) result = AST::CompArgument.new( :line => @lexer.line, :file => @lexer.file, @@ -1478,8 +1511,8 @@ module_eval <<'.,.,', 'grammar.ra', 674 end .,., -module_eval <<'.,.,', 'grammar.ra', 681 - def _reduce_94( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 701 + def _reduce_96( val, _values, result ) result = AST::CompArgument.new( :line => @lexer.line, :file => @lexer.file, @@ -1489,10 +1522,10 @@ module_eval <<'.,.,', 'grammar.ra', 681 end .,., - # reduce 95 omitted + # reduce 97 omitted -module_eval <<'.,.,', 'grammar.ra', 690 - def _reduce_96( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 710 + def _reduce_98( val, _values, result ) result = AST::Name.new( :value => val[1], :file => @lexer.file, @@ -1502,8 +1535,8 @@ module_eval <<'.,.,', 'grammar.ra', 690 end .,., -module_eval <<'.,.,', 'grammar.ra', 699 - def _reduce_97( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 719 + def _reduce_99( val, _values, result ) name = val[0].sub(/^\$/,'') result = AST::Variable.new( :line => @lexer.line, @@ -1514,8 +1547,8 @@ module_eval <<'.,.,', 'grammar.ra', 699 end .,., -module_eval <<'.,.,', 'grammar.ra', 711 - def _reduce_98( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 731 + def _reduce_100( val, _values, result ) if val[1].instance_of?(AST::ASTArray) result = val[1] else @@ -1529,14 +1562,14 @@ module_eval <<'.,.,', 'grammar.ra', 711 end .,., - # reduce 99 omitted + # reduce 101 omitted - # reduce 100 omitted + # reduce 102 omitted - # reduce 101 omitted + # reduce 103 omitted -module_eval <<'.,.,', 'grammar.ra', 716 - def _reduce_102( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 736 + def _reduce_104( val, _values, result ) result = nil result end diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb index f7dde32c8..54f0f42ad 100644 --- a/lib/puppet/parser/scope.rb +++ b/lib/puppet/parser/scope.rb @@ -855,6 +855,7 @@ module Puppet::Parser # Builtin types should be passed out as they are, but defined # types need to be evaluated. We have to wait until this # point so that subclass overrides can happen. + # Wait until the last minute to set tags, although this # probably should not matter child.tags = self.tags @@ -870,15 +871,30 @@ module Puppet::Parser # Now that all that is done, check to see what kind of object # it is. if objecttype = lookuptype(child.type) - # It's a defined type, so evaluate it + # It's a defined type, so evaluate it. Retain whether + # the object is collectable. result = objecttype.safeevaluate( :name => child.name, :type => child.type, :arguments => child.to_hash, - :scope => self + :scope => self, + :collectable => child.collectable ) + + # If the child is collectable, then mark all of the + # results as collectable. This is how we retain + # collectability through components and such. + if child.collectable + result.delve do |object| + if object.is_a? Puppet::TransObject + debug "Collecting %s[%s]" % + [object.type, object.name] + object.collectable = true + end + end + end else - # It's a builtin type, so just chunk it on in + # It's a builtin type, so just return it directly result = child end else @@ -940,104 +956,6 @@ module Puppet::Parser end end - # Convert our scope to a list of Transportable objects. - def oldto_trans - results = [] - - # Iterate across our child scopes and call to_trans on them - @children.each { |child| - if child.is_a?(Scope) - cresult = child.to_trans - - # Scopes normally result in a TransBucket, but they could - # also result in a normal array; if that happens, get rid - # of the array. - unless cresult.is_a?(Puppet::TransBucket) - cresult.each { |result| - results.push(result) - } - else - unless cresult.empty? - # Otherwise, just add it to our list of results. - results.push(cresult) - end - end - elsif child.is_a?(Puppet::TransObject) - if child.empty? - next - end - # Wait until the last minute to set tags, although this - # probably should not matter - child.tags = self.tags - - # Add any defaults. - self.adddefaults(child) - - # Then make sure this child's tags are stored in the - # central table. This should maybe be in the evaluate - # methods, but, eh. - @topscope.addtags(child) - results.push(child) - else - raise Puppet::DevError, - "Puppet::Parse::Scope cannot handle objects of type %s" % - child.class - end - } - - # Get rid of any nil objects. - results = results.reject { |child| - child.nil? - } - - # If we have a name and type, then make a TransBucket, which - # becomes a component. - # Else, just stack all of the objects into the current bucket. - if @type - bucket = Puppet::TransBucket.new - - if defined? @name and @name - bucket.name = @name - end - - # it'd be nice not to have to do this... - results.each { |result| - #Puppet.warning "Result type is %s" % result.class - bucket.push(result) - } - if defined? @type - bucket.type = @type - else - raise Puppet::ParseError, - "No type for scope %s" % @name - end - - if defined? @keyword - bucket.keyword = @keyword - end - #Puppet.debug( - # "TransBucket with name %s and type %s in scope %s" % - # [@name,@type,self.object_id] - #) - - # now find metaparams - @symtable.each { |var,value| - if Puppet::Type.metaparam?(var.intern) - #Puppet.debug("Adding metaparam %s" % var) - bucket.param(var,value) - else - #Puppet.debug("%s is not a metaparam" % var) - end - } - #Puppet.debug "Returning bucket %s from scope %s" % - # [bucket.name,self.object_id] - return bucket - else - Puppet.debug "nameless scope; just returning a list" - return results - end - end - protected # This method abstracts recursive searching. It accepts the type |