Commit Graph
4474 Commits
Author SHA1 Message Date
Malte Ubl dcbdaa9475 Merge remote-tracking branch 'origin/ni/i7-routing' into HEAD 2026-10-23 07:24:17 -07:00
Malte Ubl 586ec48c22 Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD 2026-10-23 07:23:57 -07:00
Malte Ubl b2bd9dabce Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-23 07:23:36 -07:00
Malte Ubl 545013908a Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-23 07:23:14 -07:00
Malte Ubl 7cbddb7dd2 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD 2026-10-23 07:22:53 -07:00
Malte Ubl 448b1108da Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-23 07:22:32 -07:00
Malte Ubl 4abfd98cb8 Merge remote-tracking branch 'origin/ni/i1-stack-bound' into HEAD 2026-10-23 07:22:11 -07:00
Malte Ubl 7c64604980 Merge remote-tracking branch 'origin/ni/islands-base' into HEAD 2026-10-23 07:21:49 -07:00
Malte Ubl 1d139d7005 Merge remote-tracking branch 'origin/ni-2-node-island-report' into HEAD 2026-10-23 07:21:44 -07:00
Malte UblandClaude Opus 5.5 249773437a Update the strict-user-js coverage snapshot for main's startup section
Main now reports fenced sites in module top-level code under "runs at
startup"; the use of 'legacy' on line 22 is one of them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 07:21:37 -07:00
Malte Ubl 183289ddc0 Merge remote-tracking branch 'origin/ni/i7-routing' into HEAD 2026-10-23 06:44:20 -07:00
Malte Ubl d62752f11b Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD 2026-10-23 06:43:46 -07:00
Malte Ubl e4a660c15a Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-23 06:43:11 -07:00
Malte UblandClaude Opus 5.5 ec5f77f508 Give the libnode smoke dispatcher the sharedPush entry the bridge requires
ABI 7 takes sharedPush from the bootstrap's dispatcher as well.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 06:43:02 -07:00
Malte Ubl 6bd7ecd789 Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-23 06:42:12 -07:00
Malte Ubl 4d5edcca20 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD 2026-10-23 06:41:42 -07:00
Malte Ubl 9df17b1c85 Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-23 06:41:13 -07:00
Malte UblandClaude Opus 5.5 f42fc643de Give the libnode smoke dispatcher the load entry the bridge requires
ABI 5 takes a load function from the bootstrap's dispatcher; without it
the smoke program's start fails with an incomplete dispatcher.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 06:40:57 -07:00
Malte Ubl faf5ebeb12 Merge remote-tracking branch 'origin/ni/i7-routing' into HEAD 2026-10-23 06:38:01 -07:00
Malte Ubl 11c5aeeadc Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD
# Conflicts:
#	packages/compiler/src/diagnostics/diagnostic.ts
2026-10-23 06:37:26 -07:00
Malte Ubl 0a965bb87a Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-23 06:34:31 -07:00
Malte Ubl 4bbbf3e079 Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-23 06:33:28 -07:00
Malte Ubl 67a0656781 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD
# Conflicts:
#	packages/runtime-pack-common/runtime-pack-matrix.mjs
2026-10-23 06:32:59 -07:00
Malte Ubl 4596a4fa28 Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD
# Conflicts:
#	packages/compiler/src/backend/native/executable.ts
#	packages/runtime-pack-common/runtime-pack-matrix.mjs
2026-10-23 06:32:23 -07:00
Malte UblandClaude Opus 5.5 b653f4fd08 Merge origin/ni/i1-stack-bound into ni/i2-handles
Main's FinalizationRegistry took handle tag 72, so the Node island
handle moves to 73. Island handles keep their instanceof path in the
new scr_bytes_instanceof_at.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 06:31:43 -07:00
Malte Ubl 1e70c2a844 Merge remote-tracking branch 'origin/ni/islands-base' into HEAD 2026-10-23 06:29:55 -07:00
Malte UblandClaude Opus 5.5 a0ae4ddad0 Drive the libnode smoke test through the hosted-loop bridge ABI
The libnode packs' smoke program (#1684) still used the pump/alive/
backend_fd entries that the hosted loop (#1696) replaced, so every
Build libnode pack job failed to compile it. It now provides the full
host table and dispatcher and runs Node's event loop once after starting
the asynchronous calls, as the runtime does at the end of a program.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 06:00:38 -07:00
Malte Ubl 752b9e565b Merge remote-tracking branch 'origin/ni-2-node-island-report' into HEAD 2026-10-23 05:57:22 -07:00
Malte Ubl bc15f17670 Merge remote-tracking branch 'origin/ni/13-libnode-packs' into HEAD 2026-10-23 05:57:22 -07:00
Malte Ubl 2acfd9e723 Merge remote-tracking branch 'origin/ni/3-hosted-loop' into HEAD
# Conflicts:
#	packages/compiler/src/diagnostics/diagnostic.ts
#	packages/compiler/src/frontend/pipeline.ts
2026-10-23 05:57:22 -07:00
Malte Ubl 9b3c7bb520 Merge remote-tracking branch 'origin/ni/1-libnode-loader' into HEAD 2026-10-23 05:56:23 -07:00
Malte Ubl 72b4020624 Merge remote-tracking branch 'origin/ni/1-libnode-loader' into HEAD 2026-10-23 05:55:50 -07:00
Malte Ubl c0a89e002b Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	packages/compiler/src/diagnostics/diagnostic.ts
#	packages/compiler/src/frontend/pipeline.ts
2026-10-23 05:55:03 -07:00
Malte Ubl 2494e7c1dc Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	packages/compiler/src/backend/native/executable.ts
#	packages/compiler/src/frontend/lowering/lower-calls.ts
#	packages/compiler/src/frontend/lowering/lowerer.ts
#	packages/runtime-pack-common/runtime-pack-matrix.mjs
2026-10-23 05:53:42 -07:00
Chris Tate d1b63c782c Keep every field when an object converts to a union with an empty-record arm (#1992) 2026-10-23 07:53:37 -05:00
Chris Tate 5c015be6be Try wider record arms first when a dyn value converts to a union
Records are width-tolerant, and a union's arms were tried in canonical
order, which sorts record arms by shape id. When a `{}` arm, or an arm
whose fields are all optional, came first, it took every object, so a
value converted to the union lost the fields only a wider arm has:

    const pairs = [["a", { publicKeyEncoding: 5 }], ["b", {}]];
    for (const [, v] of pairs) console.log(Object.keys(v));

printed [] twice, where Node prints [ 'publicKeyEncoding' ] and [].
A checked cast to `{ p: number; q: string } | { p?: number }` dropped
`q` the same way.

The checked conversion now tries record arms with more required fields
first, then those with more fields, and keeps the canonical order
otherwise. The union's tags are unchanged.
2026-10-23 07:47:26 -05:00
Chris Tate c08ef7aa29 Read emitter analyses from one recorded walk of the module (#1990) 2026-10-23 06:29:19 -05:00
Chris Tate 45de4233de Declare every http2 listener event for once and addListener (#1831) 2026-10-23 06:28:54 -05:00
Chris Tate efc351f202 Read emitter analyses from one recorded walk of the module
The LLVM emitter's constructor runs many analyses that each walk every
function body to collect facts from a few node kinds. IrNodeIndex
(ir/node-index.ts) walks the bodies once, before those analyses, and
records each body's nodes in everyStmtList's order with a kind code per
node and the kinds present per function. An analysis names the kinds it
reads and receives exactly those nodes, in the same order, without
recursing through the tree; a function the index does not hold (a
rewritten copy) is walked as before. The index also lists the distinct
type objects of the module, which the boxed-union and runtime-feature
scans read instead of walking every expression's type tree.

These read the index: walk borrows, appended array literals, constant
callbacks and the rebinding census, int32 slots (dynamic field stores,
call facts, the box census, candidate writes and the range walks),
initializer bindings, stack observations, the may-throw call-graph
census, published types and construction facts, final fields, stable
globals, reference writes (private arrays, call targets, definitions,
fresh constructors), boxed unions and runtime features. Analyses whose
walks track their position (statement lists, nesting, ordered
dataflow) keep their own walks.

Callers outside the emitter pass no index and walk as before. The
emitted LLVM IR is unchanged.

packages/compiler/native/cli.profdata.gz is refreshed with
scripts/refresh-cli-profile.mjs on this change, so the native
compiler's optimization profile covers the rewritten analyses.
2026-10-23 06:22:00 -05:00
Chris Tate a85c7c0a3b Read native handle methods as function values (#1984) 2026-10-23 06:02:41 -05:00
Chris Tate d9544bb71d Release EventTarget's shared method values at exit when only a signal read them
The EventTarget method values are cached for the program, and exit
released them only when an EventTarget, an event or a listener had
registered the unit's teardown. A program that read an AbortSignal's
addEventListener and never added a listener or made a target left the
cached functions live, and RC-audit builds exited with 99. Caching a
method value now registers the teardown too.
2026-10-23 05:57:37 -05:00
Chris Tate 8d17fe4e57 Support crypto.getCipherInfo, AES-CCM and AES key wrap (#1873) 2026-10-23 05:36:21 -05:00
Chris Tate 8ec8423510 Keep package-created values of interfaces extending package interfaces dynamic (#1988) 2026-10-23 05:33:44 -05:00
Chris Tate 19e0fe8bcd Merge main and read cipher options through getters and prototypes 2026-10-23 05:33:14 -05:00
Chris Tate 40c3f69b40 Read an AbortSignal's EventTarget methods as EventTarget's own
An AbortSignal answered addEventListener, removeEventListener and
dispatchEvent read as values with functions of its own, which only ran on
AbortSignal handles: calling one on a plain EventTarget threw
ERR_INVALID_THIS. In Node they are EventTarget.prototype's methods,
shared with every target. The signal's property read now answers the
EventTarget method values (scr_event_target_method_value), which run on
any EventTarget receiver, AbortSignal included, so
signal.addEventListener === new EventTarget().addEventListener holds.
The signal's own method table keeps throwIfAborted.
2026-10-23 05:31:21 -05:00
Chris Tate 61bae8c5e0 Keep package-created values of interfaces extending package interfaces dynamic
The declaration boundary projected a user-declared interface as plain
data even when it extends a package interface. effect's Request.tagged
constructors create such values (interface Double extends
Request.Request<number>) with a prototype, so the boundary cast threw
"expected a plain object (this value has a prototype)". A user
interface now projects only when every interface it extends is
user-declared too; other values keep their JavaScript-world typing, so
the package finds its prototype members when the value goes back to it.
2026-10-23 05:30:24 -05:00
Chris Tate 63fd3cecb7 Build @hono/node-server 2.x into scriptc (#1886) 2026-10-23 05:25:14 -05:00
Chris Tate 2ee25d026f Fire spawn listeners for a child that exits before its first poll pass (#1986) 2026-10-23 05:23:16 -05:00
Chris Tate f0d0384b6d Revert "Reuse the bundled declaration files' diagnostics across builds" (#1987) 2026-10-23 05:22:55 -05:00
Chris Tate a8484aea07 Address review feedback on request-body streaming 2026-10-23 05:22:01 -05:00