You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/unified-bytecode-expansion-contract.md
+16-14Lines changed: 16 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -336,7 +336,7 @@ must still obey the no-mixed-execution rule.
336
336
|`DeleteDependency`|`delete` expressions outside the admitted ordinary named/computed property delete lane and the with-backed dynamic-name delete lane | Existing sync IR delete route | Delete semantics lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_PropertyReadAdjacentFamilies_DeclineWithExplicitCodes"`|
337
337
|`SuperPropertyDependency`| Out-of-boundary super call targets; super property reads/writes/updates are admitted by dedicated VM opcodes | Existing class / constructor route for remaining call-target shapes | Super semantics lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_SuperPropertyAccess_AcceptsOwnedOpcodes"`|
338
338
|`OptionalChainDependency`| Optional chains outside the admitted optional property-read, optional-call, and exact optional named/computed delete boundaries | Existing sync IR optional-chain route | Optional-chain widening lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_OptionalChainNamedPrefixPlainCallExpressionPlan_AcceptsExecutableInvocationBoundary"`|
339
-
|`ObjectLiteralOrSpreadDependency`| Non-simple object spread sources, unsupported array spread, spread construct arguments, and object methods/accessors only when they appear inside restricted simple literal spans | Existing sync IR literal/spread route for remaining spans | Literal/spread lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_NonSimpleSourceArraySpread_DeclinesWithExplicitCode"`|
339
+
|`ObjectLiteralOrSpreadDependency`| Non-simple object spread sources, unsupported array spread, spread super construct arguments, and object methods/accessors only when they appear inside restricted simple literal spans | Existing sync IR literal/spread route for remaining spans | Literal/spread lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_NonSimpleSourceArraySpread_DeclinesWithExplicitCode"`|
340
340
|`PrivateFieldDependency`| Private-name operations outside the admitted routes; `#name in obj`, direct private named reads/writes/updates, direct private named compound/logical writes, and direct private named method calls are VM-owned when the surrounding class method is otherwise production-eligible. Private member deletes are parser early errors before production eligibility. | Existing private-name route for remaining private member access | Private-name lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_PrivateFieldIn_AcceptsAndVmChecksPrivateBrand"`|
341
341
|`ForInDriverStateDependency`| Unsupported for-in driver state such as awaited object source | Existing for-in IR driver route | Driver-state lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~IsSupportedForInInit_AwaitedSource_Declines"`|
342
342
|`DestructuringDependency`| Binding declarations with defaults, computed binding names, assignment targets, awaited binding values, unsupported destructuring driver shapes, and targets outside the admitted driver or descriptor-backed lanes | Existing destructuring IR route for remaining shapes | Destructuring driver lane |`rtk dotnet test tests/Asynkron.JsEngine.Tests --filter "FullyQualifiedName~UnifiedBytecodeProductionEligibilityTests&FullyQualifiedName~Evaluate_UnsupportedDestructuringDriverShapes_DeclineWithExplicitReason"`|
@@ -570,15 +570,16 @@ the final post-compile production subset check before VM entry.
570
570
- Synchronous construct calls are admitted (gh2690 plus the construct-boundary
571
571
widening): `new F(...)`, `new F(...args)`, `new box.Ctor(...)`, and
572
572
`new box[key](...)` when the constructor/key/argument subexpressions are
573
-
already production-safe. The constructor value and each logical argument are
574
-
pushed left-to-right by their own loads (no receiver/`this`), then a single
575
-
`ConstructInvocationBoundary` opcode invokes `[[Construct]]` with the
576
-
constructor itself as `new.target`, mirroring the spec-conformant construct
577
-
reference helper. Its operand uses the same low-16-bit argument count plus
578
-
high-bit spread-mask reference encoding as `CallInvocationBoundary`; the VM
579
-
flattens spread iterables at the construct boundary before calling
580
-
`ReflectHelper.Construct`. A non-constructor target throws `TypeError` at the
581
-
boundary.
573
+
already production-safe. Construct results may feed trailing plain named
574
+
property reads such as `new F(...args).x`. The constructor value and each
575
+
logical argument are pushed left-to-right by their own loads (no
576
+
receiver/`this`), then a single `ConstructInvocationBoundary` opcode invokes
577
+
`[[Construct]]` with the constructor itself as `new.target`, mirroring the
578
+
spec-conformant construct reference helper. Its operand uses the same
579
+
low-16-bit argument count plus high-bit spread-mask reference encoding as
580
+
`CallInvocationBoundary`; the VM flattens spread iterables at the construct
581
+
boundary before calling `ReflectHelper.Construct`. A non-constructor target
582
+
throws `TypeError` at the boundary.
582
583
- Derived-constructor non-spread `super(...)` calls are admitted through
583
584
`SuperConstructInvocationBoundary`. The VM resolves the dynamic super
584
585
constructor from the current super binding, invokes `[[Construct]]` with the
@@ -795,10 +796,11 @@ support today.
795
796
spread calls are now admitted (gh2676). Optional calls are now admitted
796
797
(gh2689, ADR 0289): `box?.read(args)`, `box.read?.(args)`, and
0 commit comments