Files
wren/test/conditional/precedence.wren
T
Bob Nystrom a1365c4183 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.
2014-04-03 14:48:19 +00:00

56 lines
1.8 KiB
Plaintext

class Foo {
static bar { true }
static baz { 1 }
}
// Condition precedence.
IO.print(true ? 1 : 2) // expect: 1
IO.print((true) ? 1 : 2) // expect: 1
IO.print([true][0] ? 1 : 2) // expect: 1
IO.print(Foo.bar ? 1 : 2) // expect: 1
IO.print(3..4 ? 1 : 2) // expect: 1
IO.print(3 * 4 ? 1 : 2) // expect: 1
IO.print(3 + 4 ? 1 : 2) // expect: 1
IO.print(true || false ? 1 : 2) // expect: 1
IO.print(!false ? 1 : 2) // expect: 1
IO.print(~0 ? 1 : 2) // expect: 1
IO.print(3 is Num ? 1 : 2) // expect: 1
IO.print(new Foo ? 1 : 2) // expect: 1
var a = 0
IO.print(a = 3 ? 1 : 2) // expect: 1
IO.print(a) // expect: 1
// Then branch precedence.
IO.print(true ? (1) : 2) // expect: 1
IO.print(true ? [1][0] : 2) // expect: 1
IO.print(true ? Foo.baz : 2) // expect: 1
IO.print(true ? 3..4 : 2) // expect: 3..4
IO.print(true ? 3 * 4 : 2) // expect: 12
IO.print(true ? 3 + 4 : 2) // expect: 7
IO.print(true ? 1 || false : 2) // expect: 1
IO.print(true ? !true : 2) // expect: false
IO.print(true ? ~0 : 2) // expect: 4294967295
IO.print(true ? 3 is Bool : 2) // expect: false
IO.print(true ? new Foo : 2) // expect: instance of Foo
IO.print(true ? a = 5 : 2) // expect: 5
IO.print(a) // expect: 5
// Else branch precedence.
IO.print(false ? 1 : (2)) // expect: 2
IO.print(false ? 1 : [2][0]) // expect: 2
IO.print(false ? 2 : Foo.baz) // expect: 1
IO.print(false ? 1 : 3..4) // expect: 3..4
IO.print(false ? 1 : 3 * 4) // expect: 12
IO.print(false ? 1 : 3 + 4) // expect: 7
IO.print(false ? 1 : 2 || false) // expect: 2
IO.print(false ? 1 : !false) // expect: true
IO.print(false ? 1 : ~0) // expect: 4294967295
IO.print(false ? 1 : 3 is Num) // expect: true
IO.print(false ? 1 : new Foo) // expect: instance of Foo
// Associativity.
IO.print(true ? 2 : true ? 4 : 5) // expect: 2
IO.print(false ? 2 : true ? 4 : 5) // expect: 4