Skip to content

Commit f46932a

Browse files
proggeramlugRalph Kuepper
andauthored
revert: back out #8671 (breaks the pbkdf2 callback), re-land #8764 (#8798)
* fix(windows): keep WinUI callbacks behind scanned keys Resolve widget, lifecycle, and timer callback pointers from GC-scanned storage at invocation time so Reactor closures cannot retain stale addresses after an evacuating collection.\n\nFixes #8734 * revert: back out #8797 (#8671 breaks the pbkdf2 callback) --------- Co-authored-by: Ralph Kuepper <ralph@skelpo.com>
1 parent cf2a508 commit f46932a

138 files changed

Lines changed: 1668 additions & 4985 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

changelog.d/8671-async-hooks-parity.md

Lines changed: 0 additions & 8 deletions
This file was deleted.

crates/perry-api-manifest/src/entries/part_4.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,6 @@ pub(crate) const API_MANIFEST_PART_4: &[ApiEntry] = &[
838838
method("http", "ref", true, Some("HttpServer")),
839839
method("http", "unref", true, Some("HttpServer")),
840840
method("http", "on", true, Some("IncomingMessage")),
841-
method("http", "once", true, Some("IncomingMessage")),
842841
method("http", "addListener", true, Some("IncomingMessage")),
843842
method("http", "pause", true, Some("IncomingMessage")),
844843
method("http", "resume", true, Some("IncomingMessage")),
@@ -857,7 +856,6 @@ pub(crate) const API_MANIFEST_PART_4: &[ApiEntry] = &[
857856
// method, so the manifest-consistency drift guard requires a row
858857
// here even though the test collapses class_filter variants.
859858
method("http", "setTimeout", true, Some("ClientRequest")),
860-
method("http", "once", true, Some("ClientRequest")),
861859
method("http", "listenerCount", true, Some("ClientRequest")),
862860
method("http", "setHeader", true, Some("ClientRequest")),
863861
method("http", "getHeader", true, Some("ClientRequest")),

crates/perry-codegen/src/expr/calls/crypto_misc.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -271,18 +271,13 @@ pub(crate) fn arm_crypto_prime(
271271
unreachable!()
272272
};
273273
let first_box = lower_expr(ctx, &args[0])?;
274-
let is_async = matches!(property, "generatePrime" | "checkPrime");
275-
// The callback forms are `(value, callback)` or
276-
// `(value, options, callback)`. Treating the second argument as options
277-
// unconditionally accidentally routed the common two-argument form to
278-
// the synchronous implementation and returned the generated value.
279-
let options_box = if args.len() >= 2 && (!is_async || args.len() >= 3) {
274+
let options_box = if args.len() >= 2 {
280275
lower_expr(ctx, &args[1])?
281276
} else {
282277
double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED))
283278
};
284-
let callback_box = if is_async && args.len() >= 2 {
285-
Some(lower_expr(ctx, &args[args.len().min(3) - 1])?)
279+
let callback_box = if matches!(property, "generatePrime" | "checkPrime") && args.len() >= 3 {
280+
Some(lower_expr(ctx, &args[2])?)
286281
} else {
287282
None
288283
};

crates/perry-codegen/src/expr/env_clones.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ pub(crate) fn lower(ctx: &mut FnCtx<'_>, expr: &Expr) -> Result<String> {
193193
let blk = ctx.block();
194194
let raw = blk.call(
195195
I64,
196-
"js_ext_net_create_server",
196+
"js_net_create_server",
197197
&[(I64, &options_i64), (I64, &listener_i64)],
198198
);
199199
Ok(nanbox_pointer_inline(blk, &raw))

crates/perry-codegen/src/expr/instance_misc1.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,6 @@ pub(crate) fn lower(ctx: &mut FnCtx<'_>, expr: &Expr) -> Result<String> {
483483
// Promise values are raw promise allocations, not ObjectHeader
484484
// instances with a class_id field.
485485
"Promise" => 0xFFFF0027u32,
486-
"AsyncLocalStorage" => 0xFFFF0078u32,
487-
"AsyncResource" => 0xFFFF0079u32,
488486
// WHATWG fetch types. Like Blob/streams these are pointer-tagged
489487
// small-int handles; the runtime resolves them via the stdlib
490488
// fetch kind-probe (`res instanceof Response`, etc.).

crates/perry-codegen/src/expr/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ pub(crate) use write_barrier::{
132132
emit_root_heap_word_store_on_block, emit_root_nanbox_store_on_block, emit_write_barrier,
133133
emit_write_barrier_slot_generation_tested, emit_write_barrier_slot_on_block,
134134
emit_write_barrier_slot_value_and_generation_tested, lower_array_super_init,
135-
lower_event_emitter_async_resource_subclass_init, lower_event_emitter_subclass_init,
136-
lower_node_stream_super_init, lower_stream_super_init,
135+
lower_event_emitter_subclass_init, lower_node_stream_super_init, lower_stream_super_init,
137136
};
138137

139138
// Issue #1098 phase 3: the `FnCtx` definition stays in this trunk, but its

crates/perry-codegen/src/expr/property_get.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,15 +1376,6 @@ pub(crate) fn lower(ctx: &mut FnCtx<'_>, expr: &Expr) -> Result<String> {
13761376
if receiver_class_is_proven && is_net_native_method_value(&class_name, property) {
13771377
return lower_class_method_bind(ctx, object, property);
13781378
}
1379-
if receiver_class_is_proven
1380-
&& class_name == "AsyncResource"
1381-
&& matches!(
1382-
property.as_str(),
1383-
"asyncId" | "triggerAsyncId" | "emitDestroy" | "runInAsyncScope" | "bind"
1384-
)
1385-
{
1386-
return lower_runtime_property_get_by_name(ctx, object, property);
1387-
}
13881379
if class_has_computed_runtime_members(ctx, &class_name) {
13891380
return lower_runtime_property_get_by_name(ctx, object, property);
13901381
}

crates/perry-codegen/src/expr/this_super_call.rs

Lines changed: 2 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ use crate::nanbox::{double_literal, POINTER_MASK_I64};
1212
use crate::types::{DOUBLE, I1, I32, I64, PTR};
1313

1414
use super::{
15-
lower_array_super_init, lower_event_emitter_async_resource_subclass_init,
16-
lower_event_emitter_subclass_init, lower_expr, lower_node_stream_super_init,
17-
lower_stream_super_init, nanbox_pointer_inline, FnCtx,
15+
lower_array_super_init, lower_event_emitter_subclass_init, lower_expr,
16+
lower_node_stream_super_init, lower_stream_super_init, nanbox_pointer_inline, FnCtx,
1817
};
1918

2019
/// Enter one derived constructor's `super()` binding scope.
@@ -827,83 +826,6 @@ pub(crate) fn lower(ctx: &mut FnCtx<'_>, expr: &Expr) -> Result<String> {
827826
)?;
828827
return Ok(double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED)));
829828
}
830-
if parent_name.as_str() == "EventEmitterAsyncResource" {
831-
let mut lowered = Vec::with_capacity(super_args.len());
832-
for arg in super_args {
833-
lowered.push(lower_expr(ctx, arg)?);
834-
}
835-
let options = lowered.first().cloned().unwrap_or_else(|| {
836-
double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED))
837-
});
838-
let this_box = match ctx.this_stack.last().cloned() {
839-
Some(slot) => ctx.block().load(DOUBLE, &slot),
840-
None => double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED)),
841-
};
842-
lower_event_emitter_async_resource_subclass_init(ctx, &this_box, &options);
843-
bind_derived_this_after_super(ctx);
844-
let current_class_name =
845-
ctx.class_stack.last().cloned().unwrap_or_default();
846-
crate::lower_call::apply_field_initializers_recursive(
847-
ctx,
848-
&current_class_name,
849-
crate::lower_call::FieldInitMode::SelfOnly,
850-
)?;
851-
return Ok(double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED)));
852-
}
853-
if parent_name.as_str() == "AsyncLocalStorage" {
854-
for arg in super_args {
855-
let _ = lower_expr(ctx, arg)?;
856-
}
857-
let this_box = match ctx.this_stack.last().cloned() {
858-
Some(slot) => ctx.block().load(DOUBLE, &slot),
859-
None => double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED)),
860-
};
861-
ctx.block().call(
862-
DOUBLE,
863-
"js_async_local_storage_subclass_init",
864-
&[(DOUBLE, &this_box)],
865-
);
866-
bind_derived_this_after_super(ctx);
867-
let current_class_name =
868-
ctx.class_stack.last().cloned().unwrap_or_default();
869-
crate::lower_call::apply_field_initializers_recursive(
870-
ctx,
871-
&current_class_name,
872-
crate::lower_call::FieldInitMode::SelfOnly,
873-
)?;
874-
return Ok(double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED)));
875-
}
876-
if parent_name.as_str() == "AsyncResource" {
877-
let undef = double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED));
878-
let mut lowered = Vec::with_capacity(super_args.len());
879-
for arg in super_args {
880-
lowered.push(lower_expr(ctx, arg)?);
881-
}
882-
let type_value = lowered.first().cloned().unwrap_or_else(|| undef.clone());
883-
let options = lowered.get(1).cloned().unwrap_or_else(|| undef.clone());
884-
let this_box = match ctx.this_stack.last().cloned() {
885-
Some(slot) => ctx.block().load(DOUBLE, &slot),
886-
None => undef,
887-
};
888-
ctx.block().call(
889-
DOUBLE,
890-
"js_async_resource_subclass_init",
891-
&[
892-
(DOUBLE, &this_box),
893-
(DOUBLE, &type_value),
894-
(DOUBLE, &options),
895-
],
896-
);
897-
bind_derived_this_after_super(ctx);
898-
let current_class_name =
899-
ctx.class_stack.last().cloned().unwrap_or_default();
900-
crate::lower_call::apply_field_initializers_recursive(
901-
ctx,
902-
&current_class_name,
903-
crate::lower_call::FieldInitMode::SelfOnly,
904-
)?;
905-
return Ok(double_literal(f64::from_bits(crate::nanbox::TAG_UNDEFINED)));
906-
}
907829
// `class X extends Request` / `extends Response`:
908830
// `super(input, init)` allocates the underlying native
909831
// Web-Fetch handle and stashes its id on `this` under

crates/perry-codegen/src/expr/write_barrier.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,15 +1081,3 @@ pub(crate) fn lower_event_emitter_subclass_init(ctx: &mut FnCtx<'_>, this_box: &
10811081
&[(DOUBLE, this_box)],
10821082
);
10831083
}
1084-
1085-
pub(crate) fn lower_event_emitter_async_resource_subclass_init(
1086-
ctx: &mut FnCtx<'_>,
1087-
this_box: &str,
1088-
options_box: &str,
1089-
) {
1090-
ctx.block().call(
1091-
DOUBLE,
1092-
"js_event_emitter_async_resource_subclass_init",
1093-
&[(DOUBLE, this_box), (DOUBLE, options_box)],
1094-
);
1095-
}

crates/perry-codegen/src/ext_registry.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,6 @@ const FFI_REGISTRY: &[(&str, OwnerKind)] = &[
391391
// import flip might not fire. Tagging here so the linker pulls
392392
// libperry_ext_net.a in regardless.
393393
("js_net_create_server", OwnerKind::WellKnown("net")),
394-
("js_ext_net_create_server", OwnerKind::WellKnown("net")),
395-
("js_ext_net_socket_connect", OwnerKind::WellKnown("net")),
396394
("js_net_server_listen", OwnerKind::WellKnown("net")),
397395
("js_net_server_close", OwnerKind::WellKnown("net")),
398396
("js_net_server_address", OwnerKind::WellKnown("net")),
@@ -441,9 +439,6 @@ const FFI_REGISTRY: &[(&str, OwnerKind)] = &[
441439
// program that doesn't otherwise import socket-side surface.
442440
("js_net_socket_address", OwnerKind::WellKnown("net")),
443441
("js_net_socket_once", OwnerKind::WellKnown("net")),
444-
("js_ext_net_socket_once", OwnerKind::WellKnown("net")),
445-
("js_ext_net_socket_on", OwnerKind::WellKnown("net")),
446-
("js_ext_tls_connect", OwnerKind::WellKnown("net")),
447442
("js_net_socket_remove_listener", OwnerKind::WellKnown("net")),
448443
("js_net_socket_remove_all_listeners", OwnerKind::WellKnown("net")),
449444
("js_net_socket_listener_count", OwnerKind::WellKnown("net")),
@@ -544,15 +539,11 @@ const FFI_REGISTRY: &[(&str, OwnerKind)] = &[
544539
// `external-events-construct` feature (see optimized_libs.rs), which the
545540
// default-import dynamic-`new` path relies on (#4995).
546541
//
547-
// EventEmitterAsyncResource lives alongside the external EventEmitter so
548-
// optimized node:events builds retain one coherent handle registry.
542+
// Only the core surface defined by perry-ext-events is listed; the
543+
// `js_event_emitter_async_resource_*` helpers live in perry-stdlib and
544+
// are out of scope here (`EventEmitterAsyncResource` is node:events-only).
549545
("js_event_emitter_new", OwnerKind::WellKnown("events")),
550546
("js_event_emitter_new_with_options", OwnerKind::WellKnown("events")),
551-
("js_event_emitter_async_resource_new", OwnerKind::WellKnown("events")),
552-
("js_event_emitter_async_resource_async_id", OwnerKind::WellKnown("events")),
553-
("js_event_emitter_async_resource_trigger_async_id", OwnerKind::WellKnown("events")),
554-
("js_event_emitter_async_resource_async_resource", OwnerKind::WellKnown("events")),
555-
("js_event_emitter_async_resource_emit_destroy", OwnerKind::WellKnown("events")),
556547
("js_event_emitter_on", OwnerKind::WellKnown("events")),
557548
("js_event_emitter_once", OwnerKind::WellKnown("events")),
558549
("js_event_emitter_prepend_listener", OwnerKind::WellKnown("events")),
@@ -568,8 +559,6 @@ const FFI_REGISTRY: &[(&str, OwnerKind)] = &[
568559
("js_event_emitter_set_max_listeners", OwnerKind::WellKnown("events")),
569560
("js_event_emitter_get_max_listeners", OwnerKind::WellKnown("events")),
570561
("js_event_emitter_domain_value", OwnerKind::WellKnown("events")),
571-
("js_ext_net_socket_write3", OwnerKind::WellKnown("net")),
572-
("js_ext_net_socket_end3", OwnerKind::WellKnown("net")),
573562

574563
// ── mysql2 (perry-ext-mysql2) ────────────────────────────────────
575564
// Normally `import "mysql2"` flips the `[bindings.mysql2]` well-known

0 commit comments

Comments
 (0)