mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-10 21:58:48 +01:00
Allow call and unary expressions as map keys.
This commit is contained in:
@ -1987,7 +1987,7 @@ static void map(Compiler* compiler, bool allowAssignment)
|
||||
if (peek(compiler) == TOKEN_RIGHT_BRACE) break;
|
||||
|
||||
// The key.
|
||||
parsePrecedence(compiler, false, PREC_PRIMARY);
|
||||
parsePrecedence(compiler, false, PREC_UNARY);
|
||||
consume(compiler, TOKEN_COLON, "Expect ':' after map key.");
|
||||
ignoreNewlines(compiler);
|
||||
|
||||
|
||||
3
test/language/map/bad_key_precedence.wren
Normal file
3
test/language/map/bad_key_precedence.wren
Normal file
@ -0,0 +1,3 @@
|
||||
var map = {
|
||||
1 + 2: "bad key" // expect error
|
||||
}
|
||||
26
test/language/map/precedence.wren
Normal file
26
test/language/map/precedence.wren
Normal file
@ -0,0 +1,26 @@
|
||||
var name = "value"
|
||||
|
||||
var map = {
|
||||
// Primary.
|
||||
name: name,
|
||||
1: true,
|
||||
|
||||
// Call.
|
||||
name.count: name.count,
|
||||
name[0]: name[1],
|
||||
|
||||
// Unary.
|
||||
-1: -2,
|
||||
~3: !false,
|
||||
|
||||
// Allow any expression for a value.
|
||||
"key": true ? 1 : 2
|
||||
}
|
||||
|
||||
System.print(map[name]) // expect: value
|
||||
System.print(map[1]) // expect: true
|
||||
System.print(map[name.count]) // expect: 5
|
||||
System.print(map[name[0]]) // expect: a
|
||||
System.print(map[-1]) // expect: -2
|
||||
System.print(map[~3]) // expect: true
|
||||
System.print(map["key"]) // expect: 1
|
||||
Reference in New Issue
Block a user