summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/ast
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser/ast')
-rw-r--r--lib/puppet/parser/ast/caseopt.rb15
-rw-r--r--lib/puppet/parser/ast/casestatement.rb4
2 files changed, 14 insertions, 5 deletions
diff --git a/lib/puppet/parser/ast/caseopt.rb b/lib/puppet/parser/ast/caseopt.rb
index 366b6e939..6b0e23c3e 100644
--- a/lib/puppet/parser/ast/caseopt.rb
+++ b/lib/puppet/parser/ast/caseopt.rb
@@ -13,6 +13,7 @@ class Puppet::Parser::AST
# Are we the default option?
def default?
+ # Cache the @default value.
if defined? @default
return @default
end
@@ -38,13 +39,21 @@ class Puppet::Parser::AST
end
# You can specify a list of values; return each in turn.
- def eachvalue
+ def eachvalue(scope)
if @value.is_a?(AST::ASTArray)
@value.each { |subval|
- yield subval.value
+ if scope
+ yield subval.evaluate(:scope => scope)
+ elsif subval.is_a? AST::Leaf
+ yield subval.value
+ end
}
else
- yield @value.value
+ if scope
+ yield @value.evaluate(:scope => scope)
+ elsif @value.is_a? AST::Leaf
+ yield @value.value
+ end
end
end
diff --git a/lib/puppet/parser/ast/casestatement.rb b/lib/puppet/parser/ast/casestatement.rb
index e51cc7522..a9e3ee573 100644
--- a/lib/puppet/parser/ast/casestatement.rb
+++ b/lib/puppet/parser/ast/casestatement.rb
@@ -15,7 +15,7 @@ class Puppet::Parser::AST
# Iterate across the options looking for a match.
@options.each { |option|
- if option.eachvalue { |opval| break true if opval == value }
+ if option.eachvalue(scope) { |opval| break true if opval == value }
# we found a matching option
retvalue = option.safeevaluate(:scope => scope)
found = true
@@ -49,7 +49,7 @@ class Puppet::Parser::AST
if option.default?
@default = option
end
- option.eachvalue { |val|
+ option.eachvalue(nil) { |val|
if values.include?(val)
raise Puppet::ParseError,
"Value %s appears twice in case statement" %