Skip to content

Add ParserOptions.AllowDirectSuperOutsideMethod - #44

Merged
adams85 merged 4 commits into
adams85:masterfrom
lahma:feat/allow-direct-super-outside-method
Aug 23, 2026
Merged

adams85 merged 4 commits into
adams85:masterfrom
lahma:feat/allow-direct-super-outside-method

Conversation

@lahma

@lahma lahma commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

Draft — opening for review before it is proposed for merge.

Motivation

ECMA-262's PerformEval passes inDerivedConstructor into the parse of the eval code, so a direct eval called from the constructor of a derived class may legally contain a super call:

class B { }
class D extends B { constructor() { eval("super()") } }

There is currently no way to ask the parser for that. AllowSuperOutsideMethod enables super property accesses only, and AllowDirectSuper is derived from the scope flags alone with no option behind it — unlike its siblings AllowSuper and AllowNewDotTarget. So an embedder that computes inDerivedConstructor correctly still cannot pass it on, and every eval containing a super call comes back as a SyntaxError.

This came up in Jint, which uses Acornima as its front end and already tracks inDerivedConstructor correctly where it parses eval code — the missing piece is purely the parser option. Three test262 conformance tests fail on this today (staging/sm/class/derivedConstructorArrowEvalSuperCall.js, derivedConstructorArrowEvalNestedSuperCall.js, staging/sm/fields/bug1587574.js).

What this adds

ParserOptions.AllowDirectSuperOutsideMethod (default false), declared next to AllowSuperOutsideMethod and following the same pattern — backing field, get/init, copy-constructor entry.

Design: seeding the root scope, not short-circuiting the getter

The obvious implementation — AllowDirectSuper => _options._allowDirectSuperOutsideMethod || … — would be wrong. It would allow

function f() { super() }

at the top level of the parsed unit, which the spec does not: eval code in a derived constructor gets the constructor's this binding, and an ordinary function introduces one of its own.

Instead the option seeds the root scope with the flag pair ParseMethod already uses for a derived constructor:

EnterScope(ScopeFlags.Top | (_options._allowDirectSuperOutsideMethod ? ScopeFlags.Super | ScopeFlags.DirectSuper : ScopeFlags.None));

Because EnterScope propagates the current this scope through arrow function scopes but not through ordinary function scopes, the spec semantics fall out of the existing machinery with no new logic:

code option on option off
super() parses SyntaxError
(() => super())() parses SyntaxError
() => () => super() parses SyntaxError
function f() { super() } SyntaxError SyntaxError
(function () { super() }) SyntaxError SyntaxError
({ m() { super() } }) SyntaxError SyntaxError
class A extends B { m() { super() } } SyntaxError SyntaxError

ScopeFlags.Super is seeded alongside DirectSuper for two reasons: AllowSuper is checked first in ParseExprAtom, so DirectSuper alone would leave super() rejected; and a derived constructor is a method, so super property accesses are legal there anyway — which is exactly why ParseMethod sets the same pair.

AllowSuperOutsideMethod and AllowNewTargetOutsideFunction are deliberately untouched: with the new option disabled nothing changes at all.

Tests

ShouldHandleDirectSuperOutsideMethod (37 cases, next to ShouldHandleSuperKeywordEdgeCases and in its style) covers both options in all four combinations across script/module/expression: the top-level and arrow cases, the ordinary-function and method cases that must keep failing, super.x under each option, and class bodies. AllowDirectSuperOutsideMethodShouldDefaultToFalse pins the default and that a with-expression copy keeps the flag.

Green: Acornima.Tests on net462/net8.0/net9.0/net10.0 (13,025–13,028 each), Acornima.Tests.Test262 (99,090), Acornima.Tests.SourceGenerators, solution build with 0 warnings.

Two things noticed while doing this, not fixed here

  1. _allowTopLevelUsing is missing from the ParserOptions copy constructor — it is the only bool option that is, so (ParserOptions.Default with { AllowTopLevelUsing = true }) with { EcmaVersion = … } silently drops the flag. Happy to send that as its own one-line PR.
  2. A class body enters a non-var scope, so a field initializer does not introduce a this binding. That is why class A extends B { constructor() { class C { x = super() } } } already parses on master (V8 rejects it), and consequently class C { x = super() } parses when this option is on. Same quirk, inherited from acorn — both rows are pinned in the new theory with a comment rather than changed.

@adams85

adams85 commented Aug 17, 2026 •

Copy link
Copy Markdown
Owner

Even though this is still a draft, let me add my initial thoughts:

First of all, I see this feature is needed for Jint to fully support eval, so I have no objections.

At first glance, the implementation looks good too. However, once we touch this area, I'd prefer to align the behavior of the existing AllowSuperOutsideMethod with this new option.

I mean that currently function f() { super.m() } is incorrectly accepted with AllowSuperOutsideMethod = true, while function f() { super() } will be rejected with AllowDirectSuperOutsideMethod = true. I think the latter approach is the correct one, regardless of what the upstream project does.

So, could you update Parser.AllowSuper to work similarly to AllowDirectSuper?

But before doing anything, please rebase this PR onto master so we can see whether it passes the tests I added for some edge cases here.

FWIW, this commit of mine also fixes a parser bug:

class C extends Object {
  constructor() {
    class X { p = super() }
  }
}

This edge case was incorrectly accepted since v1.1.1.

BTW, this will be an interesting edge case for Jint too:

new (class extends Object {
  constructor() {
    class X { static p = eval('super()') }
  }
})

And also:

new (class extends Object {
  constructor() {
    class X { static [eval('super()')]() { } }
  }
})

This evil eval one is syntactically and semantically valid! 🤯

lahma and others added 2 commits August 23, 2026 11:15
ECMA-262 PerformEval (https://tc39.es/ecma262/#sec-performeval) passes
inDerivedConstructor into the parse of the eval code, so a direct eval
called from the constructor of a derived class may contain a super call:

    class B { }
    class D extends B { constructor() { eval("super()") } }

There was no way to ask the parser for that. AllowSuperOutsideMethod
enables super property accesses only, and AllowDirectSuper was derived
from the scope flags alone, so any host embedding the parser as the
front end of a JS engine (this came up in Jint, which computes
inDerivedConstructor correctly but cannot pass it on) reported a
SyntaxError for every eval containing a super call.

The new option is implemented by seeding the root scope with
ScopeFlags.Super | ScopeFlags.DirectSuper rather than by
short-circuiting the AllowDirectSuper getter. That way the option
follows the this binding for free: EnterScope propagates the current
this scope through arrow function scopes but not through ordinary
function scopes, so `super()`, `(() => super())()` and
`(() => eval("super()"))()` are accepted while
`function f() { super() }` remains a SyntaxError, which is exactly what
the spec prescribes for eval code in a derived constructor. Seeding
Super alongside DirectSuper mirrors what ParseMethod does for the
constructor of a derived class (a derived constructor is a method, so
super property accesses are allowed there as well).

The behavior of AllowSuperOutsideMethod and AllowNewTargetOutsideFunction
is left untouched; with the new option disabled, nothing changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@lahma
lahma force-pushed the feat/allow-direct-super-outside-method branch from 59c77fa to 08c6a63 Compare August 23, 2026 08:27
@lahma

lahma commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rebased onto master (so it now sits on top of 33a8c34) and addressed the review.

The rebase changed two expectations, and 33a8c34 is why. With ParseClassField clearing DirectSuper from the this scope, a direct super call in a field initializer is now rejected wherever the field lives, so these two rows flipped to an error and the comment that predicted the opposite is gone:

class A extends B { constructor() { class C { x = super() } } }   // was accepted, now rejected
class C { x = super() }                                           // with the option on: was accepted, now rejected

Both flips are right: §15.7.1 makes it a Syntax Error if a FieldDefinition's Initializer Contains SuperCall, unconditionally, so no context and no option should ever admit one there. Added class C { [super()]() { } } alongside them to pin the other half — a computed class element name is evaluated in the enclosing scope, so it does follow the option.

AllowSuperOutsideMethod now works the way you asked. Instead of short-circuiting the AllowSuper getter, the option seeds the root scope with ScopeFlags.Super in Reset, exactly as the new one seeds Super | DirectSuper. Both therefore follow the top level's this binding: allowed at the top level and in arrow functions declared there, not in ordinary functions. So function f() { super.m() } is no longer accepted with the option on, which is the behaviour you preferred, and the two options are now the same shape rather than two different mechanisms.

AllowDirectSuperOutsideMethod implies AllowSuperOutsideMethod; that is stated in the XML docs, and AllowSuperOutsideMethod's own docs got the inMethod half of the PerformEval story to match.

Suites at head 08c6a63: Acornima.Tests 13093 / 13090 / 13090 / 13090 across net10.0 / net9.0 / net8.0 / net462, all green; Acornima.Tests.Test262 99090 / 99090.

Verified downstream as well, which is what this option exists for. A local Acornima built from master + this PR + #48 + #49, consumed by Jint with the option wired into PerformEval from its already-computed inDerivedConstructor, takes Jint's test262 run from 102,495 passed / 189 skipped to 102,505 passed / 179 skipped, 0 failed — the three super()-in-eval files that were excluded now pass, and nothing else moved. The scoping is what makes the wiring honest: Jint can turn the option on for the eval and still have the parser refuse eval("(function () { super() })"), which the specification refuses too.

@lahma
lahma marked this pull request as ready for review August 23, 2026 08:27
lahma added a commit to lahma/jint that referenced this pull request Aug 23, 2026
…anket permission

The last five entries under the STAGING EXCLUSIONS banner were all blocked on the
parser, not on Jint. Three of them - the derived-constructor arrow eval files and
bug1587574 - needed Acornima to have a switch for a direct super() at all, which
adams85/acornima#44 adds; the other two are closed by adams85/acornima#48 and sebastienros#49
with no Jint change beyond deleting their entries.

The wiring is the interesting half. Jint already parses eval code with
AllowSuperOutsideMethod, which covers SuperProperty only, so eval("super()") in a
derived constructor failed to parse instead of running. PerformEval
(https://tc39.es/ecma262/#sec-performeval) permits a direct super() exactly when
inDerivedConstructor is true, and EvalFunction already computes that flag for its
own post-parse early error - so the flag is passed through to the parser rather
than the option being switched on for every eval. That is why the adjusted
ParserOptions are memoized in two slots now: the adjustment is no longer constant,
and the variant that admits a super() must never reach an eval the specification
forbids one in. The eval cache already validates the ParserOptions an entry was
parsed with, so one source evaluated from both contexts gets one parse each.

The option is scoped to the eval'd unit's this binding, so it reaches arrow
functions declared in the eval but not ordinary ones - which is what lets Jint
enable it for the whole eval and still have the parser refuse
eval("(function () { super() })"), as V8 does.

Acornima 1.8.0 does not exist yet: the three pull requests are open, and the
version here is the expected next one. Everything was verified against a local
Acornima built from master plus those three, which takes test262 from
102,495 passed / 189 skipped to 102,505 passed / 179 skipped, 0 failed either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd
lahma added a commit to lahma/jint that referenced this pull request Aug 23, 2026
…anket permission

The last five entries under the STAGING EXCLUSIONS banner were all blocked on the
parser, not on Jint. Three of them - the derived-constructor arrow eval files and
bug1587574 - needed Acornima to have a switch for a direct super() at all, which
adams85/acornima#44 adds; the other two are closed by adams85/acornima#48 and sebastienros#49
with no Jint change beyond deleting their entries.

The wiring is the interesting half. Jint already parses eval code with
AllowSuperOutsideMethod, which covers SuperProperty only, so eval("super()") in a
derived constructor failed to parse instead of running. PerformEval
(https://tc39.es/ecma262/#sec-performeval) permits a direct super() exactly when
inDerivedConstructor is true, and EvalFunction already computes that flag for its
own post-parse early error - so the flag is passed through to the parser rather
than the option being switched on for every eval. That is why the adjusted
ParserOptions are memoized in two slots now: the adjustment is no longer constant,
and the variant that admits a super() must never reach an eval the specification
forbids one in. The eval cache already validates the ParserOptions an entry was
parsed with, so one source evaluated from both contexts gets one parse each.

The option is scoped to the eval'd unit's this binding, so it reaches arrow
functions declared in the eval but not ordinary ones - which is what lets Jint
enable it for the whole eval and still have the parser refuse
eval("(function () { super() })"), as V8 does.

Acornima 1.8.0 does not exist yet: the three pull requests are open, and the
version here is the expected next one. Everything was verified against a local
Acornima built from master plus those three, which takes test262 from
102,495 passed / 189 skipped to 102,505 passed / 179 skipped, 0 failed either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd
@adams85

adams85 commented Aug 23, 2026

Copy link
Copy Markdown
Owner

I'd suggest naming the new option AllowSuperCallOutsideConstructor for maximum clarity. (As a matter of fact, AllowSuperAccessOutsideMethod would be a better name for the existing one, but I'd rather not introduce a breaking change.)

Does this work for you?

f1b91b6 renamed the option but left the test method names, the theory
parameter and one comment on the old AllowDirectSuperOutsideMethod
spelling, so the tests no longer said what they cover.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BGoP6H8jUJ26uj6U5mt8Fn
@lahma

lahma commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator Author

Yes, AllowSuperCallOutsideConstructor is the better name — it says which construct it admits (a super call) and where the option pretends the code sits (outside a constructor), which is exactly the inDerivedConstructor half of PerformEval. And I agree about the existing one: AllowSuperAccessOutsideMethod would read better, but not worth a breaking change for.

Your f1b91b6 had already done the rename in the public API, so I only carried it through to the places it hadn't reached — the test method names (ShouldHandleSuperCallOutsideConstructor, AllowSuperCallOutsideConstructorShouldDefaultToFalse), the theory parameter, and one comment that still said AllowDirectSuperOutsideMethod. Pushed as b468b89; no behavior change, so the AllowDirectSuper scope-flag getter keeps its acorn name.

Suites at that head, all green: Acornima.Tests 13093 / 13090 / 13090 / 13090 on net10.0 / net9.0 / net8.0 / net462, Acornima.Tests.Test262 99090.

The PR title and the opening description still use the old name; I'll leave them as they are unless you'd like them rewritten, since the discussion above is easier to follow with the original wording intact.

@adams85
adams85 merged commit 09c08b3 into adams85:master Aug 23, 2026
3 checks passed
@lahma
lahma deleted the feat/allow-direct-super-outside-method branch August 23, 2026 15:27
lahma added a commit to lahma/jint that referenced this pull request Aug 23, 2026
…anket permission

The last five entries under the STAGING EXCLUSIONS banner were all blocked on the
parser, not on Jint. Three of them - the derived-constructor arrow eval files and
bug1587574 - needed Acornima to have a switch for a direct super() at all, which
adams85/acornima#44 adds; the other two are closed by adams85/acornima#48 and sebastienros#49
with no Jint change beyond deleting their entries.

The wiring is the interesting half. Jint already parses eval code with
AllowSuperOutsideMethod, which covers SuperProperty only, so eval("super()") in a
derived constructor failed to parse instead of running. PerformEval
(https://tc39.es/ecma262/#sec-performeval) permits a direct super() exactly when
inDerivedConstructor is true, and EvalFunction already computes that flag for its
own post-parse early error - so the flag is passed through to the parser rather
than the option being switched on for every eval. That is why the adjusted
ParserOptions are memoized in two slots now: the adjustment is no longer constant,
and the variant that admits a super() must never reach an eval the specification
forbids one in. The eval cache already validates the ParserOptions an entry was
parsed with, so one source evaluated from both contexts gets one parse each.

The option is scoped to the eval'd unit's this binding, so it reaches arrow
functions declared in the eval but not ordinary ones - which is what lets Jint
enable it for the whole eval and still have the parser refuse
eval("(function () { super() })"), as V8 does.

Acornima 1.8.0 does not exist yet: the three pull requests are open, and the
version here is the expected next one. Everything was verified against a local
Acornima built from master plus those three, which takes test262 from
102,495 passed / 189 skipped to 102,505 passed / 179 skipped, 0 failed either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd
lahma added a commit to lahma/jint that referenced this pull request Aug 23, 2026
…Constructor

adams85/acornima#44 merged as 09c08b3, and the option we contributed as
ParserOptions.AllowDirectSuperOutsideMethod shipped under a different name:
ParserOptions.AllowSuperCallOutsideConstructor. The new name says what the
option admits (a direct super *call*) and where the code it is parsing came
from (the *constructor* of a derived class, PerformEval's inDerivedConstructor)
rather than naming the parser-internal AllowDirectSuper flag it seeds, which
also reads better beside the AllowSuperOutsideMethod it implies.

Nothing but the name changed: the option still defaults to false, still seeds
the root scope with Super | DirectSuper, and so still follows the eval'd unit's
this binding - reaching arrow functions declared in the eval but not ordinary
ones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd
lahma added a commit to lahma/jint that referenced this pull request Aug 30, 2026
…anket permission

The last five entries under the STAGING EXCLUSIONS banner were all blocked on the
parser, not on Jint. Three of them - the derived-constructor arrow eval files and
bug1587574 - needed Acornima to have a switch for a direct super() at all, which
adams85/acornima#44 adds; the other two are closed by adams85/acornima#48 and sebastienros#49
with no Jint change beyond deleting their entries.

The wiring is the interesting half. Jint already parses eval code with
AllowSuperOutsideMethod, which covers SuperProperty only, so eval("super()") in a
derived constructor failed to parse instead of running. PerformEval
(https://tc39.es/ecma262/#sec-performeval) permits a direct super() exactly when
inDerivedConstructor is true, and EvalFunction already computes that flag for its
own post-parse early error - so the flag is passed through to the parser rather
than the option being switched on for every eval. That is why the adjusted
ParserOptions are memoized in two slots now: the adjustment is no longer constant,
and the variant that admits a super() must never reach an eval the specification
forbids one in. The eval cache already validates the ParserOptions an entry was
parsed with, so one source evaluated from both contexts gets one parse each.

The option is scoped to the eval'd unit's this binding, so it reaches arrow
functions declared in the eval but not ordinary ones - which is what lets Jint
enable it for the whole eval and still have the parser refuse
eval("(function () { super() })"), as V8 does.

Acornima 1.8.0 does not exist yet: the three pull requests are open, and the
version here is the expected next one. Everything was verified against a local
Acornima built from master plus those three, which takes test262 from
102,495 passed / 189 skipped to 102,505 passed / 179 skipped, 0 failed either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd
lahma added a commit to lahma/jint that referenced this pull request Aug 30, 2026
…Constructor

adams85/acornima#44 merged as 09c08b3, and the option we contributed as
ParserOptions.AllowDirectSuperOutsideMethod shipped under a different name:
ParserOptions.AllowSuperCallOutsideConstructor. The new name says what the
option admits (a direct super *call*) and where the code it is parsing came
from (the *constructor* of a derived class, PerformEval's inDerivedConstructor)
rather than naming the parser-internal AllowDirectSuper flag it seeds, which
also reads better beside the AllowSuperOutsideMethod it implies.

Nothing but the name changed: the option still defaults to false, still seeds
the root scope with Super | DirectSuper, and so still follows the eval'd unit's
this binding - reaching arrow functions declared in the eval but not ordinary
ones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd
lahma added a commit to sebastienros/jint that referenced this pull request Aug 30, 2026
…r the last five staging exclusions (#3277)

* Eval: hand PerformEval's inDerivedConstructor to the parser, not a blanket permission

The last five entries under the STAGING EXCLUSIONS banner were all blocked on the
parser, not on Jint. Three of them - the derived-constructor arrow eval files and
bug1587574 - needed Acornima to have a switch for a direct super() at all, which
adams85/acornima#44 adds; the other two are closed by adams85/acornima#48 and #49
with no Jint change beyond deleting their entries.

The wiring is the interesting half. Jint already parses eval code with
AllowSuperOutsideMethod, which covers SuperProperty only, so eval("super()") in a
derived constructor failed to parse instead of running. PerformEval
(https://tc39.es/ecma262/#sec-performeval) permits a direct super() exactly when
inDerivedConstructor is true, and EvalFunction already computes that flag for its
own post-parse early error - so the flag is passed through to the parser rather
than the option being switched on for every eval. That is why the adjusted
ParserOptions are memoized in two slots now: the adjustment is no longer constant,
and the variant that admits a super() must never reach an eval the specification
forbids one in. The eval cache already validates the ParserOptions an entry was
parsed with, so one source evaluated from both contexts gets one parse each.

The option is scoped to the eval'd unit's this binding, so it reaches arrow
functions declared in the eval but not ordinary ones - which is what lets Jint
enable it for the whole eval and still have the parser refuse
eval("(function () { super() })"), as V8 does.

Acornima 1.8.0 does not exist yet: the three pull requests are open, and the
version here is the expected next one. Everything was verified against a local
Acornima built from master plus those three, which takes test262 from
102,495 passed / 189 skipped to 102,505 passed / 179 skipped, 0 failed either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd

* Eval: follow Acornima's rename of the option to AllowSuperCallOutsideConstructor

adams85/acornima#44 merged as 09c08b3, and the option we contributed as
ParserOptions.AllowDirectSuperOutsideMethod shipped under a different name:
ParserOptions.AllowSuperCallOutsideConstructor. The new name says what the
option admits (a direct super *call*) and where the code it is parsing came
from (the *constructor* of a derived class, PerformEval's inDerivedConstructor)
rather than naming the parser-internal AllowDirectSuper flag it seeds, which
also reads better beside the AllowSuperOutsideMethod it implies.

Nothing but the name changed: the option still defaults to false, still seeds
the root scope with Super | DirectSuper, and so still follows the eval'd unit's
this binding - reaching arrow functions declared in the eval but not ordinary
ones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHnbgQGW5QgfatxL6DgGEd

* Test262: move the pin to 14e8c908, the upstream tip

Thirteen commits since 3655e746, eleven of them CI tables and tooling. The two that touch test/ are
ac7b5f8c, which adds negative parse tests for a braced quantifier whose lower bound exceeds its upper
bound (/a{2,1}/ and /a{2,1}/u), and 14e8c908, which lists testTypedArray.js once instead of twice in
four includes lines. The parser already rejects the quantifier at parse time, and the RegExp
constructor rejects it under every flag, so nothing in the engine moves: +4 passed, +4 total,
skipped unchanged. features.txt is unchanged.

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
legrab added a commit to legrab/pocok that referenced this pull request Sep 15, 2026
Updated [Acornima](https://github.com/adams85/acornima) from 1.7.0 to
1.8.0.

<details>
<summary>Release notes</summary>

_Sourced from [Acornima's
releases](https://github.com/adams85/acornima/releases)._

## 1.8.0

New features:
- Introduce `ParserOptions.AllowSuperCallOutsideConstructor` to support
[PerformEval](https://tc39.es/ecma262/#sec-performeval) (see #​44).

Bug fixes:
- Fix `ParserOptions.AllowSuperOutsideMethod` to reject `super` property
access in function contexts outside of classes (see
adams85/acornima#44 (comment)).
- Fix regression that incorrectly allows `super()` in class fields when
the class is declared inside another class's constructor (see
adams85/acornima#44 (comment)).
- Fix legacy octal constructs not rejected in the token following an
ASI-terminated "use strict" directive (see #​49).
- Fix legacy octal constructs being rejected right after a strict
function body (see #​51).
- Fix early errors not raised in assignment patterns when the object
literal is not refined into a pattern (see #​52).


Commits viewable in [compare
view](adams85/acornima@v1.7.0...v1.8.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Acornima&package-manager=nuget&previous-version=1.7.0&new-version=1.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants