From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- js/src/jit-test/tests/basic/spread-call-eval.js | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 js/src/jit-test/tests/basic/spread-call-eval.js (limited to 'js/src/jit-test/tests/basic/spread-call-eval.js') diff --git a/js/src/jit-test/tests/basic/spread-call-eval.js b/js/src/jit-test/tests/basic/spread-call-eval.js new file mode 100644 index 0000000000..1fad8e7a59 --- /dev/null +++ b/js/src/jit-test/tests/basic/spread-call-eval.js @@ -0,0 +1,54 @@ +load(libdir + "asserts.js"); +load(libdir + "iteration.js"); + +assertEq(eval(...[]), undefined); +assertEq(eval(...["1 + 2"]), 3); + +let a = 10, b = 1; +assertEq(eval(...["a + b"]), 11); + +(function() { + let a = 20; + assertEq(eval(...["a + b"]), 21); +})(); + +with ({ a: 30 }) { + assertEq(eval(...["a + b"]), 31); +} + +let line0 = Error().lineNumber; +try { // line0 + 1 + eval(...["("]); // line0 + 2 +} catch (e) { + assertEq(e.lineNumber, 1); +} + +// other iterable objects +assertEq(eval(...["a + b"][Symbol.iterator]()), 11); +assertEq(eval(...new Set(["a + b"])), 11); +let itr = {}; +itr[Symbol.iterator] = function() { + return { + i: 0, + next: function() { + this.i++; + if (this.i == 1) + return { value: "a + b", done: false }; + else + return { value: undefined, done: true }; + } + }; +}; +assertEq(eval(...itr), 11); +function* gen() { + yield "a + b"; +} +assertEq(eval(...gen()), 11); + +let c = ["C"], d = "D"; +assertEq(eval(...c=["c[0] + d"]), "c[0] + dD"); + +// 12.2.4.1.2 Runtime Semantics: ArrayAccumulation +// If Type(spreadObj) is not Object, then throw a TypeError exception. +assertThrowsInstanceOf(() => eval("a + b", ...null), TypeError); +assertThrowsInstanceOf(() => eval("a + b", ...undefined), TypeError); -- cgit v1.2.3