diff --git a/Directory.Packages.props b/Directory.Packages.props
index 239e9c68dd..1ad2f23da8 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -4,8 +4,8 @@
true
-
-
+
+
diff --git a/Jint.Tests.Test262/Test262Harness.settings.json b/Jint.Tests.Test262/Test262Harness.settings.json
index 6fef2dcb2b..780a9ece46 100644
--- a/Jint.Tests.Test262/Test262Harness.settings.json
+++ b/Jint.Tests.Test262/Test262Harness.settings.json
@@ -23,10 +23,6 @@
"language/identifiers/*-unicode-16.*.js",
"language/identifiers/*-unicode-17.*.js",
- // Acornima parsing limitations
- "language/statements/await-using/syntax/await-using-valid-for-await-using-of-of.js",
- "language/statements/using/syntax/using-for-statement.js",
-
// Currently quite impossible to detect if assignment target is CoverParenthesizedExpression
"language/expressions/assignment/fn-name-lhs-cover.js",
@@ -363,32 +359,9 @@
// === ANNEX B EXCLUSIONS ===
- // Acornima parser limitation: assignment target type validation for call expressions
- // Per B.3.7, non-strict mode should allow CallExpression as assignment target in certain cases
- // Requires Acornima AllowCallExpressionAsLhs option (pending upstream PR)
- "annexB/language/expressions/assignmenttargettype/callexpression-as-for-in-lhs.js",
- "annexB/language/expressions/assignmenttargettype/callexpression-as-for-of-lhs.js",
- "annexB/language/expressions/assignmenttargettype/callexpression-in-compound-assignment.js",
- "annexB/language/expressions/assignmenttargettype/callexpression-in-postfix-update.js",
- "annexB/language/expressions/assignmenttargettype/callexpression-in-prefix-update.js",
- "annexB/language/expressions/assignmenttargettype/callexpression.js",
- "annexB/language/expressions/assignmenttargettype/cover-callexpression-and-asyncarrowhead.js",
-
// Acornima parser/RegExp limitation: malformed named groups in non-unicode mode
// Per B.1.2, non-unicode RegExp should accept some malformed named group syntax
- "annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js",
-
- // Acornima parser limitation: using/await-using in single-statement positions not rejected
- // Fix pending: https://github.com/adams85/acornima/pull/32
- "language/statements/await-using/syntax/await-using-invalid-for-in.js",
- "language/statements/await-using/syntax/with-initializer-do-statement-while-expression.js",
- "language/statements/await-using/syntax/with-initializer-for-statement.js",
- "language/statements/await-using/syntax/with-initializer-if-expression-statement.js",
- "language/statements/await-using/syntax/with-initializer-if-expression-statement-else-statement.js",
- "language/statements/await-using/syntax/with-initializer-label-statement.js",
- "language/statements/await-using/syntax/with-initializer-while-expression-statement.js",
- "language/statements/using/syntax/using-invalid-for-in.js",
- "language/statements/using/syntax/with-initializer-for-statement.js"
+ "annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js"
]
}
diff --git a/Jint/Runtime/Interpreter/Expressions/JintUpdateExpression.cs b/Jint/Runtime/Interpreter/Expressions/JintUpdateExpression.cs
index a2edbc3526..89d6c4ab27 100644
--- a/Jint/Runtime/Interpreter/Expressions/JintUpdateExpression.cs
+++ b/Jint/Runtime/Interpreter/Expressions/JintUpdateExpression.cs
@@ -48,7 +48,7 @@ private JsValue UpdateNonIdentifier(EvaluationContext context)
var reference = _argument.Evaluate(context) as Reference;
if (reference is null)
{
- Throw.TypeError(engine.Realm, "Invalid left-hand side expression");
+ Throw.ReferenceError(engine.Realm, "Invalid left-hand side in assignment");
}
reference.AssertValid(engine.Realm);
diff --git a/Jint/Runtime/Interpreter/Statements/JintForInForOfStatement.cs b/Jint/Runtime/Interpreter/Statements/JintForInForOfStatement.cs
index 9fe8ff4373..d0e72f5a91 100644
--- a/Jint/Runtime/Interpreter/Statements/JintForInForOfStatement.cs
+++ b/Jint/Runtime/Interpreter/Statements/JintForInForOfStatement.cs
@@ -118,7 +118,9 @@ private void InitializeLhs(
expr = new JintMemberExpression(memberExpression);
break;
default:
- expr = new JintIdentifierExpression((Identifier) _leftNode);
+ expr = _leftNode is Expression expression
+ ? JintExpression.Build(expression)
+ : new JintIdentifierExpression((Identifier) _leftNode);
break;
}
}
@@ -463,7 +465,11 @@ private Completion BodyEvaluation(
}
else
{
- var reference = (Reference) lhsRef;
+ var reference = lhsRef as Reference;
+ if (reference is null)
+ {
+ Throw.ReferenceError(engine.Realm, "Invalid left-hand side in assignment");
+ }
if (lhsKind == LhsKind.LexicalBinding || _leftNode.Type == NodeType.Identifier && !reference.IsUnresolvableReference)
{
reference.InitializeReferencedBinding(nextValue, _disposeHint);