mirror of https://github.com/tc39/test262.git
Add tests for Nullish Coalesce Expression
This commit is contained in:
parent
6b66b82d88
commit
ec41c1a417
|
@ -0,0 +1,58 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Abrupt completions are also a Short circuit and prevent evaluation of the right-side expressions
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
function poison() {
|
||||
throw new Test262Error('poison handled');
|
||||
}
|
||||
|
||||
function morePoison() {
|
||||
throw 'poison!!!!';
|
||||
}
|
||||
|
||||
x = undefined;
|
||||
assert.throws(Test262Error, function() {
|
||||
undefined ?? poison() ?? morePoison();
|
||||
}, 'undefined ?? poison() ?? morePoison();');
|
||||
|
||||
x = undefined;
|
||||
assert.throws(Test262Error, function() {
|
||||
null ?? poison() ?? morePoison();
|
||||
}, 'null ?? poison() ?? morePoison();');
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
poison() ?? morePoison();
|
||||
}, 'poison() ?? morePoison();');
|
|
@ -0,0 +1,29 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Cannot immediately contain, or be contained within, an && or || operation.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
features: [coalesce-expression]
|
||||
negative:
|
||||
phase: early
|
||||
type: SyntaxError
|
||||
---*/
|
||||
|
||||
0 && 0 ?? true;
|
|
@ -0,0 +1,29 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Cannot immediately contain, or be contained within, an && or || operation.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
features: [coalesce-expression]
|
||||
negative:
|
||||
phase: early
|
||||
type: SyntaxError
|
||||
---*/
|
||||
|
||||
0 || 0 ?? true;
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
If the CoalesceExpressionHead is undefined or null, follow return the right-side value.
|
||||
Otherwise, return the left-side value.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
features: [coalesce-expression]
|
||||
negative:
|
||||
phase: early
|
||||
type: SyntaxError
|
||||
---*/
|
||||
|
||||
0 ?? 0 && true;
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
If the CoalesceExpressionHead is undefined or null, follow return the right-side value.
|
||||
Otherwise, return the left-side value.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
features: [coalesce-expression]
|
||||
negative:
|
||||
phase: early
|
||||
type: SyntaxError
|
||||
---*/
|
||||
|
||||
0 ?? 0 || true;
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
CoalesceExpression is chainable with the BitwiseANDExpression
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = null ?? 42 & 43;
|
||||
assert.sameValue(x, 42, 'null ?? 42 & 43');
|
||||
|
||||
x = undefined ?? 42 & 43;
|
||||
assert.sameValue(x, 42, 'null ?? 42 & 43');
|
||||
|
||||
x = false ?? 42 & 43;
|
||||
assert.sameValue(x, false, 'false ?? 42 & 43');
|
||||
|
||||
x = true ?? 42 & 43;
|
||||
assert.sameValue(x, true, 'true ?? 42 & 43');
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
CoalesceExpression is chainable with the BitwiseORExpression
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = null ?? 1 | 42;
|
||||
assert.sameValue(x, 43, 'null ?? 1 | 42');
|
||||
|
||||
x = undefined ?? 1 | 42;
|
||||
assert.sameValue(x, 43, 'null ?? 1 | 42');
|
||||
|
||||
x = false ?? 1 | 42;
|
||||
assert.sameValue(x, false, 'false ?? 1 | 42');
|
||||
|
||||
x = true ?? 1 | 42;
|
||||
assert.sameValue(x, true, 'true ?? 1 | 42');
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
CoalesceExpression is chainable with the BitwiseXORExpression
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = null ?? 1 ^ 42;
|
||||
assert.sameValue(x, 43, 'null ?? 1 ^ 42');
|
||||
|
||||
x = undefined ?? 1 ^ 42;
|
||||
assert.sameValue(x, 43, 'null ?? 1 ^ 42');
|
||||
|
||||
x = false ?? 1 ^ 42;
|
||||
assert.sameValue(x, false, 'false ?? 1 ^ 42');
|
||||
|
||||
x = true ?? 1 ^ 42;
|
||||
assert.sameValue(x, true, 'true ?? 1 ^ 42');
|
|
@ -0,0 +1,50 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
If the CoalesceExpressionHead is undefined or null, follow return the right-side value.
|
||||
Otherwise, return the left-side value.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = null ?? undefined ?? 42;
|
||||
assert.sameValue(x, 42, 'null ?? undefined ?? 42');
|
||||
|
||||
x = undefined ?? null ?? 42;
|
||||
assert.sameValue(x, 42, 'undefined ?? null ?? 42');
|
||||
|
||||
x = null ?? null ?? 42;
|
||||
assert.sameValue(x, 42, 'null ?? null ?? 42');
|
||||
|
||||
x = undefined ?? undefined ?? 42;
|
||||
assert.sameValue(x, 42, 'null ?? null ?? 42');
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
If the CoalesceExpressionHead is null, follow return the right-side eval.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = null ?? 42;
|
||||
assert.sameValue(x, 42, 'null ?? 42');
|
||||
|
||||
x = null ?? undefined;
|
||||
assert.sameValue(x, undefined, 'null ?? undefined');
|
||||
|
||||
x = null ?? null;
|
||||
assert.sameValue(x, null, 'null ?? null');
|
||||
|
||||
x = null ?? false;
|
||||
assert.sameValue(x, false, 'null ?? false');
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
If the CoalesceExpressionHead is undefined, follow return the right-side eval.
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = undefined ?? 42;
|
||||
assert.sameValue(x, 42, 'undefined ?? 42');
|
||||
|
||||
x = undefined ?? undefined;
|
||||
assert.sameValue(x, undefined, 'undefined ?? undefined');
|
||||
|
||||
x = undefined ?? null;
|
||||
assert.sameValue(x, null, 'undefined ?? null');
|
||||
|
||||
x = undefined ?? false;
|
||||
assert.sameValue(x, false, 'undefined ?? false');
|
|
@ -0,0 +1,81 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (0)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? 1;
|
||||
assert.sameValue(x, 0, '0 ?? 1');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? null;
|
||||
assert.sameValue(x, 0, '0 ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? undefined;
|
||||
assert.sameValue(x, 0, '0 ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? null ?? undefined;
|
||||
assert.sameValue(x, 0, '0 ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? undefined ?? null;
|
||||
assert.sameValue(x, 0, '0 ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? null ?? null;
|
||||
assert.sameValue(x, 0, '0 ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? undefined ?? undefined;
|
||||
assert.sameValue(x, 0, '0 ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? 0 ?? null;
|
||||
assert.sameValue(x, 0, 'null ?? 0 ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? 0 ?? undefined;
|
||||
assert.sameValue(x, 0, 'null ?? 0 ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? 0 ?? null;
|
||||
assert.sameValue(x, 0, 'undefined ?? 0 ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? 0 ?? undefined;
|
||||
assert.sameValue(x, 0, 'undefined ?? 0 ?? undefined');
|
|
@ -0,0 +1,81 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (42)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? 1;
|
||||
assert.sameValue(x, 42, '42 ?? 1');
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? null;
|
||||
assert.sameValue(x, 42, '42 ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? undefined;
|
||||
assert.sameValue(x, 42, '42 ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? null ?? undefined;
|
||||
assert.sameValue(x, 42, '42 ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? undefined ?? null;
|
||||
assert.sameValue(x, 42, '42 ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? null ?? null;
|
||||
assert.sameValue(x, 42, '42 ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? undefined ?? undefined;
|
||||
assert.sameValue(x, 42, '42 ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? 42 ?? null;
|
||||
assert.sameValue(x, 42, 'null ?? 42 ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? 42 ?? undefined;
|
||||
assert.sameValue(x, 42, 'null ?? 42 ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? 42 ?? null;
|
||||
assert.sameValue(x, 42, 'undefined ?? 42 ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? 42 ?? undefined;
|
||||
assert.sameValue(x, 42, 'undefined ?? 42 ?? undefined');
|
|
@ -0,0 +1,82 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (the empty string)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
var str = '';
|
||||
|
||||
x = undefined;
|
||||
x = str ?? 1;
|
||||
assert.sameValue(x, str, 'str ?? 1');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? null;
|
||||
assert.sameValue(x, str, 'str ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? undefined;
|
||||
assert.sameValue(x, str, 'str ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? null ?? undefined;
|
||||
assert.sameValue(x, str, 'str ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? undefined ?? null;
|
||||
assert.sameValue(x, str, 'str ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? null ?? null;
|
||||
assert.sameValue(x, str, 'str ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? undefined ?? undefined;
|
||||
assert.sameValue(x, str, 'str ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? str ?? null;
|
||||
assert.sameValue(x, str, 'null ?? str ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? str ?? undefined;
|
||||
assert.sameValue(x, str, 'null ?? str ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? str ?? null;
|
||||
assert.sameValue(x, str, 'undefined ?? str ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? str ?? undefined;
|
||||
assert.sameValue(x, str, 'undefined ?? str ?? undefined');
|
|
@ -0,0 +1,81 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (false)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = undefined;
|
||||
x = false ?? 1;
|
||||
assert.sameValue(x, false, 'false ?? 1');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? null;
|
||||
assert.sameValue(x, false, 'false ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? undefined;
|
||||
assert.sameValue(x, false, 'false ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? null ?? undefined;
|
||||
assert.sameValue(x, false, 'false ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? undefined ?? null;
|
||||
assert.sameValue(x, false, 'false ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? null ?? null;
|
||||
assert.sameValue(x, false, 'false ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? undefined ?? undefined;
|
||||
assert.sameValue(x, false, 'false ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? false ?? null;
|
||||
assert.sameValue(x, false, 'null ?? false ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? false ?? undefined;
|
||||
assert.sameValue(x, false, 'null ?? false ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? false ?? null;
|
||||
assert.sameValue(x, false, 'undefined ?? false ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? false ?? undefined;
|
||||
assert.sameValue(x, false, 'undefined ?? false ?? undefined');
|
|
@ -0,0 +1,89 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (object)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
var obj = {
|
||||
toString() {
|
||||
return null;
|
||||
},
|
||||
valueOf() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? 1;
|
||||
assert.sameValue(x, obj, 'obj ?? 1');
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? null;
|
||||
assert.sameValue(x, obj, 'obj ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? undefined;
|
||||
assert.sameValue(x, obj, 'obj ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? null ?? undefined;
|
||||
assert.sameValue(x, obj, 'obj ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? undefined ?? null;
|
||||
assert.sameValue(x, obj, 'obj ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? null ?? null;
|
||||
assert.sameValue(x, obj, 'obj ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = obj ?? undefined ?? undefined;
|
||||
assert.sameValue(x, obj, 'obj ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? obj ?? null;
|
||||
assert.sameValue(x, obj, 'null ?? obj ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? obj ?? undefined;
|
||||
assert.sameValue(x, obj, 'null ?? obj ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? obj ?? null;
|
||||
assert.sameValue(x, obj, 'undefined ?? obj ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? obj ?? undefined;
|
||||
assert.sameValue(x, obj, 'undefined ?? obj ?? undefined');
|
|
@ -0,0 +1,82 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (string)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
var str = 'undefined';
|
||||
|
||||
x = undefined;
|
||||
x = str ?? 1;
|
||||
assert.sameValue(x, str, 'str ?? 1');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? null;
|
||||
assert.sameValue(x, str, 'str ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? undefined;
|
||||
assert.sameValue(x, str, 'str ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? null ?? undefined;
|
||||
assert.sameValue(x, str, 'str ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? undefined ?? null;
|
||||
assert.sameValue(x, str, 'str ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? null ?? null;
|
||||
assert.sameValue(x, str, 'str ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = str ?? undefined ?? undefined;
|
||||
assert.sameValue(x, str, 'str ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? str ?? null;
|
||||
assert.sameValue(x, str, 'null ?? str ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? str ?? undefined;
|
||||
assert.sameValue(x, str, 'null ?? str ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? str ?? null;
|
||||
assert.sameValue(x, str, 'undefined ?? str ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? str ?? undefined;
|
||||
assert.sameValue(x, str, 'undefined ?? str ?? undefined');
|
|
@ -0,0 +1,82 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (Symbol)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
var s = Symbol();
|
||||
|
||||
x = undefined;
|
||||
x = s ?? 1;
|
||||
assert.sameValue(x, s, 's ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = s ?? null;
|
||||
assert.sameValue(x, s, 's ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = s ?? undefined;
|
||||
assert.sameValue(x, s, 's ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = s ?? null ?? undefined;
|
||||
assert.sameValue(x, s, 's ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = s ?? undefined ?? null;
|
||||
assert.sameValue(x, s, 's ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = s ?? null ?? null;
|
||||
assert.sameValue(x, s, 's ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = s ?? undefined ?? undefined;
|
||||
assert.sameValue(x, s, 's ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? s ?? null;
|
||||
assert.sameValue(x, s, 'null ?? s ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? s ?? undefined;
|
||||
assert.sameValue(x, s, 'null ?? s ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? s ?? null;
|
||||
assert.sameValue(x, s, 'undefined ?? s ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? s ?? undefined;
|
||||
assert.sameValue(x, s, 'undefined ?? s ?? undefined');
|
|
@ -0,0 +1,81 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit if the CoalesceExpressionHead is not undefined or null (true)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = undefined;
|
||||
x = true ?? 1;
|
||||
assert.sameValue(x, true, 'true ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? null;
|
||||
assert.sameValue(x, true, 'true ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? undefined;
|
||||
assert.sameValue(x, true, 'true ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? null ?? undefined;
|
||||
assert.sameValue(x, true, 'true ?? null ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? undefined ?? null;
|
||||
assert.sameValue(x, true, 'true ?? undefined ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? null ?? null;
|
||||
assert.sameValue(x, true, 'true ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? undefined ?? undefined;
|
||||
assert.sameValue(x, true, 'true ?? null ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? true ?? null;
|
||||
assert.sameValue(x, true, 'null ?? true ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? true ?? undefined;
|
||||
assert.sameValue(x, true, 'null ?? true ?? undefined');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? true ?? null;
|
||||
assert.sameValue(x, true, 'undefined ?? true ?? null');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? true ?? undefined;
|
||||
assert.sameValue(x, true, 'undefined ?? true ?? undefined');
|
|
@ -0,0 +1,56 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Short circuit can prevent evaluation of the right-side expressions
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
Runtime Semantics: Evaluation
|
||||
|
||||
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
|
||||
|
||||
1. Let lref be the result of evaluating CoalesceExpressionHead.
|
||||
2. Let lval be ? GetValue(lref).
|
||||
3. If lval is undefined or null,
|
||||
a. Let rref be the result of evaluating BitwiseORExpression.
|
||||
b. Return ? GetValue(rref).
|
||||
4. Otherwise, return lval.
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
function poison() {
|
||||
throw new Test262Error('should not evaluate poison');
|
||||
}
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? 42 ?? undefined ?? poison();
|
||||
assert.sameValue(x, 42);
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? undefined ?? poison();
|
||||
assert.sameValue(x, 42);
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? 42 ?? poison();
|
||||
assert.sameValue(x, 42);
|
||||
|
||||
x = undefined;
|
||||
x = 42 ?? poison();
|
||||
assert.sameValue(x, 42);
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
description: Expression is a candidate for tail-call optimization.
|
||||
esid: sec-static-semantics-hascallintailposition
|
||||
flags: [onlyStrict]
|
||||
features: [tail-call-optimization, coalesce-expression]
|
||||
includes: [tcoHelper.js]
|
||||
---*/
|
||||
|
||||
var callCount = 0;
|
||||
(function f(n) {
|
||||
if (n === 0) {
|
||||
callCount += 1
|
||||
return;
|
||||
}
|
||||
return f(n - 1) ?? false;
|
||||
}($MAX_ITERATIONS));
|
||||
assert.sameValue(callCount, 1);
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
description: Expression is a candidate for tail-call optimization.
|
||||
esid: sec-static-semantics-hascallintailposition
|
||||
flags: [onlyStrict]
|
||||
features: [tail-call-optimization, coalesce-expression]
|
||||
includes: [tcoHelper.js]
|
||||
---*/
|
||||
|
||||
var callCount = 0;
|
||||
(function f(n) {
|
||||
if (n === 0) {
|
||||
callCount += 1
|
||||
return;
|
||||
}
|
||||
return null ?? f(n - 1);
|
||||
}($MAX_ITERATIONS));
|
||||
assert.sameValue(callCount, 1);
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
description: Expression is a candidate for tail-call optimization.
|
||||
esid: sec-static-semantics-hascallintailposition
|
||||
flags: [onlyStrict]
|
||||
features: [tail-call-optimization, coalesce-expression]
|
||||
includes: [tcoHelper.js]
|
||||
---*/
|
||||
|
||||
var callCount = 0;
|
||||
(function f(n) {
|
||||
if (n === 0) {
|
||||
callCount += 1
|
||||
return;
|
||||
}
|
||||
return undefined ?? f(n - 1);
|
||||
}($MAX_ITERATIONS));
|
||||
assert.sameValue(callCount, 1);
|
|
@ -0,0 +1,73 @@
|
|||
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
ShortCircuitExpression in the Conditional Expression (? :)
|
||||
esid: sec-conditional-operator
|
||||
info: |
|
||||
ShortCircuitExpression :
|
||||
LogicalORExpression
|
||||
CoalesceExpression
|
||||
|
||||
CoalesceExpression :
|
||||
CoalesceExpressionHead ?? BitwiseORExpression
|
||||
|
||||
CoalesceExpressionHead :
|
||||
CoalesceExpression
|
||||
BitwiseORExpression
|
||||
|
||||
ConditionalExpression :
|
||||
ShortCircuitExpression
|
||||
ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
|
||||
features: [coalesce-expression]
|
||||
---*/
|
||||
|
||||
var x;
|
||||
|
||||
x = undefined ?? true ? 0 : 42;
|
||||
assert.sameValue(x, 0, 'undefined ?? true ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? true ? 0 : 42;
|
||||
assert.sameValue(x, 0, 'null ?? true ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = undefined ?? false ? 0 : 42;
|
||||
assert.sameValue(x, 42, 'undefined ?? false ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = null ?? false ? 0 : 42;
|
||||
assert.sameValue(x, 42, 'null ?? false ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = false ?? true ? 0 : 42;
|
||||
assert.sameValue(x, 42, 'false ?? true ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = 0 ?? true ? 0 : 42;
|
||||
assert.sameValue(x, 42, '0 ?? true ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = 1 ?? false ? 0 : 42;
|
||||
assert.sameValue(x, 0, '1 ?? false ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? false ? 0 : 42;
|
||||
assert.sameValue(x, 0, 'true ?? false ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = true ?? true ? 0 : 42;
|
||||
assert.sameValue(x, 0, 'true ?? true ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = '' ?? true ? 0 : 42;
|
||||
assert.sameValue(x, 42, '"" ?? true ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = Symbol() ?? false ? 0 : 42;
|
||||
assert.sameValue(x, 0, 'Symbol() ?? false ? 0 : 42');
|
||||
|
||||
x = undefined;
|
||||
x = {} ?? false ? 0 : 42;
|
||||
assert.sameValue(x, 0, 'object ?? false ? 0 : 42');
|
Loading…
Reference in New Issue