Class: Code::Node::While
- Inherits:
-
Code::Node
- Object
- Code::Node
- Code::Node::While
- Defined in:
- lib/code/node/while.rb
Constant Summary collapse
- WHILE_KEYWORD =
"while"
- UNTIL_KEYWORD =
"until"
Instance Method Summary collapse
- #evaluate(**args) ⇒ Object
-
#initialize(parsed) ⇒ While
constructor
A new instance of While.
Methods inherited from Code::Node
Constructor Details
#initialize(parsed) ⇒ While
Returns a new instance of While.
9 10 11 12 13 14 |
# File 'lib/code/node/while.rb', line 9 def initialize(parsed) @operator = parsed.delete(:operator) @statement = Node::Statement.new(parsed.delete(:statement)) @body = Node::Code.new(parsed.delete(:body)) super(parsed) end |
Instance Method Details
#evaluate(**args) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/code/node/while.rb', line 16 def evaluate(**args) if @operator == WHILE_KEYWORD last = ::Code::Object::Nothing.new last = @body.evaluate(**args) while @statement.evaluate( **args ).truthy? last elsif @operator == UNTIL_KEYWORD last = ::Code::Object::Nothing.new last = @body.evaluate(**args) while @statement.evaluate(**args).falsy? last else raise NotImplementedError, @operator end end |