From 590f71680f7e0c5b97783c2ca859326f19f2a95e Mon Sep 17 00:00:00 2001 From: "satish.srinivasan" Date: Thu, 18 Dec 2025 20:20:13 +0530 Subject: [PATCH] Handle unimplemented rest parameters in destructuring --- .../java/org/mozilla/javascript/Parser.java | 5 +++- .../javascript/resources/Messages.properties | 3 ++ .../javascript/tests/ObjectRestErrorTest.java | 29 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/src/test/java/org/mozilla/javascript/tests/ObjectRestErrorTest.java diff --git a/rhino/src/main/java/org/mozilla/javascript/Parser.java b/rhino/src/main/java/org/mozilla/javascript/Parser.java index d382fae3d3..d9b29d441f 100644 --- a/rhino/src/main/java/org/mozilla/javascript/Parser.java +++ b/rhino/src/main/java/org/mozilla/javascript/Parser.java @@ -4920,7 +4920,10 @@ boolean destructuringObject( boolean defaultValuesSetup = false; for (AbstractObjectProperty abstractProp : node.getElements()) { - if (abstractProp instanceof SpreadObjectProperty) throw Kit.codeBug(); + if (abstractProp instanceof SpreadObjectProperty) { + reportError("msg.no.object.rest"); + return false; + } ObjectProperty prop = (ObjectProperty) abstractProp; int lineno = 0, column = 0; diff --git a/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties b/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties index 0c485d9dd1..d7bceec97f 100644 --- a/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties +++ b/rhino/src/main/resources/org/mozilla/javascript/resources/Messages.properties @@ -348,6 +348,9 @@ msg.no.paren.after.parms =\ msg.parm.after.rest =\ parameter after rest parameter +msg.no.object.rest =\ + object rest properties in destructuring are not supported + msg.no.brace.body =\ missing '{' before function body diff --git a/tests/src/test/java/org/mozilla/javascript/tests/ObjectRestErrorTest.java b/tests/src/test/java/org/mozilla/javascript/tests/ObjectRestErrorTest.java new file mode 100644 index 0000000000..4a54598694 --- /dev/null +++ b/tests/src/test/java/org/mozilla/javascript/tests/ObjectRestErrorTest.java @@ -0,0 +1,29 @@ +package org.mozilla.javascript.tests; + +import org.junit.Test; +import org.mozilla.javascript.testutils.Utils; + +/** Object rest in destructuring throws SyntaxError */ +public class ObjectRestErrorTest { + + @Test + public void objectRestThrowsSyntaxError() { + Utils.assertEvaluatorExceptionES6( + "object rest properties in destructuring are not supported", + "function f() { var { a, ...rest } = { a: 1, b: 2, c: 3 }; }"); + } + + @Test + public void objectRestInFunctionParamThrowsSyntaxError() { + Utils.assertEvaluatorExceptionES6( + "object rest properties in destructuring are not supported", + "function f({ a, ...rest }) { return rest; }"); + } + + @Test + public void objectRestInVariableDeclarationThrowsSyntaxError() { + Utils.assertEvaluatorExceptionES6( + "object rest properties in destructuring are not supported", + "var { a, ...rest } = { a: 1, b: 2, c: 3 };"); + } +}