Sha256: 0df12c6e0534079fa40c5b585c2d0307d1265f76fa9f43a80363cd2368f2dba6
Contents?: true
Size: 1.23 KB
Versions: 21
Compression:
Stored size: 1.23 KB
Contents
class Code class Node class IfModifier < Node IF_KEYWORD = "if" UNLESS_KEYWORD = "unless" WHILE_KEYWORD = "while" UNTIL_KEYWORD = "until" def initialize(parsed) @operator = parsed.delete(:operator) @left = Node::Statement.new(parsed.delete(:left)) @right = Node::Statement.new(parsed.delete(:right)) super(parsed) end def evaluate(**args) if @operator == IF_KEYWORD if @right.evaluate(**args).truthy? @left.evaluate(**args) else ::Code::Object::Nothing.new end elsif @operator == UNLESS_KEYWORD if @right.evaluate(**args).falsy? @left.evaluate(**args) else ::Code::Object::Nothing.new end elsif @operator == WHILE_KEYWORD last = ::Code::Object::Nothing.new last = @left.evaluate(**args) while @right.evaluate(**args).truthy? last elsif @operator == UNTIL_KEYWORD last = ::Code::Object::Nothing.new last = @left.evaluate(**args) while @right.evaluate(**args).falsy? last else raise NotImplementedError.new(@operator) end end end end end
Version data entries
21 entries across 21 versions & 3 rubygems