From 83ab197d0378190287d413de8a964414943a9e23 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Tue, 4 Apr 2017 10:42:20 +0300 Subject: [PATCH] fix and test vool return statement --- lib/vool/compiler.rb | 5 ++--- lib/vool/return_statement.rb | 4 ++++ test/vool/test_compiler.rb | 1 + test/vool/test_return_statement.rb | 23 +++++++++++++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 test/vool/test_return_statement.rb diff --git a/lib/vool/compiler.rb b/lib/vool/compiler.rb index 948d949a..e0a2ee0c 100644 --- a/lib/vool/compiler.rb +++ b/lib/vool/compiler.rb @@ -99,9 +99,8 @@ module Vool end def on_return statement - w = ReturnStatement.new() - w.return_value = process(statement.children.first) - w + return_value = process(statement.children.first) + ReturnStatement.new( return_value ) end def on_function statement diff --git a/lib/vool/return_statement.rb b/lib/vool/return_statement.rb index 9fc44f12..176694db 100644 --- a/lib/vool/return_statement.rb +++ b/lib/vool/return_statement.rb @@ -1,5 +1,9 @@ module Vool class ReturnStatement < Statement attr_accessor :return_value + + def initialize(value) + @return_value = value + end end end diff --git a/test/vool/test_compiler.rb b/test/vool/test_compiler.rb index 573949c0..1c4f814b 100644 --- a/test/vool/test_compiler.rb +++ b/test/vool/test_compiler.rb @@ -6,5 +6,6 @@ require_relative "test_hash_statement" require_relative "test_if_statement" require_relative "test_method_statement" require_relative "test_send_statement" +require_relative "test_return_statement" require_relative "test_variables" require_relative "test_while_statement" diff --git a/test/vool/test_return_statement.rb b/test/vool/test_return_statement.rb new file mode 100644 index 00000000..7199c4d6 --- /dev/null +++ b/test/vool/test_return_statement.rb @@ -0,0 +1,23 @@ +require_relative "helper" + +module Vool + class TestReturnStatement < MiniTest::Test + + def test_return_const + lst = Compiler.compile( "return 1" ) + assert_equal ReturnStatement , lst.class + end + + def test_return_value + lst = Compiler.compile( "return 1" ) + assert_equal 1 , lst.return_value.value + end + + def test_return_send + lst = Compiler.compile( "return foo" ) + assert_equal SendStatement , lst.return_value.class + assert_equal :foo , lst.return_value.name + end + + end +end