feat: unify block, function, and method body parsing to support single-expression implicit returns
Refactor `finishBlock` in `wren_compiler.c` to detect single-expression bodies (no newline after `{`) and leave a value on the stack, enabling implicit returns for methods and functions. Add `finishBody` wrapper to handle constructor flag. Update all benchmark and test `.wren` files to remove explicit `return` keywords from getters and single-expression methods, relying on the new implicit return behavior. Remove old `return_null_if_brace.wren` test, add `newline_body.wren`, `newline_in_expression_block.wren`, and `no_newline_before_close.wren` tests for edge cases.
This commit is contained in:
+15
-15
@@ -1,20 +1,20 @@
|
||||
class Foo {
|
||||
+ other { return "infix + " + other }
|
||||
- other { return "infix - " + other }
|
||||
* other { return "infix * " + other }
|
||||
/ other { return "infix / " + other }
|
||||
% other { return "infix % " + other }
|
||||
< other { return "infix < " + other }
|
||||
> other { return "infix > " + other }
|
||||
<= other { return "infix <= " + other }
|
||||
>= other { return "infix >= " + other }
|
||||
== other { return "infix == " + other }
|
||||
!= other { return "infix != " + other }
|
||||
& other { return "infix & " + other }
|
||||
| other { return "infix | " + other }
|
||||
+ other { "infix + " + other }
|
||||
- other { "infix - " + other }
|
||||
* other { "infix * " + other }
|
||||
/ other { "infix / " + other }
|
||||
% other { "infix % " + other }
|
||||
< other { "infix < " + other }
|
||||
> other { "infix > " + other }
|
||||
<= other { "infix <= " + other }
|
||||
>= other { "infix >= " + other }
|
||||
== other { "infix == " + other }
|
||||
!= other { "infix != " + other }
|
||||
& other { "infix & " + other }
|
||||
| other { "infix | " + other }
|
||||
|
||||
! { return "prefix !" }
|
||||
- { return "prefix -" }
|
||||
! { "prefix !" }
|
||||
- { "prefix -" }
|
||||
}
|
||||
|
||||
var foo = new Foo
|
||||
|
||||
Reference in New Issue
Block a user