Bump Jint from 4.16.2 to 4.16.3 - #376
Open
dependabot[bot] wants to merge 1 commit into
Open
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
--- updated-dependencies: - dependency-name: Jint dependency-version: 4.16.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Jint from 4.16.2 to 4.16.3.
Release notes
Sourced from Jint's releases.
4.16.3
Jint 4.16.3 is a maintenance release from the
4.xbranch: correctness and conformance fixes backported frommain, and nothing that changes an existing API or an existing default. If you are on 4.16.2 it is a drop-in update — every public signature is the one 4.16.0 shipped, on all five target frameworks, and the per-framework snapshots inJint.Tests.PublicInterface/Verify/are unchanged.mainremains 5.0.0 development; what is coming there is recorded as it lands indocs/v5-migration.md.Highlights
A long-lived engine stops accumulating what it has already run.
Evaluate(string)andExecute(string)parse a freshScripton every call, and the engine kept every one of them. Three of the four per-engine handler-tree caches already reset wholesale at 2048 entries so a host streaming endless distinct sources cannot grow them without bound; the fourth,_evaluatedScripts, never got that ceiling and held its keys strongly, retaining the AST of every distinct script the engine had ever evaluated — about 528 bytes per call, climbing forever and reclaimed by nothing short of dropping the engine (#4116). The realm's tagged-template map had the same shape and a harder constraint:Realm._templateMapwas aDictionary<Node, JsArray>, strong on both ends and never cleared, costing roughly 1.35 KB per call for a frozen array and its raw array. A ceiling is no remedy there, because evicting a live template site is script-visible —f() === f()must hold for one site — so it becomes aConditionalWeakTable<Node, WeakReference<JsArray>>, weak on both halves (#4119). Both matter most to exactly the embedding that looks innocuous: one engine, kept for the lifetime of the process, handed ad-hoc source.A suspended frame no longer dereferences what the suspension produced.
awaitandyieldsuspend by returning a plainundefined, and the enclosing member link turns that into a sentinel reference that every consumer must recognise before reading. Nine did not, so they readundefined.undefinedand raised aTypeErrorinside a frame that was already suspended.AsyncBlockStartswallowed that throw, but not before the statement-list resume position had been cleared on the way out — so the resume replayed the body from the first statement: one extra run of every un-awaited side effect per suspension point, and a re-entrancy guard silently truncating the rest. In a generator nothing swallows it and theTypeErrorcomes straight out ofnext(). Two shapes were wrong answers rather than repeated ones —(await p).x = 1rejected the promise, ando[await k] = 1assigned to the literal key"undefined"instead of the real one — andfor await ((await p).a of it)never terminated at all. Optional chaining was not the trigger despite where the report put it: the guarded fast lane needs a literal property name, so every computed member read of an awaited or yielded value fell through,(await p)[0]as much as(await p)[k](#4089, reported by @davidwengier in #4086).Verification
Every change was verified failing-first against the unfixed branch. The suspension fix is pinned by 35 new cases in
Jint.Tests/Runtime/SuspendedOptionalChainTests.cs: against 4.16.2's code 28 fail and 6 pass on both .NET 10 and .NET Framework 4.7.2, with a 35th — thefor awaitshape — hanging the test host outright rather than failing; after the fix all 35 pass on both. The retention fixes are pinned byJint.Tests/Runtime/GarbageCollectionTests.csandTaggedTemplateCacheTests.cs.Release diagnostics on the tagged commit, in Release:
Jint.Tests7,170 (net10.0) and 7,085 (net472);Jint.Tests.PublicInterface1,852 and 1,844;Jint.Tests.CommonScripts28 and 28;Jint.Tests.SourceGenerators52; the host-contract verification leg (JINT_HOST_CONTRACT_VERIFICATION=1) 7,170 / 7,085 and 1,856 / 1,848 — zero failures anywhere. test262: 102,498 passed, 183 skipped, with three files crossing the engine's default 30-second budget under whole-suite CPU contention and passing in three seconds when run alone.The paired SunSpider and Dromaeo comparison against 4.16.2 was run after the tag rather than before it, which is a departure from how 4.16.2 was gated; it is recorded here because the result is what the release notes should carry, not the order it arrived in. No row regressed. Fifty-one rows, paired, alternating order,
DefaultJob, on an idle machine: the three-round screen left two candidates clearing the sign-agreement and magnitude bar, both of themDromaeo.StringBase64, and re-measuring those at eight rounds read −1.72% [−3.01, +1.98] and +0.30% [−3.10, +4.26] — no change, with a third parameter combination coming out faster.StringBase64is the rowJint.Benchmark/AGENTS.mdalready documents as a three-round false positive, and it behaved as documented. TheCubecontrol rows moved +0.6% to +0.8%, which is this machine's floor on rows the change cannot reach.Nothing here is a performance change by intent. #4119 does move a tagged-template lookup from a
Dictionaryto aConditionalWeakTableand #4089 adds suspension checks to several interpreter lanes, and neither is visible above the noise floor.What's Changed
Full Changelog: sebastienros/jint@v4.16.2...v4.16.3
Commits viewable in compare view.
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 commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill 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 versionwill 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 dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)