summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/ast/leaf.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser/ast/leaf.rb')
-rw-r--r--lib/puppet/parser/ast/leaf.rb21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb
index b583149b3..206ea5cbe 100644
--- a/lib/puppet/parser/ast/leaf.rb
+++ b/lib/puppet/parser/ast/leaf.rb
@@ -139,6 +139,27 @@ class Puppet::Parser::AST
end
end
+ class HashOrArrayAccess < AST::Leaf
+ attr_accessor :variable, :key
+
+ def evaluate(scope)
+ container = variable.respond_to?(:evaluate) ? variable.safeevaluate(scope) : variable
+ object = (container.is_a?(Hash) or container.is_a?(Array)) ? container : scope.lookupvar(container)
+
+ accesskey = key.respond_to?(:evaluate) ? key.safeevaluate(scope) : key
+
+ unless object.is_a?(Hash) or object.is_a?(Array)
+ raise Puppet::ParseError, "#{variable} is not an hash or array when accessing it with #{accesskey}"
+ end
+
+ return object[accesskey]
+ end
+
+ def to_s
+ "\$#{variable.to_s}[#{key.to_s}]"
+ end
+ end
+
class Regex < AST::Leaf
def initialize(hash)
super