diff options
Diffstat (limited to 'lib/puppet/parser/ast')
-rw-r--r-- | lib/puppet/parser/ast/else.rb | 26 | ||||
-rw-r--r-- | lib/puppet/parser/ast/ifstatement.rb | 41 |
2 files changed, 67 insertions, 0 deletions
diff --git a/lib/puppet/parser/ast/else.rb b/lib/puppet/parser/ast/else.rb new file mode 100644 index 000000000..a29623f56 --- /dev/null +++ b/lib/puppet/parser/ast/else.rb @@ -0,0 +1,26 @@ +class Puppet::Parser::AST + # A separate ElseIf statement; can function as an 'else' if there's no + # test. + class Else < AST::Branch + attr_accessor :statements + + def each + yield @statements + end + + # Evaluate the actual statements; this only gets called if + # our test was true matched. + def evaluate(hash) + scope = hash[:scope] + return @statements.safeevaluate(:scope => scope) + end + + def tree(indent = 0) + rettree = [ + ((@@indline * indent) + self.typewrap(self.pin)), + @statements.tree(indent + 1) + ] + return rettree.flatten.join("\n") + end + end +end diff --git a/lib/puppet/parser/ast/ifstatement.rb b/lib/puppet/parser/ast/ifstatement.rb new file mode 100644 index 000000000..b5cb63cdf --- /dev/null +++ b/lib/puppet/parser/ast/ifstatement.rb @@ -0,0 +1,41 @@ +class Puppet::Parser::AST + # A basic 'if/elsif/else' statement. + class IfStatement < AST::Branch + attr_accessor :test, :else, :statements + + def each + [@test,@else,@statements].each { |child| yield child } + end + + # Short-curcuit evaluation. If we're true, evaluate our statements, + # else if there's an 'else' setting, evaluate it. + # the first option that matches. + def evaluate(hash) + scope = hash[:scope] + value = @test.safeevaluate(:scope => scope) + + if Puppet::Parser::Scope.true?(value) + return @statements.safeevaluate(:scope => scope) + else + if defined? @else + return @else.safeevaluate(:scope => scope) + else + return nil + end + end + end + + def tree(indent = 0) + rettree = [ + @test.tree(indent + 1), + ((@@indline * indent) + self.typewrap(self.pin)), + @statements.tree(indent + 1), + @else.tree(indent + 1) + ] + + return rettree.flatten.join("\n") + end + end +end + +# $Id$ |