summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/ast/component.rb20
-rw-r--r--lib/puppet/parser/grammar.ra28
-rw-r--r--lib/puppet/parser/interpreter.rb48
-rw-r--r--lib/puppet/parser/parser.rb18
-rw-r--r--lib/puppet/parser/scope.rb14
5 files changed, 61 insertions, 67 deletions
diff --git a/lib/puppet/parser/ast/component.rb b/lib/puppet/parser/ast/component.rb
index 058d8d871..6a309ac8c 100644
--- a/lib/puppet/parser/ast/component.rb
+++ b/lib/puppet/parser/ast/component.rb
@@ -15,8 +15,8 @@ class Puppet::Parser::AST
# The class name
@name = :definition
- attr_accessor :type, :arguments, :code, :scope, :keyword
- attr_accessor :exported, :namespace, :fqname, :interp
+ attr_accessor :classname, :arguments, :code, :scope, :keyword
+ attr_accessor :exported, :namespace, :interp
# These are retrieved when looking up the superclass
attr_accessor :name
@@ -27,7 +27,6 @@ class Puppet::Parser::AST
def evaluate(hash)
origscope = hash[:scope]
- objtype = hash[:type]
title = hash[:title]
args = symbolize_options(hash[:arguments] || {})
@@ -44,8 +43,8 @@ class Puppet::Parser::AST
# Additionally, add a tag for whatever kind of class
# we are
- if @type != "" and ! @type.nil?
- scope.tag(@type)
+ if @classname != "" and ! @classname.nil?
+ @classname.split(/::/).each { |tag| scope.tag(tag) }
end
[name, title].each do |str|
@@ -68,7 +67,7 @@ class Puppet::Parser::AST
# [default.inspect, arg.inspect, @name.inspect]
else
parsefail "Must pass %s to %s of type %s" %
- [arg,title,@type]
+ [arg,title,@classname]
end
end
}
@@ -78,7 +77,7 @@ class Puppet::Parser::AST
# component's scope.
args.each { |arg,value|
unless validattr?(arg)
- parsefail "%s does not accept attribute %s" % [@type, arg]
+ parsefail "%s does not accept attribute %s" % [@classname, arg]
end
exceptwrap do
@@ -142,7 +141,7 @@ class Puppet::Parser::AST
# Set our parent class, with a little check to avoid some potential
# weirdness.
def parentclass=(name)
- if name == self.type
+ if name == self.classname
parsefail "Parent classes must have dissimilar names"
end
@@ -173,13 +172,12 @@ class Puppet::Parser::AST
# Create a new subscope in which to evaluate our code.
def subscope(scope, name = nil)
args = {
- :type => @type,
+ :type => self.classname,
:keyword => self.keyword,
:namespace => self.namespace
}
args[:name] = name if name
- args[:type] = self.type if self.type
scope = scope.newscope(args)
scope.source = self
@@ -187,7 +185,7 @@ class Puppet::Parser::AST
end
def to_s
- fqname
+ classname
end
# Check whether a given argument is valid. Searches up through
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index 2a962822b..16aa10459 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -111,7 +111,7 @@ resourcerefs: resourceref
result = val[0]
}
-resource: fqname LBRACE resourceinstances endsemi RBRACE {
+resource: classname LBRACE resourceinstances endsemi RBRACE {
array = val[2]
if array.instance_of?(AST::ResourceInst)
array = [array]
@@ -130,7 +130,7 @@ resource: fqname LBRACE resourceinstances endsemi RBRACE {
:title => instance[0],
:params => instance[1])
}
-} | fqname LBRACE params endcomma RBRACE {
+} | classname LBRACE params endcomma RBRACE {
# This is a deprecated syntax.
error "All resource specifications require names"
} | TYPE LBRACE params endcomma RBRACE {
@@ -466,28 +466,28 @@ import: IMPORT qtexts {
# Disable definition inheritance for now. 8/27/06, luke
#definition: DEFINE NAME argumentlist parent LBRACE statements RBRACE {
-definition: DEFINE fqname argumentlist LBRACE statements RBRACE {
- interp.newdefine fqname(val[1]), :arguments => val[2], :code => val[4]
+definition: DEFINE classname argumentlist LBRACE statements RBRACE {
+ interp.newdefine classname(val[1]), :arguments => val[2], :code => val[4]
@lexer.indefine = false
result = nil
#} | DEFINE NAME argumentlist parent LBRACE RBRACE {
-} | DEFINE fqname argumentlist LBRACE RBRACE {
- interp.newdefine fqname(val[1]), :arguments => val[2]
+} | DEFINE classname argumentlist LBRACE RBRACE {
+ interp.newdefine classname(val[1]), :arguments => val[2]
@lexer.indefine = false
result = nil
}
#hostclass: CLASS NAME argumentlist parent LBRACE statements RBRACE {
-hostclass: CLASS fqname classparent LBRACE statements RBRACE {
+hostclass: CLASS classname classparent LBRACE statements RBRACE {
# Our class gets defined in the parent namespace, not our own.
@lexer.namepop
- interp.newclass fqname(val[1]), :code => val[4], :parent => val[2]
+ interp.newclass classname(val[1]), :code => val[4], :parent => val[2]
result = nil
-} | CLASS fqname classparent LBRACE RBRACE {
+} | CLASS classname classparent LBRACE RBRACE {
# Our class gets defined in the parent namespace, not our own.
@lexer.namepop
- interp.newclass fqname(val[1]), :parent => val[2]
+ interp.newclass classname(val[1]), :parent => val[2]
result = nil
}
@@ -499,7 +499,7 @@ nodedef: NODE hostnames nodeparent LBRACE statements RBRACE {
result = nil
}
-fqname: NAME
+classname: NAME
| CLASSNAME
# Multiple hostnames, as used for node names. These are all literal
@@ -558,12 +558,12 @@ nodeparent: nil
}
classparent: nil
- | INHERITS fqnameordefault {
+ | INHERITS classnameordefault {
result = val[1]
}
nameordefault: NAME | DEFAULT
-fqnameordefault: fqname | DEFAULT
+classnameordefault: classname | DEFAULT
variable: VARIABLE {
result = ast AST::Variable, :value => val[0]
@@ -746,7 +746,7 @@ def initvars
end
# The fully qualifed name, with the full namespace.
-def fqname(name)
+def classname(name)
[@lexer.namespace, name].join("::").sub(/^::/, '')
end
diff --git a/lib/puppet/parser/interpreter.rb b/lib/puppet/parser/interpreter.rb
index 641e69cf3..9391ec866 100644
--- a/lib/puppet/parser/interpreter.rb
+++ b/lib/puppet/parser/interpreter.rb
@@ -321,7 +321,7 @@ class Puppet::Parser::Interpreter
arghash = {
:name => name,
:interp => self,
- :fqname => name
+ :classname => name
}
if (classes.is_a?(Array) and classes.empty?) or classes.nil?
@@ -528,20 +528,20 @@ class Puppet::Parser::Interpreter
end
# Create a new class, or merge with an existing class.
- def newclass(fqname, options = {})
- fqname = fqname.downcase
- if @definetable.include?(fqname)
+ def newclass(name, options = {})
+ name = name.downcase
+ if @definetable.include?(name)
raise Puppet::ParseError, "Cannot redefine class %s as a definition" %
- fqname
+ name
end
code = options[:code]
parent = options[:parent]
# If the class is already defined, then add code to it.
- if other = @classtable[fqname]
+ if other = @classtable[name]
# Make sure the parents match
if parent and other.parentclass and (parent != other.parentclass)
- @parser.error("Class %s is already defined at %s:%s; cannot redefine" % [fqname, other.file, other.line])
+ @parser.error("Class %s is already defined at %s:%s; cannot redefine" % [name, other.file, other.line])
end
# This might be dangerous...
@@ -551,7 +551,7 @@ class Puppet::Parser::Interpreter
# This might just be an empty, stub class.
if code
- tmp = fqname
+ tmp = name
if tmp == ""
tmp = "main"
end
@@ -566,46 +566,43 @@ class Puppet::Parser::Interpreter
end
else
# Define it anew.
- ns, name = namesplit(fqname)
-
# Note we're doing something somewhat weird here -- we're setting
# the class's namespace to its fully qualified name. This means
# anything inside that class starts looking in that namespace first.
- args = {:type => name, :namespace => fqname, :fqname => fqname, :interp => self}
+ args = {:namespace => name, :classname => name, :interp => self}
args[:code] = code if code
args[:parentclass] = parent if parent
- @classtable[fqname] = @parser.ast AST::HostClass, args
+ @classtable[name] = @parser.ast AST::HostClass, args
end
- return @classtable[fqname]
+ return @classtable[name]
end
# Create a new definition.
- def newdefine(fqname, options = {})
- fqname = fqname.downcase
- if @classtable.include?(fqname)
+ def newdefine(name, options = {})
+ name = name.downcase
+ if @classtable.include?(name)
raise Puppet::ParseError, "Cannot redefine class %s as a definition" %
- fqname
+ name
end
# Make sure our definition doesn't already exist
- if other = @definetable[fqname]
- @parser.error("%s is already defined at %s:%s; cannot redefine" % [fqname, other.file, other.line])
+ if other = @definetable[name]
+ @parser.error("%s is already defined at %s:%s; cannot redefine" % [name, other.file, other.line])
end
- ns, name = namesplit(fqname)
+ ns, whatever = namesplit(name)
args = {
- :type => name,
:namespace => ns,
:arguments => options[:arguments],
:code => options[:code],
- :fqname => fqname
+ :classname => name
}
[:code, :arguments].each do |param|
args[param] = options[param] if options[param]
end
- @definetable[fqname] = @parser.ast AST::Component, args
+ @definetable[name] = @parser.ast AST::Component, args
end
# Create a new node. Nodes are special, because they're stored in a global
@@ -628,8 +625,7 @@ class Puppet::Parser::Interpreter
args[:parentclass] = options[:parent]
end
@nodetable[name] = @parser.ast(AST::Node, args)
- @nodetable[name].fqname = name
- @nodetable[name]
+ @nodetable[name].classname = name
@nodetable[name].interp = self
@nodetable[name]
end
@@ -700,7 +696,7 @@ class Puppet::Parser::Interpreter
end
if output =~ /\A\s+\Z/ # all whitespace
- puts "empty response for %s" % name
+ Puppet.debug "Empty response for %s from external node source" % name
return nil
end
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index eb296de31..ee8470a26 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..id2ea020a302', 'grammar.ra', 606
+module_eval <<'..end grammar.ra modeval..id70ce3bc052', 'grammar.ra', 606
require 'puppet/parser/functions'
attr_reader :file, :interp
@@ -173,7 +173,7 @@ def initvars
end
# The fully qualifed name, with the full namespace.
-def fqname(name)
+def classname(name)
[@lexer.namespace, name].join("::").sub(/^::/, '')
end
@@ -254,7 +254,7 @@ end
# $Id$
-..end grammar.ra modeval..id2ea020a302
+..end grammar.ra modeval..id70ce3bc052
##### racc 1.4.5 generates ###
@@ -829,7 +829,7 @@ Racc_token_to_s_table = [
'variable',
'quotedtext',
'resourceref',
-'fqname',
+'classname',
'resourceinstances',
'endsemi',
'params',
@@ -873,7 +873,7 @@ Racc_token_to_s_table = [
'arguments',
'argument',
'nameordefault',
-'fqnameordefault']
+'classnameordefault']
Racc_debug_parser = false
@@ -1570,7 +1570,7 @@ module_eval <<'.,.,', 'grammar.ra', 465
module_eval <<'.,.,', 'grammar.ra', 475
def _reduce_122( val, _values, result )
- interp.newdefine fqname(val[1]), :arguments => val[2], :code => val[4]
+ interp.newdefine classname(val[1]), :arguments => val[2], :code => val[4]
@lexer.indefine = false
result = nil
@@ -1581,7 +1581,7 @@ module_eval <<'.,.,', 'grammar.ra', 475
module_eval <<'.,.,', 'grammar.ra', 479
def _reduce_123( val, _values, result )
- interp.newdefine fqname(val[1]), :arguments => val[2]
+ interp.newdefine classname(val[1]), :arguments => val[2]
@lexer.indefine = false
result = nil
result
@@ -1592,7 +1592,7 @@ module_eval <<'.,.,', 'grammar.ra', 487
def _reduce_124( val, _values, result )
# Our class gets defined in the parent namespace, not our own.
@lexer.namepop
- interp.newclass fqname(val[1]), :code => val[4], :parent => val[2]
+ interp.newclass classname(val[1]), :code => val[4], :parent => val[2]
result = nil
result
end
@@ -1602,7 +1602,7 @@ module_eval <<'.,.,', 'grammar.ra', 492
def _reduce_125( val, _values, result )
# Our class gets defined in the parent namespace, not our own.
@lexer.namepop
- interp.newclass fqname(val[1]), :parent => val[2]
+ interp.newclass classname(val[1]), :parent => val[2]
result = nil
result
end
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index 25a6551af..709884296 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -123,8 +123,8 @@ class Puppet::Parser::Scope
# that subclasses can set their parent scopes to be the scope of
# their parent class.
def class_scope(klass)
- if klass.respond_to?(:fqname)
- @classtable[klass.fqname]
+ if klass.respond_to?(:classname)
+ @classtable[klass.classname]
else
@classtable[klass]
end
@@ -406,7 +406,7 @@ class Puppet::Parser::Scope
raise Puppet::ParseError, "Could not find class %s" % klassname
end
unless kscope = class_scope(klass)
- raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.fqname
+ raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.classname
end
return kscope.lookupvar(shortname, usestring)
end
@@ -459,8 +459,8 @@ class Puppet::Parser::Scope
end
def setclass?(obj)
- if obj.respond_to?(:fqname)
- @classtable.has_key?(obj.fqname)
+ if obj.respond_to?(:classname)
+ @classtable.has_key?(obj.classname)
else
@classtable[obj]
end
@@ -472,11 +472,11 @@ class Puppet::Parser::Scope
# can support multiple unrelated classes with the same name.
def setclass(obj)
if obj.is_a?(AST::HostClass)
- unless obj.fqname
+ unless obj.classname
raise Puppet::DevError, "Got a %s with no fully qualified name" %
obj.class
end
- @classtable[obj.fqname] = self
+ @classtable[obj.classname] = self
else
raise Puppet::DevError, "Invalid class %s" % obj.inspect
end