Skip to content

Update dependency Jint to 4.13.0 - #1163

Merged
Controllerdestiny merged 1 commit into
masterfrom
renovate/jint-4.x
Jul 22, 2026
Merged

Update dependency Jint to 4.13.0#1163
Controllerdestiny merged 1 commit into
masterfrom
renovate/jint-4.x

Conversation

@renovate

@renovate renovate Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
Jint 4.9.04.13.0 age confidence

Release Notes

sebastienros/jint (Jint)

v4.13.0

Jint 4.13.0 is a performance- and correctness-focused release. It brings a Proxy overhaul — trap dispatch rebuilt to forward with near-zero allocation, plus a new public API for implementing traps in .NET — extends the unboxed interpreter fast lanes to more operators and loop shapes, and cuts allocations on for..of, nested-function calls and array enumeration. A thorough pre-release review of everything since 4.12.0 also fixed several correctness bugs. No code changes are required to benefit.

Highlights

Proxy overhaul, and a CLR trap API. Proxy trap dispatch was rebuilt around a shared skeleton with lazy argument construction and pooled arrays, so a proxy with no matching trap forwards to its target with effectively zero allocation (#​2674, #​2675, #​2676). Proxies can now be implemented from .NET: Engine.Advanced.CreateProxy / CreateRevocableProxy accept a ProxyHandler whose virtual methods are the traps, with the same invariant enforcement as JavaScript handlers (#​2678). Several Proxy spec fixes came along — getPrototypeOf / setPrototypeOf with null prototypes (#​2668), the construct trap's argument array (#​2670), capturing [[Construct]] at creation (#​2669), and the get trap firing for a property named revoke (#​2667) — and the ObjectWrapper iterator helpers are hardened against foreign and revoked receivers (#​2681).

Interpreter fast lanes. New unboxed operand lanes for the arithmetic binary operators (#​2664) and an int32 fast lane for remainder (#​2671) remove per-iteration boxing; flag-proven casts use Unsafe.As on the hot paths (#​2673) and JsNumber.Create avoids a native fmod (#​2662). Strict-equality guards against undefined / null / typeof are fused (#​2658), member-expression identifier reads route through the identifier caches (#​2660), and the identifier slot cache is restructured hop-0-first (#​2689). The tight-loop fast lane now covers while and do-while bodies (#​2688).

Lower allocations. for..of over an array no longer allocates an iterator-result object per element (#​2700); per-call nested-function instantiation is allocation-free (#​2684); for-in over arrays enumerates dense indices lazily without materializing a key list (#​2656); and observation-only constraint checks are amortized so tight loops stay fast under a timeout (#​2672).

RegExp. Quantified groups without capture or lookaround hazards prefer the .NET Regex engine (#​2682), reused .NET adaptations adaptively upgrade to RegexOptions.Compiled (#​2690), and the custom engine's match timeout is enforced by an inline deadline rather than a thread-pool timer (#​2686).

Correctness (including a pre-release review). A review of everything since 4.12.0 fixed: a regex routing regression that silently truncated matches for nullable non-capturing quantified groups (#​2694) and a custom-engine bug dropping iterations for multi-atom quantified groups (#​2699); Proxy trap dispatch is now atomic against a mid-dispatch revoke (#​2696); top-level await of a .NET Task in a module (#​2665), plus prompt cancellation of the await drain (#​2697); the arguments object escaping a short-circuiting logical compound assignment un-materialized (#​2698); for-in now includes inherited enumerable index properties on Array.prototype (#​2655); and the memory limit stays exact in tight loops (#​2695).

Across the managed JavaScript engines for .NET, Jint 4.13.0 is the fastest engine on 17 of the 21 comparison scripts — and the fastest interpreter on all 21 — while allocating far less memory than the other engines; dromaeo-3d-cube is ~9% faster and dromaeo-string-base64 ~10% faster than 4.12.0. See the engine comparison benchmarks for the full table.

What's Changed

  • Drop Jurassic from engine comparison benchmarks, add Okojo by @​lahma in #​2653
  • Add benchmark lanes for for-in over arrays, holey-array traversal and large-chunk string concat by @​lahma in #​2654
  • Fix for-in missing inherited enumerable index properties placed on Array.prototype by @​lahma in #​2655
  • for-in over arrays: enumerate dense indices lazily without materializing a key list by @​lahma in #​2656
  • Harden the known wall-clock test flakes by @​lahma in #​2657
  • Fuse strict-equality guards: x === undefined/null and typeof x === "literal" by @​lahma in #​2658
  • Skip the prototype walk for array hole reads when the chain is provably clean by @​lahma in #​2659
  • Route member-expression identifier-object reads through identifier caches by @​lahma in #​2660
  • Avoid native fmod in JsNumber.Create(double) integral detection by @​lahma in #​2662
  • Add unboxed operand lane for arithmetic binary operators by @​lahma in #​2664
  • Fix top-level await of a .NET Task in a module failing with "Pending" by @​lahma in #​2665
  • Add Proxy trap dispatch benchmarks by @​lahma in #​2666
  • Fix Proxy get trap being bypassed for properties named "revoke" by @​lahma in #​2667
  • Add int32 fast lane to the raw-double remainder sites by @​lahma in #​2671
  • Fix Proxy getPrototypeOf/setPrototypeOf traps with null prototypes by @​lahma in #​2668
  • Capture Proxy [[Construct]] at creation per ProxyCreate by @​lahma in #​2669
  • Replace flag-proven casts with Unsafe.As on hot arithmetic paths by @​lahma in #​2673
  • Fix Proxy construct trap receiving Array-constructor-mangled arguments by @​lahma in #​2670
  • Amortize observation-only constraint checks and keep tight loops armed under timeouts by @​lahma in #​2672
  • Refactor Proxy trap dispatch into a shared skeleton with lazy argument construction by @​lahma in #​2674
  • Pool Proxy trap argument arrays by @​lahma in #​2675
  • Slim allocations in Proxy ownKeys trap validation by @​lahma in #​2676
  • Give every Proxy invariant violation a descriptive TypeError message by @​lahma in #​2677
  • Add ProxyHandler for implementing Proxy traps in .NET code by @​lahma in #​2678
  • Guard default RevocableProxy instances with a clear exception by @​lahma in #​2679
  • Add CLR ProxyHandler lanes to ProxyBenchmark by @​lahma in #​2680
  • Harden ObjectWrapper iterator helpers against foreign and revoked receivers by @​lahma in #​2681
  • Let branchy constructors with static this-stores shape from instance three by @​lahma in #​2685
  • Prefer .NET Regex for quantified groups without capture or lookaround hazards by @​lahma in #​2682
  • Skip covariant store checks when populating exact JsValue arrays by @​lahma in #​2683
  • Enforce custom regex-engine timeout via an inline deadline instead of a thread-pool timer by @​lahma in #​2686
  • Make per-call nested function instantiation allocation-free by @​lahma in #​2684
  • CI: cross-OS Test262 suite cache + action/tool version bumps by @​lahma in #​2687
  • Extend the tight-loop lane to while and do-while statements by @​lahma in #​2688
  • Restructure identifier slot-cache hot paths as hop-0-first by @​lahma in #​2689
  • Adaptively upgrade reused .NET regex adaptations to RegexOptions.Compiled by @​lahma in #​2690
  • Update dependencies to latest version by @​lahma in #​2692
  • Update Test262 suite to f2d1435 and drop now-fixed exclusion by @​lahma in #​2693
  • Fix nullable non-capturing quantified regex groups mis-routed to .NET Regex by @​lahma in #​2694
  • Keep the memory limit exact instead of amortizing it in tight loops by @​lahma in #​2695
  • Make Proxy trap dispatch atomic against mid-dispatch revoke; guard ToObject() by @​lahma in #​2696
  • Observe cancellation during the top-level-await event-loop drain by @​lahma in #​2697
  • Materialize arguments escaping a short-circuiting logical compound assignment by @​lahma in #​2698
  • Fix custom regex engine dropping iterations for a multi-atom quantified group by @​lahma in #​2699
  • Skip per-element IteratorResult allocation in value-kind array for-of by @​lahma in #​2700
  • Add value-producing slot fast path for identifier ++/-- expressions by @​lahma in #​2703
  • Fuse x == null / x == undefined loose-equality guards by @​lahma in #​2702
  • Compose &&/|| and ! through unboxed GetBooleanValue in boolean contexts by @​lahma in #​2701

Full Changelog: sebastienros/jint@v4.12.0...v4.13.0

v4.12.0

Jint 4.12.0 is a performance- and correctness-focused release. It completes the move to hidden-class shapes across the whole object model, extends the unboxed interpreter fast lanes to more operators and call shapes, and adds a layer of per-engine caching so re-executed scripts and re-created functions reuse their compiled metadata and environments. A pre-release review of everything since 4.11.0 also fixed several correctness regressions. No code changes are required to benefit.

Highlights

Object model — shapes everywhere. The hidden-class shape model now backs the built-in prototypes and constructors, TypedArrays, the global object, and Intl / Temporal (#​2580, #​2581, #​2582, #​2590, #​2595, #​2597). JSON.parse builds its result objects as shapes, so an array of like-shaped records costs one allocation per record instead of a property dictionary each (#​2634). Object literals inside generator/async frames and object spread {...src} adopt shapes too (#​2596, #​2648, #​2635), and a provably-simple constructor shapes its instances from the third construction (#​2636).

Interpreter fast lanes. New unboxed operand lanes for equality, bitwise, modulo-equality and sum-of-products expressions remove per-iteration boxing (#​2602, #​2604, #​2611, #​2628), and comparison operands are served from the validated global-descriptor cache (#​2603). Expression-only and if/else for-loop bodies run through a tight per-iteration cycle with a member-bound loop test (i < arr.length) (#​2605, #​2617, #​2623), env-less leaf calls run against the captured environment directly (#​2627), and functions that cannot observe their this skip this-binding (#​2626).

Caching & reuse. Nested-scope global reads and writes are served from a validated global-binding cache (#​2584, #​2625); hoisted function and class definitions, and the top-level statement handler tree, are reused across re-evaluations on an engine (#​2613, #​2615, #​2649); and for-of / for-in reuse a fixed-slot per-iteration environment, skipping per-iteration TDZ re-init where it is provably safe (#​2586, #​2632).

Lower allocations. A coverage campaign added benchmarks for common patterns the suite did not exercise and then closed the hotspots they surfaced (#​2630): resolved await chains and engine-internal promise reactions (#​2639), for-in enumeration (#​2640), throw/catch (#​2641), primitive number/boolean/bigint methods (no wrapper object, #​2642), and tagged templates (#​2638) all allocate far less.

Correctness. Fixes for sticky + global [Symbol.match] returning wrong results (#​2600), an unlabeled break escaping a labeled switch (#​2607), -0 in integer multiplication (#​2620), and raw property writes on shaped hosts (#​2591, #​2601). A pre-release review (#​2651) additionally fixed for-in re-enumerating a shadowed key (a mid-loop delete and a pooled-iterator reuse case), mapped-arguments writes being lost after the call returns (and duplicate-parameter mapping now follows the spec), and hardened the object-literal and built-in-shape paths.

Across the managed JavaScript engines for .NET, Jint 4.12.0 is the fastest engine on 17 of the 21 comparison scripts — and the fastest interpreter on all 21 — leading by up to ~5.4× over the next-fastest engine while allocating 2×–63× less memory than the closest competitor. See the engine comparison benchmarks for the full table.

What's Changed

  • Built-in shapes for prototypes and constructors: composable storage, accessors, aliases by @​lahma in #​2580
  • Shape Number/%TypedArray% constructors and %TypedArray%.prototype; add [JsInstanceSlot] by @​lahma in #​2581
  • Shape TypedArray constructors; modernize element codecs with BinaryPrimitives by @​lahma in #​2582
  • Trim per-iteration block ceremony; slot lane for lexical declaration initialization by @​lahma in #​2583
  • Serve nested-scope global reads and writes from the global-binding cache by @​lahma in #​2584
  • Probe own-property existence/enumerability without materializing descriptors by @​lahma in #​2585
  • Keep builtin-shape deopt lazy: unmaterialized function slots stay deferred by @​lahma in #​2588
  • Serve arguments reads virtually; defer property materialization by @​lahma in #​2589
  • Reuse a fixed-slot per-iteration environment in for-of/for-in by @​lahma in #​2586
  • Bump the analyzers group with 3 updates by @​dependabot[bot] in #​2575
  • BuiltinShape Factory slots: shape-path intrinsic references and throwers; flip Function.prototype by @​lahma in #​2590
  • Fix raw SetProperty on builtin-shaped hosts landing in an invisible dictionary by @​lahma in #​2591
  • Build the yield argument handler once, not per evaluation by @​lahma in #​2593
  • Allocation-free for-in key enumeration by @​lahma in #​2592
  • Extend prepared-script engine-retention test to newer env cache shapes by @​lahma in #​2594
  • Shape-backed object literals inside generator/async frames when values cannot suspend by @​lahma in #​2596
  • Flip Intl, Temporal and %AsyncFromSyncIteratorPrototype% to builtin shapes by @​lahma in #​2597
  • GlobalObject joins the builtin-shape system via hybrid shape+overflow storage by @​lahma in #​2595
  • Refresh engine comparison benchmark results by @​lahma in #​2598
  • Update Test262 suite to latest commit; drop issue-5066 slice exclusion by @​lahma in #​2599
  • Fix sticky+global [Symbol.match] .NET fast path returning wrong results by @​lahma in #​2600
  • Make raw SetProperty before lazy initialization survive Initialize by @​lahma in #​2601
  • Add unboxed slot-number lane to equality operators by @​lahma in #​2602
  • Run expression-only for-loop bodies through a tight per-iteration cycle by @​lahma in #​2605
  • Serve comparison-lane operands from the validated global-descriptor cache by @​lahma in #​2603
  • Add dense-array append fast path for computed-index writes by @​lahma in #​2608
  • Mark dead completion values at script/eval top level by @​lahma in #​2606
  • Fused modulo-equality lane; admit const bindings to comparison-lane reads by @​lahma in #​2604
  • Construct new Date() from clock ticks without intermediate conversions by @​lahma in #​2609
  • Fix unlabeled break escaping a labeled switch statement by @​svenrog in #​2607
  • Flatten eligible loop-body lexicals into the pooled loop environment by @​lahma in #​2610
  • Evaluate sum-of-products assignments on raw doubles, boxing once by @​lahma in #​2611
  • Refresh engine comparison benchmark results by @​lahma in #​2612
  • Reuse hoisted function definitions across re-evaluations on an engine by @​lahma in #​2613
  • Reuse class member definitions across class re-evaluations by @​lahma in #​2615
  • Add decorator hook for CLR interop resolution errors by @​lahma in #​2614
  • Fix ForBencmark class name typo by @​lahma in #​2618
  • Re-resolve slot locations when a shared handler tree changes function instance by @​lahma in #​2616
  • Member-bound loop test lane for i < arr.length / i < s.length by @​lahma in #​2617
  • Add [JsSymbolAlias] for symbol-keyed function-identity aliases by @​lahma in #​2619
  • Preserve -0 in integer multiplication fast paths by @​lahma in #​2620
  • Refresh engine comparison benchmark results by @​lahma in #​2621
  • Reduce per-call ceremony: thread FDI state, collapse suspendable probes by @​lahma in #​2622
  • Extend for-loop tight-body lane to if/else chains and variable declarations by @​lahma in #​2623
  • Add call-site constructor cache with zero-arg leaf fast path for new Date() by @​lahma in #​2624
  • Memoize nested-scope global reads behind chain identity and an injection epoch by @​lahma in #​2625
  • Skip OrdinaryCallBindThis for functions that cannot observe their this-binding by @​lahma in #​2626
  • Run env-less leaf calls against the captured environment directly by @​lahma in #​2627
  • Add unboxed operand lane for bitwise operators over identifiers by @​lahma in #​2628
  • Refresh engine comparison benchmark results by @​lahma in #​2629
  • Add benchmark coverage for common JS patterns missing from the suite by @​lahma in #​2630
  • Migrate remaining symbol-alias tails to [JsSymbolAlias] by @​lahma in #​2631
  • Source-generate function capture fields (CaptureField on [JsFunction]/[JsSymbolFunction]) by @​lahma in #​2633
  • Skip per-iteration TDZ re-init for loop bodies proven init-before-use by @​lahma in #​2632
  • Build JSON.parse objects as hidden-class shapes; serialize shaped objects via slot walk by @​lahma in #​2634
  • Return the tag reference to the pool; fix tagged-template this-binding by @​lahma in #​2638
  • Spread string primitives in object literals via ToObject per CopyDataProperties by @​lahma in #​2637
  • Resolve number/boolean/bigint primitive methods without allocating a wrapper by @​lahma in #​2642
  • Allocate no function objects for engine-internal promise reactions and resolving functions by @​lahma in #​2639
  • Cut for-in allocation: memoized key strings, pooled loop-var reference and iterator by @​lahma in #​2640
  • Reduce error allocation: lazy stack, virtual message slot, pooled catch env by @​lahma in #​2641
  • Seed spread/rest/fromEntries/assign targets as shape-building objects by @​lahma in #​2635
  • Shape statically-clean constructor instances from the third construction by @​lahma in #​2636
  • Refresh engine comparison benchmark results by @​lahma in #​2646
  • Bump NodaTime from 3.3.2 to 3.3.3 by @​dependabot[bot] in #​2645
  • Bump the analyzers group with 1 update by @​dependabot[bot] in #​2643
  • Bump Verify.NUnit to 31.24.0 and force LF line endings for snapshot files by @​lahma in #​2647
  • Adopt the source shape when spreading a shaped object by @​lahma in #​2648
  • Cache the top-level statement list per engine for re-executed scripts by @​lahma in #​2649
  • Update Test262 suite to d1d583d by @​lahma in #​2650
  • 4.12.0 release prep: correctness fixes from pre-release review + benchmark refresh by @​lahma in #​2651

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

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](https

Note

PR body was truncated to here.


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
@renovate
renovate Bot force-pushed the renovate/jint-4.x branch 2 times, most recently from f9a83f8 to b962d7e Compare July 12, 2026 20:48
@renovate renovate Bot changed the title Update dependency Jint to 4.11.0 Update dependency Jint to 4.12.0 Jul 12, 2026
@renovate
renovate Bot force-pushed the renovate/jint-4.x branch from b962d7e to d970052 Compare July 15, 2026 13:03
@renovate renovate Bot changed the title Update dependency Jint to 4.12.0 Update dependency Jint to 4.13.0 Jul 15, 2026
@renovate
renovate Bot force-pushed the renovate/jint-4.x branch from d970052 to be3e072 Compare July 21, 2026 02:44
@Controllerdestiny
Controllerdestiny added this pull request to the merge queue Jul 22, 2026
Merged via the queue into master with commit 94c5ab3 Jul 22, 2026
3 checks passed
@renovate
renovate Bot deleted the renovate/jint-4.x branch July 22, 2026 04:52
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.

1 participant