diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-22 21:27:11 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-22 21:27:11 +0000 |
commit | 1b2ee4bb9d9fef44bdf8217f45d6893b7609a432 (patch) | |
tree | eeab100adbabf62c809082f8a9ee0b469d017bec /lib/puppet/parser/ast | |
parent | ea32a38d73dc4c1dec030c2c52d339e8976b881b (diff) | |
download | puppet-1b2ee4bb9d9fef44bdf8217f45d6893b7609a432.tar.gz puppet-1b2ee4bb9d9fef44bdf8217f45d6893b7609a432.tar.xz puppet-1b2ee4bb9d9fef44bdf8217f45d6893b7609a432.zip |
Adding "if/else" constructs. No operators, no elsif, but it is a good start, anyway.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1483 980ebf18-57e1-0310-9a29-db15c13687c0
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$ |