mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 14:05:15 +00:00
A regression was introduced in dc9b4da where the parser would incorrectly parse the assignment of arrow functions to (non-declaration) variables. For example, consider: a = () => {} Because the parser was aware of default parameters, in try_parse_arrow_function, the equals sign would be interpreted as a default argument, leading to incorrect parsing of the overall expression. Also resulted in some funny behavior (a = () => {} => {} worked just fine!). The simple fix is to only look for default parameters if the arrow function is required to have parenthesis.
61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
load("test-common.js");
|
|
|
|
try {
|
|
let getNumber = () => 42;
|
|
assert(getNumber() === 42);
|
|
|
|
getNumber = () => 99;
|
|
assert(getNumber() === 99);
|
|
|
|
let add = (a, b) => a + b;
|
|
assert(add(2, 3) === 5);
|
|
|
|
const addBlock = (a, b) => {
|
|
let res = a + b;
|
|
return res;
|
|
};
|
|
assert(addBlock(5, 4) === 9);
|
|
|
|
const makeObject = (a, b) => ({ a, b });
|
|
const obj = makeObject(33, 44);
|
|
assert(typeof obj === "object");
|
|
assert(obj.a === 33);
|
|
assert(obj.b === 44);
|
|
|
|
let returnUndefined = () => { };
|
|
assert(typeof returnUndefined() === "undefined");
|
|
|
|
const makeArray = (a, b) => [a, b];
|
|
const array = makeArray("3", { foo: 4 });
|
|
assert(array[0] === "3");
|
|
assert(array[1].foo === 4);
|
|
|
|
let square = x => x * x;
|
|
assert(square(3) === 9);
|
|
|
|
let squareBlock = x => {
|
|
return x * x;
|
|
};
|
|
assert(squareBlock(4) === 16);
|
|
|
|
const message = (who => "Hello " + who)("friends!");
|
|
assert(message === "Hello friends!");
|
|
|
|
const sum = ((x, y, z) => x + y + z)(1, 2, 3);
|
|
assert(sum === 6);
|
|
|
|
const product = ((x, y, z) => {
|
|
let res = x * y * z;
|
|
return res;
|
|
})(5, 4, 2);
|
|
assert(product === 40);
|
|
|
|
const half = (x => {
|
|
return x / 2;
|
|
})(10);
|
|
assert(half === 5);
|
|
|
|
console.log("PASS");
|
|
} catch {
|
|
console.log("FAIL");
|
|
}
|