Skip to content

Update dependency Jint to 4.11.0#1163

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/jint-4.x
Open

Update dependency Jint to 4.11.0#1163
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/jint-4.x

Conversation

@renovate

@renovate renovate Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
Jint 4.9.04.11.0 age confidence

Release Notes

sebastienros/jint (Jint)

v4.11.0

Jint 4.11.0 is a performance-focused release. It completes the move to a hidden-class shape model for the object system and adds a family of unboxed interpreter fast lanes, so the most common patterns — object and array construction, property access, tight numeric loops, and eval — do less work and allocate far less memory, with no change to behavior.

Highlights
  • Object model. Object literals, hot constructor instances, and the built-in prototypes now use hidden-class shapes, and small objects store their properties inline in a single allocation (#​2548, #​2552, #​2553, #​2554, #​2555, #​2556, #​2557, #​2559). Property reads and writes are served by inline caches (#​2546, #​2558).
  • Interpreter fast lanes. Relational tests and plain/compound assignments against slot-stored numbers now run unboxed, removing per-iteration boxing from loops (#​2550, #​2566, #​2574, #​2577, #​2578). Strict eval runs in slot-backed environments (#​2565), direct-recursive calls pool their environments (#​2549), and Function-constructor instances reuse a definition-level environment (#​2579).
  • Lower memory. Function.prototype.toString source-text retention is now opt-in (#​2562), and the changes above cut allocations across the board — direct recursion, for example, allocates up to ~99% less.
  • Correctness. Fixes for async parameter binding after await (#​2567), Map iteration during mutation (#​2570), and ShadowRealm evaluation of super / new.target (#​2573).

Across the managed JavaScript engines for .NET, Jint 4.11.0 is the fastest on most object, string and regex workloads — 1.7–5× over the next-fastest engine — while allocating 2–63× less memory than the closest competitor. See the engine comparison benchmarks for the full table.

[!WARNING]
Function.prototype.toString() no longer returns source text by default. To cut memory use (#​2560), the engine no longer retains each parsed function's source string, so toString() now returns a function name() { [native code] } placeholder instead of the original source. If your scripts — or a library you host — depend on toString() returning real source, re-enable it with new Engine(options => options.RetainFunctionSourceText()) (equivalently Options.RetainFunctionSourceText = true, or the matching RetainFunctionSourceText flag on ScriptParsingOptions / ModuleParsingOptions and prepared scripts).

Performance caveat: turning it back on restores the previous memory behavior — every parsed function pins its full source string, so caching many or large prepared scripts can retain hundreds of MB of duplicated source (the retention that #​2560 was filed to fix). Enable it only when you actually need the source text.

What's Changed

  • Add write-side inline cache for property assignment (obj.prop = value) by @​lahma in #​2546
  • Zero-copy SlicedString search (indexOf/startsWith/endsWith/includes) by @​lahma in #​2547
  • Pool environments for direct-recursive functions (fib(30): -99.75% allocation) by @​lahma in #​2549
  • Unboxed fast path for plain numeric assignment (s = a op b) by @​lahma in #​2550
  • Build small object literals in O(1) with cached keys, no extra allocation by @​lahma in #​2548
  • Bump the analyzers group with 1 update by @​dependabot[bot] in #​2551
  • Hidden-class shapes for object literals (−50/72% literal allocation) by @​lahma in #​2552
  • Shape hot constructors' instances (−22..36% Constructor allocation) by @​lahma in #​2553
  • Generated built-in shape for Math: −67% per-realm init overhead (B1 pilot) by @​lahma in #​2554
  • Built-in shapes via source generator: one-liner opt-in (Math, JSON, Reflect, Atomics) by @​lahma in #​2555
  • Built-in shapes default-on via base class (opt-out); shape Temporal.Now by @​lahma in #​2556
  • Built-in shapes: support per-realm instance properties; shape the Generator prototypes by @​lahma in #​2557
  • Prototype-method inline cache for obj.method resolved on the direct prototype by @​lahma in #​2558
  • In-object properties: small shaped objects store slots inline (one allocation, not two) by @​lahma in #​2559
  • Refresh engine comparison benchmark results by @​lahma in #​2561
  • Make Function.prototype.toString() source text retention opt-in (#​2560) by @​lahma in #​2562
  • Fix async function parameter binding after await resumption by @​lahma in #​2567
  • Fix Map keys()/values() throwing InvalidOperationException on mutation by @​svenrog in #​2570
  • Slot-backed strict-eval environments with per-source pooling by @​lahma in #​2565
  • Slot fast path for compound assignment to non-number bindings by @​lahma in #​2566
  • Share compiled statement lists across generator and async invocations by @​lahma in #​2571
  • Fix ShadowRealm.prototype.evaluate rejecting super and new.target in nested code by @​lahma in #​2573
  • Per-engine environment caches: prepared scripts no longer pin engines; computed-key and escape-analysis fixes by @​lahma in #​2568
  • Unboxed lane for relational tests against slot-stored numbers by @​lahma in #​2574
  • Extend the unboxed relational-test lane to variable bounds by @​lahma in #​2578
  • Slot lane for plain assignment to local bindings by @​lahma in #​2577
  • Definition-level environment reuse for Function-constructor instances by @​lahma in #​2579
  • Refresh engine comparison benchmark results by @​lahma in #​2572

New Contributors

Full Changelog: sebastienros/jint@v4.10.1...v4.11.0

v4.10.1

Overview

Jint 4.10.1 is a small follow-up to 4.10.0 that continues the memory-reduction work. Arrays no longer carry a dedicated PropertyDescriptor for their length (#​2540) and an extra PropertyDescriptor allocation on the data-property creation path was removed (#​2537), trimming GC pressure further with no code changes required. It also fixes a strict-mode spec gap where writing to a read-only array index failed to throw a TypeError (#​2542), and refreshes the engine-comparison benchmarks (#​2517) and dependencies (#​2545).

What's Changed

Full Changelog: sebastienros/jint@v4.10.0...v4.10.1

v4.10.0

Overview

Jint 4.10.0 is a performance- and memory-focused release. The bulk of this cycle went into making the interpreter run faster and allocate less, with additional work on CLR interop speed and diagnostics, plus a handful of correctness and spec-compliance fixes.

If you execute the same scripts repeatedly, run interop-heavy workloads, or care about GC pressure, this release should give you a meaningful, no-code-changes-required speedup.

Highlights

Interpreter performance

  • New fast paths for object method calls (#​2510), computed dense-array reads/writes (#​2511), and global variable / x++ updates via version-gated inline caches (#​2507, #​2514).
  • Function-call overhead reduced: function-local numbers stored unboxed in environment slots (#​2499), FunctionDeclarationInstantiation skipped entirely when there's nothing to do (#​2502), lazy constructor .prototype creation (#​2512), and no more per-call closure allocation in EvaluateBody (#​2534).
  • A compilation cache for repeated eval and new Function sources (#​2503), and a fix for prepared scripts that were running slower than re-parsed source (#​2504).
  • Process-wide cache of compiled regex adaptations (#​2530) and a faster String.prototype.split with a string separator (#​2519).

Reduced allocations & memory footprint

  • Zero-copy views returned from large slice / substring / substr results, extended to bounded-waste substrings (#​2506, #​2518).
  • A pooled accumulator slashes intermediate allocations in array-building built-ins, extended to RegExp split, Iterator.toArray, and object enumeration (#​2524, #​2526).
  • Pooled for-loop iteration environments (#​2515), preserved dictionary capacity across pooled function-environment reuse (#​2528), and a raised fixed-slot environment cap (16 → 24 bindings) (#​2529).
  • Smaller runtime objects: JsDate shrunk by 8 bytes (#​2535) and ObjectInstance slimmed by relocating _privateElements to a per-engine weak table (#​2536).

CLR interop

  • Lower method-dispatch overhead and fewer allocations (#​2520), no per-access parameter-array allocation in indexer reads (#​2521), and an opt-in bounded cache for recently wrapped CLR objects (#​2522).
  • Customizable reported property keys for CLR objects, enabling for..in over wrapped objects (#​2516).
  • Richer interop resolution errors that include the target type, arguments, and candidate signatures — gated behind an opt-in option, with the CLR type exposed to the host (#​2525, #​2527).

Correctness & spec compliance

  • Fixed completion value being clobbered by a re-entrant Evaluate() during module execution (#​2493).
  • Fixed runtime type-member writes for CLR wrappers (#​2496) and DefaultTypeConverter.Convert bypassing subclass TryConvert overrides (#​2498).
  • Fixed integer fast-path overflows and compound-assignment spec divergences (#​2497).
  • Updated the Test262 suite and fixed promise-combinator handling of non-thenables (#​2500).
⚠️ Upgrading from 4.9.2 or earlier

4.10.0 contains no new breaking changes, but if you skip past 4.9.3 note its host-side breaking change: Error.prototype.stack became a get/set accessor on %Error.prototype% (it is no longer an own property of each error instance), so host code reading the trace via ObjectInstance.TryGetValue("stack", …) now gets undefined — use errorObject.Get("stack") instead. See the v4.9.3 release notes for details (#​2489).


What's Changed

  • Bump the all-dependencies group with 4 updates by @​dependabot[bot] in #​2491
  • Fix completion value clobbered by re-entrant Evaluate() during module execution by @​lahma in #​2493
  • Fix runtime type member writes for CLR wrappers by @​nkgotcode in #​2496
  • Fix integer fast path overflows and compound assignment spec divergences by @​lahma in #​2497
  • Fix DefaultTypeConverter.Convert bypassing subclass TryConvert overrides by @​lahma in #​2498
  • Store function-local numbers unboxed in environment slot bindings by @​lahma in #​2499
  • Update test262 suite and fix promise combinator non-thenable handling by @​lahma in #​2500
  • Parenthesize expressions to correctly pre-allocate List<T> by @​jnyrup in #​2501
  • Skip FunctionDeclarationInstantiation entirely when there is nothing to do by @​lahma in #​2502
  • Add compilation cache for repeated eval and new Function sources by @​lahma in #​2503
  • Fix prepared scripts executing slower than re-parsed source by @​lahma in #​2504
  • Return zero-copy views from large slice/substring/substr results by @​lahma in #​2506
  • Add version-gated inline cache for global variable bindings by @​lahma in #​2507
  • Refresh engine comparison results; add wall-clock profiling driver by @​lahma in #​2505
  • Add object method-call fast path reusing the member inline cache by @​lahma in #​2510
  • Add computed-index dense-array fast path for reads and writes by @​lahma in #​2511
  • Create the constructor .prototype lazily for ordinary functions by @​lahma in #​2512
  • Cache global UpdateExpression (x++ / x--) writes by @​lahma in #​2514
  • Pool the for-loop iteration environment across loop entries by @​lahma in #​2515
  • Allow customizing reported property keys for CLR objects (enables for..in) by @​lahma in #​2516
  • Extend zero-copy string slice views to bounded-waste substrings by @​lahma in #​2518
  • Add benchmark for holey-array key enumeration cost by @​lahma in #​2508
  • Use direct IndexOf scan in String.prototype.split with string separator by @​lahma in #​2519
  • Avoid per-access parameter array allocation in interop indexer reads by @​lahma in #​2521
  • Reduce CLR interop method dispatch overhead and allocations by @​lahma in #​2520
  • Reduce intermediate allocations in array-building built-ins with a pooled accumulator by @​lahma in #​2524
  • Include target type, arguments and candidate signatures in interop resolution errors by @​lahma in #​2525
  • Extend pooled-accumulator pattern: RegExp split, Iterator.toArray, Object enumeration, builder tuning by @​lahma in #​2526
  • Add opt-in bounded cache for recently wrapped CLR objects by @​lahma in #​2522
  • Gate detailed interop resolution error messages; expose CLR type to host by @​lahma in #​2527
  • Preserve dictionary capacity across pooled function-environment reuse by @​lahma in #​2528
  • Raise fixed-slot function-environment cap from 16 to 24 bindings by @​lahma in #​2529
  • Add process-wide cache of compiled regex adaptations by @​lahma in #​2530
  • Remove unused StringBuilder FNV-hash overload; simplify RefStack.Clear by @​lahma in #​2531
  • Serialize Atomics Test262 features to eliminate CI flakiness by @​Copilot in #​2533
  • Bump the all-dependencies group with 1 update by @​dependabot[bot] in #​2509
  • Avoid per-call closure allocation in EvaluateBody by @​lahma in #​2534
  • Shrink JsDate instances by 8 bytes via decomposed date storage by @​lahma in #​2535
  • Remove the _privateElements field from ObjectInstance (relocate to a per-Engine weak table) by @​lahma in #​2536

New Contributors

Full Changelog: sebastienros/jint@v4.9.3...v4.10.0

v4.9.3

Highlights

Jint 4.9.3 is a maintenance release on top of 4.9.2 that closes the remaining test262 gaps from the 4.9.x line, hardens bulk built-ins against runaway inputs, and delivers large TypedArray performance gains. There are no public API changes (aside from one minor behavioral note below).

ECMAScript spec coverage

The bundled test262 suite was bumped to its latest snapshot and the spec gaps it surfaced were implemented — the full conformance suite now passes with 0 failures (#​2489, #​2490):

  • Error.prototype.stack accessor (error-stack-accessor proposal) — stack is now a configurable get/set accessor on %Error.prototype% rather than an own data property on each instance.
  • Immutable ArrayBuffer write rejection%TypedArray%.prototype mutators (copyWithin / fill / reverse / set / sort), the Atomics read-modify-write ops, and Uint8Array setFromBase64 / setFromHex now throw TypeError before any observable side effect when the backing buffer is immutable.
  • Intl legacy-constructor mode (normative-optional) for NumberFormat and DateTimeFormat, plus the new Intl.PluralRules compactDisplay option.
  • Temporal.ZonedDateTime — rejects not-yet-adopted calendar annotations and correctly rounds to start-of-day when midnight occurs twice across a fall-back DST transition.
  • Source-phase import re-exportsimport source x from "…"; export { x }; is now supported (#​2490).

Performance

  • TypedArray bulk operations were rewritten around System.Array.Copy / Span<T> instead of per-element decode/encode loops. set, slice, copyWithin, with, fill, reverse, toReversed, and the indexOf / lastIndexOf / includes scans are now roughly 80×–350× faster with drastically lower allocations (#​2488).

Robustness

  • Bulk built-ins are now interruptible by execution constraints (#​2487, fixes #​2486). Operations such as 'x'.padStart(2147483647) or Array.from({ length: 50000000 }), along with the Array / %TypedArray% / RegExp / JSON / String bulk loops, now honor TimeoutInterval / MaxStatements / LimitMemory and raise a catchable RangeError instead of hanging or throwing an uncatchable OutOfMemoryException.

Correctness

  • Custom regex engine: fixed flag v patterns that were incorrectly rejected (e.g. /-/v, /&&/v, /[\!]/v) (#​2481).
  • Corrected escaping of regexp patterns built at run-time via new RegExp(...), RegExp(...), .compile(...), String.prototype.match, etc. (#​2482).

⚠️ Minor behavioral change

For .NET Regex objects exposed to the engine, JsRegExp.Source / ToString() now return the placeholder ?[native regex] instead of the raw .NET pattern — the .NET pattern was misleading because it isn't a valid JS pattern (#​2482).


What's Changed

Full Changelog: sebastienros/jint@v4.9.2...v4.9.3

v4.9.2

What's Changed

New Contributors

Full Changelog: sebastienros/jint@v4.9.1...v4.9.2

v4.9.1

A bug-fix release focused on async correctness, number-to-string conversion, and CLR interop edge cases.

Highlights

Async correctness

Three fixes together close a set of holes in async/await and event-loop behavior:

  • Concurrent WaitForEventAsync waiters are all signaled now — previously only one waiter would wake when an event arrived (#​2427).
  • Async resume now flows through control-flow statements (if/for/while/try/switch) (#​2469) and through every expression type (#​2475). Awaiting inside these constructs no longer drops state or fails to resume.

If you use Jint's async API, this release is worth picking up.

Number.prototype.toString(radix) no longer overflows

(-12345e+30).toString(2) and other large-magnitude calls used to cast directly to long, overflowing at ~9.22e18 and returning wrong digits (or throwing). The integer part now goes through BigInteger once it exceeds long range, producing the mathematically exact base-r representation for radix 2 through 36 (#​2471).

CLR interop: oversize numeric inputs

Numeric values that don't fit in the target CLR type now surface as a JavaScript RangeError instead of silently overflowing (#​2465).

Spec conformance

Updated test262 to commit 673e9bac and fixed the issues that surfaced (#​2473).


What's Changed

New Contributors

Full Changelog: sebastienros/jint@v4.9.0...v4.9.1


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot requested a review from a team as a code owner June 11, 2026 16:16
@renovate renovate Bot force-pushed the renovate/jint-4.x branch from 218ffa1 to e1d71e6 Compare June 16, 2026 00:01
@renovate renovate Bot changed the title Update dependency Jint to 4.9.3 Update dependency Jint to 4.10.0 Jun 16, 2026
@renovate renovate Bot force-pushed the renovate/jint-4.x branch from e1d71e6 to dfb0aa4 Compare June 23, 2026 18:10
@renovate renovate Bot changed the title Update dependency Jint to 4.10.0 Update dependency Jint to 4.10.1 Jun 23, 2026
@renovate renovate Bot force-pushed the renovate/jint-4.x branch from dfb0aa4 to eaf5cfa Compare July 5, 2026 08:45
@renovate renovate Bot changed the title Update dependency Jint to 4.10.1 Update dependency Jint to 4.11.0 Jul 5, 2026
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.

0 participants