Skip to content

Commit 71b8ed5

Browse files
committed
.
1 parent 013fe81 commit 71b8ed5

File tree

4 files changed

+6
-63
lines changed

4 files changed

+6
-63
lines changed

continue.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- For-of loops now return `undefined` when the body completion is empty, and destructuring initializers in for-of heads allow `in` expressions (fixed `obj-prop-elem-init-in` parse error).
1919
- Destructuring iterator error propagation is in place for array bindings/assignments: iterator property getters use the evaluation context, `TryGetIteratorForDestructuring` aborts with the pending throw, and iterator throws no longer trigger `IteratorClose` for assignment patterns (`Expressions_arrowFunction_dstr` and `Expressions_assignment_dstr` are green).
2020
- Dynamic import/defer now flows through `ModuleEntry` so we track instantiation/evaluation per phase, cache deferred namespaces, and guard export\* cycles with an `Instantiating` flag plus `exportStarSet`. `import.defer`/`import.source` are exposed as host functions, deferred namespaces evaluate on first property read, and dynamic import promises pick up the realm Promise prototype with prototype `then/catch/finally` that wrap the underlying `JsPromise`. The export\* circular fixture (`instn-star-props-circular`) and the dynamic import syntax batch are passing.
21+
- `import.meta` now produces a per-module, null-prototype object cached on the module entry (with a basic `url` value); scripts/eval/Function/AsyncGeneratorFunction constructors reject it as a SyntaxError, and the parser allows call suffixes so `import.meta()` parses and throws at runtime.
2122
- Private name assignments now route through private scope/brand resolution, so instance/static private setter brand-checks across multiple class evaluations (factory/eval/realm variants) are passing alongside the private static getter/setter cases.
2223
- Super() in derived class constructors now finds the owning `this` binding without triggering TDZ ReferenceErrors, so the `this-access-restriction` class definition cases are green in strict and sloppy mode.
2324
- Logical assignment short-circuits skip `PutValue` (including private refs/accessors), and RHS NamedEvaluation now applies to ||=/&&=/??= with identifier LHS, so the logical-assignment cluster (read-only/accessor/non-extensible and name inference) is green.

languagetests.md

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,3 @@
1-
BlockScope_shadowing
2-
BlockScope_shadowing("language/block-scope/shadowing/catch-parameter-shadowing-catch-parameter.js",False)
3-
BlockScope_shadowing("language/block-scope/shadowing/catch-parameter-shadowing-var-variable.js",False)
4-
BlockScope_shadowing("language/block-scope/shadowing/const-declaration-shadowing-catch-parameter.js",False)
5-
BlockScope_shadowing("language/block-scope/shadowing/const-declarations-shadowing-parameter-name-let-const-and-var-variables.js",False)
6-
BlockScope_shadowing("language/block-scope/shadowing/parameter-name-shadowing-catch-parameter.js",False)
7-
Expressions_class_decorator_syntax_classValid
8-
Expressions_class_decorator_syntax_classValid("language/expressions/class/decorator/syntax/class-valid/decorator-member-expr-private-identifier.js",False)
9-
Expressions_class_decorator_syntax_classValid("language/expressions/class/decorator/syntax/class-valid/decorator-member-expr-private-identifier.js",True)
10-
Expressions_dynamicImport
11-
Expressions_dynamicImport("language/expressions/dynamic-import/returns-promise.js",False)
12-
Expressions_dynamicImport("language/expressions/dynamic-import/returns-promise.js",True)
13-
Expressions_dynamicImport("language/expressions/dynamic-import/usage-from-eval.js",False)
14-
Expressions_dynamicImport("language/expressions/dynamic-import/usage-from-eval.js",True)
15-
Expressions_dynamicImport_assignmentExpression
16-
Expressions_dynamicImport_assignmentExpression("language/expressions/dynamic-import/assignment-expression/import-meta.js",True)
17-
Expressions_function
18-
Expressions_function("language/expressions/function/param-dflt-yield-non-strict.js",False)
19-
Expressions_import_meta
20-
Expressions_import_meta("language/expressions/import.meta/distinct-for-each-module.js",True)
21-
Expressions_import_meta("language/expressions/import.meta/import-meta-is-an-ordinary-object.js",True)
22-
Expressions_import_meta("language/expressions/import.meta/not-accessible-from-direct-eval.js",True)
23-
Expressions_import_meta("language/expressions/import.meta/same-object-returned.js",True)
241
Expressions_optionalChaining
252
Expressions_optionalChaining("language/expressions/optional-chaining/eval-optional-call.js",False)
263
Expressions_optionalChaining("language/expressions/optional-chaining/eval-optional-call.js",True)
@@ -42,23 +19,3 @@
4219
ModuleCode_topLevelAwait("language/module-code/top-level-await/module-graphs-does-not-hang.js",True)
4320
ModuleCode_topLevelAwait_syntax
4421
ModuleCode_topLevelAwait_syntax("language/module-code/top-level-await/syntax/await-expr-dyn-import.js",True)
45-
Statements_asyncGenerator
46-
Statements_asyncGenerator("language/statements/async-generator/yield-star-async-from-sync-iterator-inaccessible.js",False)
47-
Statements_asyncGenerator("language/statements/async-generator/yield-star-async-from-sync-iterator-inaccessible.js",True)
48-
Statements_class
49-
Statements_class("language/statements/class/static-init-scope-var-close.js",False)
50-
Statements_class("language/statements/class/static-init-scope-var-close.js",True)
51-
Statements_class("language/statements/class/static-init-scope-var-open.js",False)
52-
Statements_class("language/statements/class/static-init-scope-var-open.js",True)
53-
Statements_class_definition
54-
Statements_class_definition("language/statements/class/definition/invalid-extends.js",True)
55-
Statements_class_elements_syntax_valid
56-
Statements_class_elements_syntax_valid("language/statements/class/elements/syntax/valid/grammar-field-named-get-followed-by-generator-asi.js",False)
57-
Statements_class_elements_syntax_valid("language/statements/class/elements/syntax/valid/grammar-field-named-get-followed-by-generator-asi.js",True)
58-
Statements_class_elements_syntax_valid("language/statements/class/elements/syntax/valid/grammar-field-named-set-followed-by-generator-asi.js",False)
59-
Statements_class_elements_syntax_valid("language/statements/class/elements/syntax/valid/grammar-field-named-set-followed-by-generator-asi.js",True)
60-
Statements_const_syntax
61-
Statements_const_syntax("language/statements/const/syntax/const-invalid-assignment-next-expression-for.js",False)
62-
Statements_const_syntax("language/statements/const/syntax/const-invalid-assignment-next-expression-for.js",True)
63-
Statements_function
64-
Statements_function("language/statements/function/param-dflt-yield-non-strict.js",False)

src/Asynkron.JsEngine/Ast/CallExpressionExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,8 @@ public static partial class TypedAstEvaluator
225225
if (callable is EvalHostFunction evalHostFunction)
226226
{
227227
evalHost = evalHostFunction;
228-
isDirectEvalCall = expression.Callee is IdentifierExpression { Name.Name: "eval" } &&
228+
isDirectEvalCall = !expression.IsOptional &&
229+
expression.Callee is IdentifierExpression { Name.Name: "eval" } &&
229230
ReferenceEquals(thisValue, Symbol.Undefined) &&
230231
ReferenceEquals(evalHostFunction.Engine, environment.RealmState?.Engine);
231232
evalHost.IsDirectCall = isDirectEvalCall;

src/Asynkron.JsEngine/Ast/TypedAstEvaluator.TypedFunction.cs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -620,25 +620,9 @@ public bool TryDefineProperty(string name, PropertyDescriptor descriptor)
620620
{
621621
if (thisValue is null || ReferenceEquals(thisValue, Symbol.Undefined))
622622
{
623-
try
624-
{
625-
boundThis = CallingJsEnvironment?.Get(Symbol.This);
626-
}
627-
catch (InvalidOperationException ex) when (ex.Message.StartsWith("ReferenceError:",
628-
StringComparison.Ordinal))
629-
{
630-
// If the caller's `this` binding is uninitialized (e.g., derived ctor before super()),
631-
// fall back to the global object per non-strict this-binding semantics.
632-
boundThis = Symbol.Undefined;
633-
}
634-
if (boundThis is null || ReferenceEquals(boundThis, Symbol.Undefined))
635-
{
636-
boundThis = _realmState.Engine?.GlobalObject;
637-
if (boundThis is null)
638-
{
639-
boundThis = Symbol.Undefined;
640-
}
641-
}
623+
boundThis = _realmState.Engine is { GlobalObject: { } globalObj }
624+
? globalObj
625+
: (object)Symbol.Undefined;
642626
}
643627

644628
if (boundThis is not IJsPropertyAccessor &&

0 commit comments

Comments
 (0)