summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/ast/objectref.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser/ast/objectref.rb')
-rw-r--r--lib/puppet/parser/ast/objectref.rb20
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/puppet/parser/ast/objectref.rb b/lib/puppet/parser/ast/objectref.rb
index e9561d65d..6418c14fb 100644
--- a/lib/puppet/parser/ast/objectref.rb
+++ b/lib/puppet/parser/ast/objectref.rb
@@ -21,7 +21,7 @@ class Puppet::Parser::AST
objnames = [objnames]
end
- # Verify we can find the object.
+ # See if we can look the object up in our scope tree.
begin
object = scope.lookuptype(objtype)
rescue Puppet::ParseError => except
@@ -32,20 +32,32 @@ class Puppet::Parser::AST
error = Puppet::ParseError.new(detail)
error.line = self.line
error.file = self.file
- error.stack = caller
+ error.backtrace = detail.backtrace
+ raise error
+ end
+
+ # If the type isn't defined, verify that it's builtin
+ unless object or Puppet::Type.type(objtype)
+ error = Puppet::ParseError.new("Could not find type %s" %
+ objtype.inspect)
+ error.line = self.line
+ error.file = self.file
raise error
end
- Puppet.debug "ObjectRef returned type %s" % object
# should we implicitly iterate here?
# yes, i believe that we essentially have to...
- objnames.collect { |objname|
+ ret = objnames.collect { |objname|
if object.is_a?(AST::Component)
objname = "%s[%s]" % [objtype,objname]
objtype = "component"
end
[objtype,objname]
}.reject { |obj| obj.nil? }
+
+ # Return a flattened array, since we know that we've created an
+ # array
+ return *ret
end
def tree(indent = 0)