adds logical statements to vool
This commit is contained in:
parent
91fdfb0c1e
commit
de8b48975b
@ -8,15 +8,14 @@ require_relative "vool/assignment_statement"
|
|||||||
require_relative "vool/basic_values"
|
require_relative "vool/basic_values"
|
||||||
require_relative "vool/class_statement"
|
require_relative "vool/class_statement"
|
||||||
require_relative "vool/hash_statement"
|
require_relative "vool/hash_statement"
|
||||||
|
require_relative "vool/if_statement"
|
||||||
|
require_relative "vool/logical_statement"
|
||||||
require_relative "vool/method_statement"
|
require_relative "vool/method_statement"
|
||||||
|
|
||||||
require_relative "vool/while_statement"
|
|
||||||
require_relative "vool/if_statement"
|
|
||||||
require_relative "vool/return_statement"
|
|
||||||
require_relative "vool/return_statement"
|
require_relative "vool/return_statement"
|
||||||
require_relative "vool/statements"
|
require_relative "vool/statements"
|
||||||
require_relative "vool/send_statement"
|
require_relative "vool/send_statement"
|
||||||
require_relative "vool/operator_expression"
|
|
||||||
require_relative "vool/variables"
|
require_relative "vool/variables"
|
||||||
|
require_relative "vool/while_statement"
|
||||||
|
|
||||||
require_relative "vool/compiler"
|
require_relative "vool/compiler"
|
||||||
|
@ -155,6 +155,14 @@ module Vool
|
|||||||
w
|
w
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def on_and expression
|
||||||
|
name = expression.type
|
||||||
|
left = process(expression.children[0])
|
||||||
|
right = process( expression.children[1] )
|
||||||
|
LogicalStatement.new( name , left , right)
|
||||||
|
end
|
||||||
|
alias :on_or :on_and
|
||||||
|
|
||||||
# this is a call to super without args (z = zero arity)
|
# this is a call to super without args (z = zero arity)
|
||||||
def on_zsuper exp
|
def on_zsuper exp
|
||||||
w = SendStatement.new( nil )
|
w = SendStatement.new( nil )
|
||||||
|
11
lib/vool/logical_statement.rb
Normal file
11
lib/vool/logical_statement.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
module Vool
|
||||||
|
# Logical Statements are guaranteed to return boolean
|
||||||
|
# either :and or :or, which may be written as && and ||
|
||||||
|
class LogicalStatement < Statement
|
||||||
|
attr_reader :name , :left , :right
|
||||||
|
|
||||||
|
def initialize(name , left , right)
|
||||||
|
@name , @left , @right = name , left , right
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -4,8 +4,9 @@ require_relative "test_basic_values"
|
|||||||
require_relative "test_class_statement"
|
require_relative "test_class_statement"
|
||||||
require_relative "test_hash_statement"
|
require_relative "test_hash_statement"
|
||||||
require_relative "test_if_statement"
|
require_relative "test_if_statement"
|
||||||
|
require_relative "test_logical_statement"
|
||||||
require_relative "test_method_statement"
|
require_relative "test_method_statement"
|
||||||
require_relative "test_send_statement"
|
|
||||||
require_relative "test_return_statement"
|
require_relative "test_return_statement"
|
||||||
|
require_relative "test_send_statement"
|
||||||
require_relative "test_variables"
|
require_relative "test_variables"
|
||||||
require_relative "test_while_statement"
|
require_relative "test_while_statement"
|
||||||
|
40
test/vool/test_logical_statement.rb
Normal file
40
test/vool/test_logical_statement.rb
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
require_relative "../helper"
|
||||||
|
|
||||||
|
module Vool
|
||||||
|
class TestLogical < MiniTest::Test
|
||||||
|
|
||||||
|
def simple
|
||||||
|
Compiler.compile( "@a and @b")
|
||||||
|
end
|
||||||
|
def test_simple
|
||||||
|
lst = simple
|
||||||
|
assert_equal LogicalStatement , lst.class
|
||||||
|
end
|
||||||
|
def test_simple_name
|
||||||
|
lst = simple
|
||||||
|
assert_equal :and , lst.name
|
||||||
|
end
|
||||||
|
def test_simple_left
|
||||||
|
lst = simple
|
||||||
|
assert_equal InstanceVariable , lst.left.class
|
||||||
|
end
|
||||||
|
def test_simple_right
|
||||||
|
lst = simple
|
||||||
|
assert_equal InstanceVariable , lst.right.class
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_or
|
||||||
|
lst = Compiler.compile( "@a or @b")
|
||||||
|
assert_equal :or , lst.name
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_or2
|
||||||
|
lst = Compiler.compile( "@a || @b")
|
||||||
|
assert_equal :or , lst.name
|
||||||
|
end
|
||||||
|
def test_and2
|
||||||
|
lst = Compiler.compile( "@a && @b")
|
||||||
|
assert_equal :and , lst.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user