lgcl-and-assignment-operator.js (1927B)
1 // Copyright (c) 2020 Ecma International. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-assignment-operators-runtime-semantics-evaluation 6 description: Logical And Assignment Operator 7 info: | 8 AssignmentExpression: 9 LeftHandSideExpression &&= AssignmentExpression 10 11 1. Let lref be the result of evaluating LeftHandSideExpression. 12 2. Let lval be ? GetValue(lref). 13 3. Let lbool be ! ToBoolean(lval). 14 4. If lbool is false, return lval. 15 5. Let rref be the result of evaluating AssignmentExpression. 16 6. Let rval be ? GetValue(rref). 17 7. Perform ? PutValue(lref, rval). 18 8. Return rval. 19 features: [logical-assignment-operators] 20 21 ---*/ 22 23 var value = undefined; 24 assert.sameValue(value &&= 1, undefined, "(value &&= 1) === undefined; where value = undefined"); 25 26 value = null; 27 assert.sameValue(value &&= 1, null, "(value &&= 1) === null where value = null"); 28 29 value = false; 30 assert.sameValue(value &&= 1, false, "(value &&= 1) === false; where value = false"); 31 32 value = 0; 33 assert.sameValue(value &&= 1, 0, "(value &&= 1) === 0; where value = 0"); 34 35 value = -0; 36 assert.sameValue(value &&= 1, -0, "(value &&= 1) === -0; where value = -0"); 37 38 value = NaN; 39 assert.sameValue(value &&= 1, NaN, "(value &&= 1) === NaN; where value = NaN"); 40 41 value = ""; 42 assert.sameValue(value &&= 1, "", '(value &&= 1) === "" where value = ""'); 43 44 45 46 value = true; 47 assert.sameValue(value &&= 1, 1, "(value &&= 1) === 1; where value = true"); 48 49 value = 2; 50 assert.sameValue(value &&= 1, 1, "(value &&= 1) === 1; where value = 2"); 51 52 value = "test"; 53 assert.sameValue(value &&= 1, 1, '(value &&= 1) === 1; where value = "test"'); 54 55 var sym = Symbol(""); 56 value = sym; 57 assert.sameValue(value &&= 1, 1, "(value &&= 1) === 1; where value = Symbol()"); 58 59 var obj = {}; 60 value = obj; 61 assert.sameValue(value &&= 1, 1, "(value &&= 1) === 1; where value = {}"); 62 63 reportCompare(0, 0);