diff --git a/lib/parser/call_site.rb b/lib/parser/call_site.rb index b1c3f42..6ba7827 100644 --- a/lib/parser/call_site.rb +++ b/lib/parser/call_site.rb @@ -2,9 +2,12 @@ module Parser module CallSite include Parslet - rule(:field_access) { name.as(:receiver) >> str(".") >> name.as(:field) } + rule(:r_value) { operator_value | call_site | field_access | basic_type } - rule(:r_value) { call_site | field_access | basic_type } + rule(:assign) { str('=') >> space?} + rule(:assignment){ (field_access|name).as(:l_value) >> assign.as(:assign) >> r_value.as(:r_value) } + + rule(:field_def) { type >> name >> (assign >> r_value.as(:value) ).maybe} rule(:argument_list) { left_parenthesis >> diff --git a/test/cases/assignment/assignment_instance.tst b/test/cases/assignment/assignment_instance.tst index 395cd9f..6836f89 100644 --- a/test/cases/assignment/assignment_instance.tst +++ b/test/cases/assignment/assignment_instance.tst @@ -1,6 +1,9 @@ -a = 5 +self.a = 5 -- -- -- -s(:expressions, - s(:assign, - s(:name, :a), - s(:int, 5))) +s(:assignment, + s(:field_access, + s(:receiver, + s(:name, :self)), + s(:field, + s(:name, :a))), + s(:int, 5)) diff --git a/test/cases/assignment/name.tst b/test/cases/assignment/name.tst new file mode 100644 index 0000000..d82f603 --- /dev/null +++ b/test/cases/assignment/name.tst @@ -0,0 +1,5 @@ +name = 10 +-- -- -- +s(:assignment, + s(:name, :name), + s(:int, 10)) diff --git a/test/cases/call_site/call_puts_two.tst b/test/cases/call_site/call_puts_two.tst index afdf70e..64c408b 100644 --- a/test/cases/call_site/call_puts_two.tst +++ b/test/cases/call_site/call_puts_two.tst @@ -1,8 +1,7 @@ puts(3 , a ) -- -- -- -s(:expressions, - s(:call, - s(:name, :puts), - s(:arguments, - s(:int, 3), - s(:name, :a)))) +s(:call, + s(:name, :puts), + s(:arguments, + s(:int, 3), + s(:name, :a))) diff --git a/test/cases/call_site/call_site_multi.tst b/test/cases/call_site/call_site_multi.tst index f85986f..55c9c7d 100644 --- a/test/cases/call_site/call_site_multi.tst +++ b/test/cases/call_site/call_site_multi.tst @@ -1,8 +1,7 @@ baz(42, foo) -- -- -- -s(:expressions, - s(:call, - s(:name, :baz), - s(:arguments, - s(:int, 42), - s(:name, :foo)))) +s(:call, + s(:name, :baz), + s(:arguments, + s(:int, 42), + s(:name, :foo))) diff --git a/test/cases/call_site/call_site_string.tst b/test/cases/call_site/call_site_string.tst index de1d217..fac14d5 100644 --- a/test/cases/call_site/call_site_string.tst +++ b/test/cases/call_site/call_site_string.tst @@ -1,7 +1,6 @@ puts( "hello") -- -- -- -s(:expressions, - s(:call, - s(:name, :puts), - s(:arguments, - s(:string, "hello")))) +s(:call, + s(:name, :puts), + s(:arguments, + s(:string, "hello"))) diff --git a/test/cases/call_site/int_receiver.tst b/test/cases/call_site/int_receiver.tst index 93ddf0a..ee4f956 100644 --- a/test/cases/call_site/int_receiver.tst +++ b/test/cases/call_site/int_receiver.tst @@ -1,8 +1,7 @@ 42.put() -- -- -- -s(:expressions, - s(:call, - s(:name, :put), - s(:arguments), - s(:receiver, - s(:int, 42)))) +s(:call, + s(:name, :put), + s(:arguments), + s(:receiver, + s(:int, 42))) diff --git a/test/cases/call_site/puts_call.tst b/test/cases/call_site/puts_call.tst index 2b87134..a3d6aa3 100644 --- a/test/cases/call_site/puts_call.tst +++ b/test/cases/call_site/puts_call.tst @@ -1,7 +1,6 @@ puts( 5) -- -- -- -s(:expressions, - s(:call, - s(:name, :puts), - s(:arguments, - s(:int, 5)))) +s(:call, + s(:name, :puts), + s(:arguments, + s(:int, 5))) diff --git a/test/cases/call_site/single_argument.tst b/test/cases/call_site/single_argument.tst index 1b9a6a0..9de72ea 100644 --- a/test/cases/call_site/single_argument.tst +++ b/test/cases/call_site/single_argument.tst @@ -1,7 +1,6 @@ foo(42) -- -- -- -s(:expressions, - s(:call, - s(:name, :foo), - s(:arguments, - s(:int, 42)))) +s(:call, + s(:name, :foo), + s(:arguments, + s(:int, 42))) diff --git a/test/cases/call_site/single_class.tst b/test/cases/call_site/single_class.tst index 71e0968..9e04134 100644 --- a/test/cases/call_site/single_class.tst +++ b/test/cases/call_site/single_class.tst @@ -1,9 +1,8 @@ Object.foo(42) -- -- -- -s(:expressions, - s(:call, - s(:name, :foo), - s(:arguments, - s(:int, 42)), - s(:receiver, - s(:module, "Object")))) +s(:call, + s(:name, :foo), + s(:arguments, + s(:int, 42)), + s(:receiver, + s(:class_name, :Object))) diff --git a/test/cases/call_site/single_name.tst b/test/cases/call_site/single_name.tst index ec24552..a2dee1e 100644 --- a/test/cases/call_site/single_name.tst +++ b/test/cases/call_site/single_name.tst @@ -1,9 +1,8 @@ my_my.foo(42) -- -- -- -s(:expressions, - s(:call, - s(:name, :foo), - s(:arguments, - s(:int, 42)), - s(:receiver, - s(:name, :my_my)))) +s(:call, + s(:name, :foo), + s(:arguments, + s(:int, 42)), + s(:receiver, + s(:name, :my_my))) diff --git a/test/cases/call_site/single_self.tst b/test/cases/call_site/single_self.tst index 1161e31..6006843 100644 --- a/test/cases/call_site/single_self.tst +++ b/test/cases/call_site/single_self.tst @@ -1,9 +1,8 @@ self.foo(42) -- -- -- -s(:expressions, - s(:call, - s(:name, :foo), - s(:arguments, - s(:int, 42)), - s(:receiver, - s(:name, :self)))) +s(:call, + s(:name, :foo), + s(:arguments, + s(:int, 42)), + s(:receiver, + s(:name, :self))) diff --git a/test/cases/call_site/string_receiver.tst b/test/cases/call_site/string_receiver.tst index e3bcc23..0b6b860 100644 --- a/test/cases/call_site/string_receiver.tst +++ b/test/cases/call_site/string_receiver.tst @@ -1,8 +1,7 @@ "hello".puts() -- -- -- -s(:expressions, - s(:call, - s(:name, :puts), - s(:arguments), - s(:receiver, - s(:string, "hello")))) +s(:call, + s(:name, :puts), + s(:arguments), + s(:receiver, + s(:string, "hello")))