1
1
# the parent class for all of our syntactical objects
4
require 'puppet/autoload'
4
require 'puppet/util/autoload'
6
6
# The base class for all of the objects that make up the parse trees.
7
7
# Handles things like file name, line #, and also does the initialization
13
13
include Puppet::Util::Errors
14
14
include Puppet::Util::MethodHelper
16
Puppet.setdefaults("ast",
17
:typecheck => [true, "Whether to validate types during parsing."],
18
:paramcheck => [true, "Whether to validate parameters during parsing."]
20
15
attr_accessor :line, :file, :parent, :scope
22
# Just used for 'tree', which is only used in debugging.
29
# Just used for 'tree', which is only used in debugging.
31
@@indline = @@pink + ("-" * 4) + @@reset
32
@@midline = @@slate + ("-" * 4) + @@reset
36
# Just used for 'tree', which is only used in debugging.
38
return @@indent * @@indention
41
# Just used for 'tree', which is only used in debugging.
46
17
# Does this ast object set something? If so, it gets evaluated first.
48
19
if defined? @settor
55
# Evaluate the current object. Basically just iterates across all
26
# Evaluate the current object. Just a stub method, since the subclass
27
# should override this method.
56
28
# of the contained children and evaluates them in turn, returning a
57
29
# list of all of the collected values, rejecting nil values
59
#Puppet.debug("Evaluating ast %s" % @name)
60
value = self.collect { |obj|
61
obj.safeevaluate(args)
30
def evaluate(*options)
31
raise Puppet::DevError, "Did not override #evaluate in %s" % self.class
67
34
# Throw a parse error.
80
47
# correctly handles errors. It is critical to use this method because
81
48
# it can enable you to catch the error where it happens, rather than
82
49
# much higher up the stack.
83
def safeevaluate(*args)
50
def safeevaluate(*options)
84
51
# We duplicate code here, rather than using exceptwrap, because this
85
52
# is called so many times during parsing.
87
# self.evaluate(*args)
90
return self.evaluate(*args)
54
return self.evaluate(*options)
91
55
rescue Puppet::Error => detail
92
56
raise adderrorcontext(detail)
94
message = options[:message] || "%s failed with error %s: %s" %
95
[self.class, detail.class, detail.to_s]
97
error = options[:type].new(message)
58
error = Puppet::Error.new(detail.to_s)
98
59
# We can't use self.fail here because it always expects strings,
100
61
raise adderrorcontext(error, detail)
104
# Again, just used for printing out the parse tree.
106
#return self.class.to_s.sub(/.+::/,'') +
107
#"(" + @@green + string.to_s + @@reset + ")"
108
return @@green + string.to_s + @@reset +
109
"(" + self.class.to_s.sub(/.+::/,'') + ")"
112
65
# Initialize the object. Requires a hash as the argument, and
113
66
# takes each of the parameters of the hash and calls the settor
114
67
# method for them. This is probably pretty inefficient and should
121
#---------------------------------------------------------------
122
# Now autoload everything.
123
@autoloader = Puppet::Autoload.new(self,
129
#require 'puppet/parser/ast/astarray'
130
#require 'puppet/parser/ast/branch'
131
#require 'puppet/parser/ast/collection'
132
#require 'puppet/parser/ast/caseopt'
133
#require 'puppet/parser/ast/casestatement'
134
#require 'puppet/parser/ast/component'
135
#require 'puppet/parser/ast/else'
136
#require 'puppet/parser/ast/hostclass'
137
#require 'puppet/parser/ast/ifstatement'
138
#require 'puppet/parser/ast/leaf'
139
#require 'puppet/parser/ast/node'
140
#require 'puppet/parser/ast/resourcedef'
141
#require 'puppet/parser/ast/resourceparam'
142
#require 'puppet/parser/ast/resourceref'
143
#require 'puppet/parser/ast/resourceoverride'
144
#require 'puppet/parser/ast/selector'
145
#require 'puppet/parser/ast/resourcedefaults'
146
#require 'puppet/parser/ast/vardef'
147
#require 'puppet/parser/ast/tag'
148
#require 'puppet/parser/ast/function'
150
# $Id: ast.rb 1739 2006-10-06 03:13:15Z luke $
76
# And include all of the AST subclasses.
77
require 'puppet/parser/ast/astarray'
78
require 'puppet/parser/ast/branch'
79
require 'puppet/parser/ast/caseopt'
80
require 'puppet/parser/ast/casestatement'
81
require 'puppet/parser/ast/collection'
82
require 'puppet/parser/ast/collexpr'
83
require 'puppet/parser/ast/definition'
84
require 'puppet/parser/ast/else'
85
require 'puppet/parser/ast/function'
86
require 'puppet/parser/ast/hostclass'
87
require 'puppet/parser/ast/ifstatement'
88
require 'puppet/parser/ast/leaf'
89
require 'puppet/parser/ast/node'
90
require 'puppet/parser/ast/resource'
91
require 'puppet/parser/ast/resource_defaults'
92
require 'puppet/parser/ast/resource_override'
93
require 'puppet/parser/ast/resource_reference'
94
require 'puppet/parser/ast/resourceparam'
95
require 'puppet/parser/ast/selector'
96
require 'puppet/parser/ast/tag'
97
require 'puppet/parser/ast/vardef'