diff --git a/lib/parser/transform.rb b/lib/parser/transform.rb index fb81eca..3300c94 100644 --- a/lib/parser/transform.rb +++ b/lib/parser/transform.rb @@ -95,10 +95,11 @@ module Parser #modules and classes are understandibly quite similar Class < Module rule( :module_name => simple(:module_name) , :derived_name => simple(:derived_name) , :class_expressions => sequence(:class_expressions) , :end=>"end") do s(:class , module_name.to_s.to_sym , - s(:derives, derived_name ? derived_name.to_a.first.to_sym : nil) , *class_expressions) + s(:derives, derived_name ? derived_name.to_a.first.to_sym : nil) , + s(:expressions, *class_expressions) ) end rule( :module_name => simple(:module_name) , :module_expressions => sequence(:module_expressions) , :end=>"end") do - s(:module , module_name.to_s.to_sym , *module_expressions) + s(:module , module_name.to_s.to_sym , s(:expressions, *module_expressions)) end rule(:expression_list => sequence(:expression_list)) { diff --git a/test/cases/class_def/big_class.tst b/test/cases/class_def/big_class.tst index 43a7375..1b8d024 100644 --- a/test/cases/class_def/big_class.tst +++ b/test/cases/class_def/big_class.tst @@ -35,126 +35,127 @@ end s(:expressions, s(:class, :String, s(:derives, nil), - s(:function, :ref, - s(:name, :new_string), - s(:parameters, - s(:parameter, :int, :len)), - s(:expressions, - s(:assign, - s(:name, :len), - s(:operator, "<<", + s(:expressions, + s(:function, :ref, + s(:name, :new_string), + s(:parameters, + s(:parameter, :int, :len)), + s(:expressions, + s(:assign, s(:name, :len), - s(:int, 2))), - s(:return, - s(:call, - s(:name, :new_object), - s(:arguments, - s(:name, :len)), - s(:receiver, - s(:name, :super))))), - s(:receiver, :self)), - s(:function, :int, - s(:name, :length), - s(:parameters), - s(:expressions, - s(:return, - s(:field_access, - s(:receiver, - s(:name, :self)), - s(:field, - s(:name, :length)))))), - s(:function, :int, - s(:name, :plus), - s(:parameters, - s(:parameter, :ref, :str)), - s(:expressions, - s(:assign, - s(:name, :my_length), - s(:field_access, - s(:receiver, - s(:name, :self)), - s(:field, - s(:name, :length)))), - s(:assign, - s(:name, :str_len), - s(:call, - s(:name, :length), - s(:arguments), - s(:receiver, - s(:name, :str)))), - s(:assign, - s(:name, :my_length), - s(:operator, "+", - s(:name, :str_len), - s(:name, :my_length))), - s(:assign, - s(:name, :new_string), - s(:call, - s(:name, :new_string), - s(:arguments, - s(:name, :my_length)), - s(:receiver, - s(:name, :self)))), - s(:assign, - s(:name, :i), - s(:int, 0)), - s(:while, - s(:condition, - s(:operator, "<", - s(:name, :i), - s(:name, :my_length))), - s(:expressions, - s(:assign, - s(:name, :char), - s(:call, - s(:name, :get), - s(:arguments, - s(:name, :i)))), - s(:call, - s(:name, :set), - s(:arguments, - s(:name, :i), - s(:name, :char)), - s(:receiver, - s(:name, :new_string))), - s(:assign, - s(:name, :i), - s(:operator, "+", - s(:name, :i), - s(:int, 1))))), - s(:assign, - s(:name, :i), - s(:int, 0)), - s(:while, - s(:condition, - s(:operator, "<", - s(:name, :i), - s(:name, :str_len))), - s(:expressions, - s(:assign, - s(:name, :char), - s(:call, - s(:name, :get), - s(:arguments, - s(:name, :i)), - s(:receiver, - s(:name, :str)))), - s(:assign, + s(:operator, "<<", s(:name, :len), - s(:operator, "+", + s(:int, 2))), + s(:return, + s(:call, + s(:name, :new_object), + s(:arguments, + s(:name, :len)), + s(:receiver, + s(:name, :super))))), + s(:receiver, :self)), + s(:function, :int, + s(:name, :length), + s(:parameters), + s(:expressions, + s(:return, + s(:field_access, + s(:receiver, + s(:name, :self)), + s(:field, + s(:name, :length)))))), + s(:function, :int, + s(:name, :plus), + s(:parameters, + s(:parameter, :ref, :str)), + s(:expressions, + s(:assign, + s(:name, :my_length), + s(:field_access, + s(:receiver, + s(:name, :self)), + s(:field, + s(:name, :length)))), + s(:assign, + s(:name, :str_len), + s(:call, + s(:name, :length), + s(:arguments), + s(:receiver, + s(:name, :str)))), + s(:assign, + s(:name, :my_length), + s(:operator, "+", + s(:name, :str_len), + s(:name, :my_length))), + s(:assign, + s(:name, :new_string), + s(:call, + s(:name, :new_string), + s(:arguments, + s(:name, :my_length)), + s(:receiver, + s(:name, :self)))), + s(:assign, + s(:name, :i), + s(:int, 0)), + s(:while, + s(:condition, + s(:operator, "<", s(:name, :i), s(:name, :my_length))), - s(:call, - s(:name, :set), - s(:arguments, - s(:name, :len), - s(:name, :char)), - s(:receiver, - s(:name, :new_string))), - s(:assign, - s(:name, :i), - s(:operator, "+", + s(:expressions, + s(:assign, + s(:name, :char), + s(:call, + s(:name, :get), + s(:arguments, + s(:name, :i)))), + s(:call, + s(:name, :set), + s(:arguments, + s(:name, :i), + s(:name, :char)), + s(:receiver, + s(:name, :new_string))), + s(:assign, s(:name, :i), - s(:int, 1))))), - s(:return, - s(:name, :new_string)))))) + s(:operator, "+", + s(:name, :i), + s(:int, 1))))), + s(:assign, + s(:name, :i), + s(:int, 0)), + s(:while, + s(:condition, + s(:operator, "<", + s(:name, :i), + s(:name, :str_len))), + s(:expressions, + s(:assign, + s(:name, :char), + s(:call, + s(:name, :get), + s(:arguments, + s(:name, :i)), + s(:receiver, + s(:name, :str)))), + s(:assign, + s(:name, :len), + s(:operator, "+", + s(:name, :i), + s(:name, :my_length))), + s(:call, + s(:name, :set), + s(:arguments, + s(:name, :len), + s(:name, :char)), + s(:receiver, + s(:name, :new_string))), + s(:assign, + s(:name, :i), + s(:operator, "+", + s(:name, :i), + s(:int, 1))))), + s(:return, + s(:name, :new_string))))))) diff --git a/test/cases/class_def/class_derived.tst b/test/cases/class_def/class_derived.tst index fedd805..c838ec6 100644 --- a/test/cases/class_def/class_derived.tst +++ b/test/cases/class_def/class_derived.tst @@ -9,20 +9,21 @@ end s(:expressions, s(:class, :Foo, s(:derives, :Object), - s(:field_def, :int, :field, - s(:int, 3)), - s(:function, :int, - s(:name, :func), - s(:parameters), - s(:expressions, - s(:return, - s(:field_access, - s(:receiver, - s(:name, :self)), - s(:field, - s(:name, :field)))))), - s(:call, - s(:name, :ofthen), - s(:arguments, - s(:int, 3), - s(:name, :var))))) + s(:expressions, + s(:field_def, :int, :field, + s(:int, 3)), + s(:function, :int, + s(:name, :func), + s(:parameters), + s(:expressions, + s(:return, + s(:field_access, + s(:receiver, + s(:name, :self)), + s(:field, + s(:name, :field)))))), + s(:call, + s(:name, :ofthen), + s(:arguments, + s(:int, 3), + s(:name, :var)))))) diff --git a/test/cases/class_def/class_function.tst b/test/cases/class_def/class_function.tst index 54d8dd9..0a4732e 100644 --- a/test/cases/class_def/class_function.tst +++ b/test/cases/class_def/class_function.tst @@ -10,26 +10,27 @@ end s(:expressions, s(:class, :Pifi, s(:derives, nil), - s(:call, - s(:name, :ofthen), - s(:arguments, - s(:int, 3), - s(:name, :var))), - s(:function, :int, - s(:name, :ofthen), - s(:parameters, - s(:parameter, :int, :n), - s(:parameter, :ref, :m)), - s(:expressions, - s(:assign, - s(:name, :n), - s(:operator, "+", + s(:expressions, + s(:call, + s(:name, :ofthen), + s(:arguments, + s(:int, 3), + s(:name, :var))), + s(:function, :int, + s(:name, :ofthen), + s(:parameters, + s(:parameter, :int, :n), + s(:parameter, :ref, :m)), + s(:expressions, + s(:assign, s(:name, :n), - s(:field_access, - s(:receiver, - s(:name, :m)), - s(:field, - s(:name, :index))))), - s(:return, - s(:name, :n))), - s(:receiver, :self)))) + s(:operator, "+", + s(:name, :n), + s(:field_access, + s(:receiver, + s(:name, :m)), + s(:field, + s(:name, :index))))), + s(:return, + s(:name, :n))), + s(:receiver, :self))))) diff --git a/test/cases/class_def/class_if.tst b/test/cases/class_def/class_if.tst index 9654ce4..76bd86d 100644 --- a/test/cases/class_def/class_if.tst +++ b/test/cases/class_def/class_if.tst @@ -11,19 +11,20 @@ end s(:expressions, s(:class, :Ifi, s(:derives, nil), - s(:function, :int, - s(:name, :ofthen), - s(:parameters, - s(:parameter, :int, :n)), - s(:expressions, - s(:if, - s(:condition, - s(:int, 0)), - s(:if_true, - s(:assign, - s(:name, :isit), - s(:int, 42))), - s(:if_false, - s(:assign, - s(:name, :maybenot), - s(:int, 667)))))))) + s(:expressions, + s(:function, :int, + s(:name, :ofthen), + s(:parameters, + s(:parameter, :int, :n)), + s(:expressions, + s(:if, + s(:condition, + s(:int, 0)), + s(:if_true, + s(:assign, + s(:name, :isit), + s(:int, 42))), + s(:if_false, + s(:assign, + s(:name, :maybenot), + s(:int, 667))))))))) diff --git a/test/cases/class_def/class_method.tst b/test/cases/class_def/class_method.tst index 920a890..243b8d3 100644 --- a/test/cases/class_def/class_method.tst +++ b/test/cases/class_def/class_method.tst @@ -5,10 +5,11 @@ class Foo < Object end -- -- -- s(:expressions, - s(:class, :Foo, - s(:derives, :Object), - s(:function, :int, - s(:name, :test), - s(:parameters), - s(:expressions, - s(:int, 43))))) + s(:class, :Foo, + s(:derives, :Object), + s(:expressions, + s(:function, :int, + s(:name, :test), + s(:parameters), + s(:expressions, + s(:int, 43)))))) diff --git a/test/cases/class_def/class_module.tst b/test/cases/class_def/class_module.tst index b2c41c6..ff9741b 100644 --- a/test/cases/class_def/class_module.tst +++ b/test/cases/class_def/class_module.tst @@ -4,12 +4,14 @@ class Foo end end -- -- -- -s(:expressions, - s(:class, :Foo, - s(:derives, nil), - s(:module, :Boo, - s(:call, - s(:name, :funcall), - s(:arguments, - s(:int, 3), - s(:name, :var)))))) +s(:expressions, + s(:class, :Foo, + s(:derives, nil), + s(:expressions, + s(:module, :Boo, + s(:expressions, + s(:call, + s(:name, :funcall), + s(:arguments, + s(:int, 3), + s(:name, :var)))))))) diff --git a/test/cases/class_def/class_ops.tst b/test/cases/class_def/class_ops.tst index afc800a..bcae6f7 100644 --- a/test/cases/class_def/class_ops.tst +++ b/test/cases/class_def/class_ops.tst @@ -8,13 +8,14 @@ end s(:expressions, s(:class, :Opers, s(:derives, nil), - s(:function, :int, - s(:name, :foo), - s(:parameters, - s(:parameter, :int, :x)), - s(:expressions, - s(:field_def, :int, :abba, - s(:int, 5)), - s(:operator, "+", - s(:name, :abba), - s(:int, 5)))))) + s(:expressions, + s(:function, :int, + s(:name, :foo), + s(:parameters, + s(:parameter, :int, :x)), + s(:expressions, + s(:field_def, :int, :abba, + s(:int, 5)), + s(:operator, "+", + s(:name, :abba), + s(:int, 5))))))) diff --git a/test/cases/class_def/simplest_class.tst b/test/cases/class_def/simplest_class.tst index 558dc2c..f5674e6 100644 --- a/test/cases/class_def/simplest_class.tst +++ b/test/cases/class_def/simplest_class.tst @@ -2,7 +2,8 @@ class Foo 5 end -- -- -- -s(:expressions, - s(:class, :Foo, - s(:derives, nil), - s(:int, 5))) +s(:expressions, + s(:class, :Foo, + s(:derives, nil), + s(:expressions, + s(:int, 5)))) diff --git a/test/cases/module_def/module_assign_var.tst b/test/cases/module_def/module_assign_var.tst index 4e3bc5c..a96f9c9 100644 --- a/test/cases/module_def/module_assign_var.tst +++ b/test/cases/module_def/module_assign_var.tst @@ -2,8 +2,9 @@ module Opers abba = 5 end -- -- -- -s(:expressions, - s(:module, :Opers, - s(:assign, - s(:name, :abba), - s(:int, 5)))) +s(:expressions, + s(:module, :Opers, + s(:expressions, + s(:assign, + s(:name, :abba), + s(:int, 5))))) diff --git a/test/cases/module_def/module_class.tst b/test/cases/module_def/module_class.tst index 3c5f155..baf8896 100644 --- a/test/cases/module_def/module_class.tst +++ b/test/cases/module_def/module_class.tst @@ -4,12 +4,14 @@ module Foo end end -- -- -- -s(:expressions, - s(:module, :Foo, - s(:class, :Bar, - s(:derives, nil), - s(:call, - s(:name, :funcall), - s(:arguments, - s(:int, 3), - s(:name, :var)))))) +s(:expressions, + s(:module, :Foo, + s(:expressions, + s(:class, :Bar, + s(:derives, nil), + s(:expressions, + s(:call, + s(:name, :funcall), + s(:arguments, + s(:int, 3), + s(:name, :var)))))))) diff --git a/test/cases/module_def/module_function.tst b/test/cases/module_def/module_function.tst index d1305d5..dcdbf79 100644 --- a/test/cases/module_def/module_function.tst +++ b/test/cases/module_def/module_function.tst @@ -7,16 +7,17 @@ end -- -- -- s(:expressions, s(:module, :Soho, - s(:call, - s(:name, :ofthen), - s(:arguments, - s(:int, 3), - s(:name, :var))), - s(:function, :int, - s(:name, :ofthen), - s(:parameters, - s(:parameter, :int, :n), - s(:parameter, :ref, :m)), - s(:expressions, - s(:return, - s(:int, 44)))))) + s(:expressions, + s(:call, + s(:name, :ofthen), + s(:arguments, + s(:int, 3), + s(:name, :var))), + s(:function, :int, + s(:name, :ofthen), + s(:parameters, + s(:parameter, :int, :n), + s(:parameter, :ref, :m)), + s(:expressions, + s(:return, + s(:int, 44))))))) diff --git a/test/cases/module_def/module_if.tst b/test/cases/module_def/module_if.tst index 800cf0b..9c09ca4 100644 --- a/test/cases/module_def/module_if.tst +++ b/test/cases/module_def/module_if.tst @@ -10,19 +10,20 @@ end -- -- -- s(:expressions, s(:module, :Foo, - s(:function, :ref, - s(:name, :ofthen), - s(:parameters, - s(:parameter, :int, :n)), - s(:expressions, - s(:if, - s(:condition, - s(:int, 0)), - s(:if_true, - s(:assign, - s(:name, :isit), - s(:int, 42))), - s(:if_false, - s(:assign, - s(:name, :maybenot), - s(:int, 667)))))))) + s(:expressions, + s(:function, :ref, + s(:name, :ofthen), + s(:parameters, + s(:parameter, :int, :n)), + s(:expressions, + s(:if, + s(:condition, + s(:int, 0)), + s(:if_true, + s(:assign, + s(:name, :isit), + s(:int, 42))), + s(:if_false, + s(:assign, + s(:name, :maybenot), + s(:int, 667))))))))) diff --git a/test/cases/module_def/module_ops.tst b/test/cases/module_def/module_ops.tst index fa79b14..3eee683 100644 --- a/test/cases/module_def/module_ops.tst +++ b/test/cases/module_def/module_ops.tst @@ -7,18 +7,19 @@ end -- -- -- s(:expressions, s(:module, :Opers, - s(:function, :int, - s(:name, :foo), - s(:parameters, - s(:parameter, :int, :x)), - s(:expressions, - s(:field_def, :int, :abba, - s(:field_access, - s(:receiver, - s(:name, :self)), - s(:field, - s(:name, :index)))), - s(:return, - s(:operator, "+", - s(:name, :abba), - s(:int, 5))))))) + s(:expressions, + s(:function, :int, + s(:name, :foo), + s(:parameters, + s(:parameter, :int, :x)), + s(:expressions, + s(:field_def, :int, :abba, + s(:field_access, + s(:receiver, + s(:name, :self)), + s(:field, + s(:name, :index)))), + s(:return, + s(:operator, "+", + s(:name, :abba), + s(:int, 5)))))))) diff --git a/test/cases/module_def/simplest_module.tst b/test/cases/module_def/simplest_module.tst index 8144b6e..db6b3b7 100644 --- a/test/cases/module_def/simplest_module.tst +++ b/test/cases/module_def/simplest_module.tst @@ -2,6 +2,7 @@ module Simple 5 end -- -- -- -s(:expressions, - s(:module, :Simple, - s(:int, 5))) +s(:expressions, + s(:module, :Simple, + s(:expressions, + s(:int, 5)))) diff --git a/test/cases/root/class_method.tst b/test/cases/root/class_method.tst index 82d617f..7f84f14 100644 --- a/test/cases/root/class_method.tst +++ b/test/cases/root/class_method.tst @@ -3,12 +3,13 @@ class FooBo end -- -- -- -s(:expressions, - s(:class, :FooBo, - s(:derives, nil), - s(:call, - s(:name, :call), - s(:arguments, - s(:int, 35)), - s(:receiver, - s(:module, "Bar"))))) +s(:expressions, + s(:class, :FooBo, + s(:derives, nil), + s(:expressions, + s(:call, + s(:name, :call), + s(:arguments, + s(:int, 35)), + s(:receiver, + s(:module, "Bar")))))) diff --git a/test/cases/root/module_assignment.tst b/test/cases/root/module_assignment.tst index cc0eb13..2120606 100644 --- a/test/cases/root/module_assignment.tst +++ b/test/cases/root/module_assignment.tst @@ -4,16 +4,17 @@ module Fibo end -- -- -- -s(:expressions, - s(:module, :Fibo, - s(:assign, - s(:name, :a), - s(:operator, "+", - s(:int, 5), - s(:name, :foo))), - s(:call, - s(:name, :bar), - s(:arguments, - s(:name, :b), - s(:name, :a), - s(:name, :r))))) +s(:expressions, + s(:module, :Fibo, + s(:expressions, + s(:assign, + s(:name, :a), + s(:operator, "+", + s(:int, 5), + s(:name, :foo))), + s(:call, + s(:name, :bar), + s(:arguments, + s(:name, :b), + s(:name, :a), + s(:name, :r)))))) diff --git a/test/cases/root/module_method.tst b/test/cases/root/module_method.tst index 1e67132..12771f5 100644 --- a/test/cases/root/module_method.tst +++ b/test/cases/root/module_method.tst @@ -10,16 +10,17 @@ end -- -- -- s(:expressions, s(:module, :Fibo, - s(:function, :int, - s(:name, :fibonaccit), - s(:parameters, - s(:parameter, :int, :n)), - s(:expressions, - s(:field_def, :int, :a, - s(:int, 0)), - s(:return, - s(:name, :a)))), - s(:call, - s(:name, :fibonaccit), - s(:arguments, - s(:int, 10))))) + s(:expressions, + s(:function, :int, + s(:name, :fibonaccit), + s(:parameters, + s(:parameter, :int, :n)), + s(:expressions, + s(:field_def, :int, :a, + s(:int, 0)), + s(:return, + s(:name, :a)))), + s(:call, + s(:name, :fibonaccit), + s(:arguments, + s(:int, 10)))))) diff --git a/test/cases/root/root_module_class.tst b/test/cases/root/root_module_class.tst index 895df46..34ef8f1 100644 --- a/test/cases/root/root_module_class.tst +++ b/test/cases/root/root_module_class.tst @@ -5,12 +5,14 @@ module FooBo end -- -- -- -s(:expressions, - s(:module, :FooBo, - s(:class, :Bar, - s(:derives, nil), - s(:assign, - s(:name, :a), - s(:operator, "+", - s(:int, 5), - s(:name, :foo)))))) +s(:expressions, + s(:module, :FooBo, + s(:expressions, + s(:class, :Bar, + s(:derives, nil), + s(:expressions, + s(:assign, + s(:name, :a), + s(:operator, "+", + s(:int, 5), + s(:name, :foo))))))))