| // |reftest| skip-if(!xulRuntime.shell) |
| function test() { |
| |
| // Bug 924688: computed property names |
| assertExpr('a= {[field1]: "a", [field2=1]: "b"}', |
| aExpr("=", ident("a"), |
| objExpr([{ key: computedName(ident("field1")), value: lit("a")}, |
| { key: computedName(aExpr("=", ident("field2"), lit(1))), |
| value: lit("b")}]))); |
| |
| assertExpr('a= {["field1"]: "a", field2 : "b"}', |
| aExpr("=", ident("a"), |
| objExpr([{ key: computedName(lit("field1")), value: lit("a") }, |
| { key: ident("field2"), value: lit("b") }]))); |
| |
| assertExpr('a= {[1]: 1, 2 : 2}', |
| aExpr("=", ident("a"), |
| objExpr([{ key: computedName(lit(1)), value: lit(1) }, |
| { key: lit(2), value: lit(2) }]))); |
| |
| // Bug 924688: computed property names - location information |
| var node = Reflect.parse("a = {[field1]: 5}"); |
| Pattern({ body: [ { expression: { right: { properties: [ {key: { loc: |
| { start: { line: 1, column: 5 }, end: { line: 1, column: 13 }}}}]}}}]}).match(node); |
| |
| // Bug 1048384 - Getter/setter syntax with computed names |
| assertExpr("b = { get [meth]() { } }", aExpr("=", ident("b"), |
| objExpr([{ key: computedName(ident("meth")), value: funExpr(null, [], blockStmt([])), |
| method: false, kind: "get"}]))); |
| assertExpr("b = { set [meth](a) { } }", aExpr("=", ident("b"), |
| objExpr([{ key: computedName(ident("meth")), value: funExpr(null, [ident("a")], |
| blockStmt([])), method: false, kind: "set"}]))); |
| |
| // Bug 1220702 - If it's not written as a method, `.method` should be false. |
| assertExpr("({[x]: function () {}})", |
| objExpr([{ |
| key: computedName(ident("x")), |
| value: funExpr(null, [], blockStmt([])), |
| method: false, |
| kind: "init" |
| }])); |
| |
| } |
| |
| runtest(test); |