Skip to content

Commit f78c9bf

Browse files
committed
Merge branch 'main' into upgrade
2 parents 801042c + 6a10cf9 commit f78c9bf

File tree

7 files changed

+118
-14
lines changed

7 files changed

+118
-14
lines changed

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ repository = "https://github.com/denoland/deno_core"
2121
[workspace.dependencies]
2222
# Local dependencies
2323
deno_ast = { version = "=0.49.0", features = ["transpiling"] }
24-
deno_core = { version = "0.355.0", path = "./core" }
24+
deno_core = { version = "0.356.0", path = "./core" }
2525
deno_core_icudata = "0.74.0"
2626
deno_core_testing = { path = "./testing" }
2727
deno_error = { version = "0.7.0", features = ["serde_json", "serde", "url", "tokio"] }
28-
deno_ops = { version = "0.231.0", path = "./ops" }
28+
deno_ops = { version = "0.232.0", path = "./ops" }
2929
deno_unsync = "0.4.2"
30-
serde_v8 = { version = "0.264.0", path = "./serde_v8" }
31-
v8 = { path = "../rusty_v8" } #version = "137.3.0", default-features = false }
30+
serde_v8 = { version = "0.265.0", path = "./serde_v8" }
31+
v8 = { path = "../rusty_v8" } # version = "137.3.0", default-features = false }
3232

3333
anyhow = "1"
3434
bencher = "0.1"

core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "deno_core"
5-
version = "0.355.0"
5+
version = "0.356.0"
66
authors.workspace = true
77
edition.workspace = true
88
license.workspace = true

core/cppgc.rs

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ pub fn wrap_object3<
352352
}
353353

354354
pub struct UnsafePtr<T: GarbageCollected> {
355-
inner: v8::cppgc::UnsafePtr<CppGcObject<T>>,
355+
inner: v8::cppgc::Ptr<CppGcObject<T>>,
356356
root: Option<v8::cppgc::Persistent<CppGcObject<T>>>,
357357
}
358358

@@ -374,6 +374,13 @@ impl<T: GarbageCollected> UnsafePtr<T> {
374374
}
375375
}
376376

377+
impl<T: GarbageCollected> std::ops::Deref for UnsafePtr<T> {
378+
type Target = T;
379+
fn deref(&self) -> &T {
380+
&self.inner.member
381+
}
382+
}
383+
377384
#[doc(hidden)]
378385
#[allow(clippy::needless_lifetimes)]
379386
pub fn try_unwrap_cppgc_object<'sc, T: GarbageCollected + 'static>(
@@ -401,6 +408,51 @@ pub fn try_unwrap_cppgc_object<'sc, T: GarbageCollected + 'static>(
401408
})
402409
}
403410

411+
pub struct Ref<T: GarbageCollected> {
412+
inner: v8::cppgc::Persistent<CppGcObject<T>>,
413+
}
414+
415+
impl<T: GarbageCollected> std::ops::Deref for Ref<T> {
416+
type Target = T;
417+
fn deref(&self) -> &T {
418+
&self.inner.borrow().unwrap().member
419+
}
420+
}
421+
422+
#[doc(hidden)]
423+
#[allow(clippy::needless_lifetimes)]
424+
pub fn try_unwrap_cppgc_persistent_object<
425+
'sc,
426+
T: GarbageCollected + 'static,
427+
>(
428+
isolate: &mut v8::Isolate,
429+
val: v8::Local<'sc, v8::Value>,
430+
) -> Option<Ref<T>> {
431+
let ptr = try_unwrap_cppgc_object::<T>(isolate, val)?;
432+
Some(Ref {
433+
inner: v8::cppgc::Persistent::new(&ptr.inner),
434+
})
435+
}
436+
437+
pub struct Member<T: GarbageCollected> {
438+
inner: v8::cppgc::Member<CppGcObject<T>>,
439+
}
440+
441+
impl<T: GarbageCollected> From<Ref<T>> for Member<T> {
442+
fn from(value: Ref<T>) -> Self {
443+
Member {
444+
inner: v8::cppgc::Member::new(&value.inner),
445+
}
446+
}
447+
}
448+
449+
impl<T: GarbageCollected> std::ops::Deref for Member<T> {
450+
type Target = T;
451+
fn deref(&self) -> &T {
452+
&self.inner.borrow().unwrap().member
453+
}
454+
}
455+
404456
#[doc(hidden)]
405457
#[allow(clippy::needless_lifetimes)]
406458
pub fn try_unwrap_cppgc_proto_object<
@@ -503,3 +555,55 @@ impl FunctionTemplateData {
503555
.collect();
504556
}
505557
}
558+
559+
#[derive(Debug)]
560+
pub struct SameObject<T: GarbageCollected + 'static> {
561+
cell: std::cell::OnceCell<v8::Global<v8::Object>>,
562+
_phantom_data: std::marker::PhantomData<T>,
563+
}
564+
565+
impl<T: GarbageCollected + 'static> SameObject<T> {
566+
#[allow(clippy::new_without_default)]
567+
pub fn new() -> Self {
568+
Self {
569+
cell: Default::default(),
570+
_phantom_data: Default::default(),
571+
}
572+
}
573+
574+
pub fn get<F>(
575+
&self,
576+
scope: &mut v8::HandleScope,
577+
f: F,
578+
) -> v8::Global<v8::Object>
579+
where
580+
F: FnOnce(&mut v8::HandleScope) -> T,
581+
{
582+
self
583+
.cell
584+
.get_or_init(|| {
585+
let v = f(scope);
586+
let obj = make_cppgc_object(scope, v);
587+
v8::Global::new(scope, obj)
588+
})
589+
.clone()
590+
}
591+
592+
pub fn set(
593+
&self,
594+
scope: &mut v8::HandleScope,
595+
value: T,
596+
) -> Result<(), v8::Global<v8::Object>> {
597+
let obj = make_cppgc_object(scope, value);
598+
self.cell.set(v8::Global::new(scope, obj))
599+
}
600+
601+
pub fn try_unwrap(
602+
&self,
603+
scope: &mut v8::HandleScope,
604+
) -> Option<UnsafePtr<T>> {
605+
let obj = self.cell.get()?;
606+
let val = v8::Local::new(scope, obj);
607+
try_unwrap_cppgc_object(scope, val.cast())
608+
}
609+
}

core/webidl.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ pub trait WebIdlInterfaceConverter:
858858
}
859859

860860
impl<'a, T: WebIdlInterfaceConverter> WebIdlConverter<'a>
861-
for crate::cppgc::UnsafePtr<T>
861+
for crate::cppgc::Ref<T>
862862
{
863863
type Options = ();
864864

@@ -869,8 +869,8 @@ impl<'a, T: WebIdlInterfaceConverter> WebIdlConverter<'a>
869869
context: ContextFn<'b>,
870870
_options: &Self::Options,
871871
) -> Result<Self, WebIdlError> {
872-
match crate::cppgc::try_unwrap_cppgc_object::<T>(scope, value) {
873-
Some(ptr) => Ok(ptr),
872+
match crate::cppgc::try_unwrap_cppgc_persistent_object::<T>(scope, value) {
873+
Some(persistent) => Ok(persistent),
874874
_ => Err(WebIdlError::new(
875875
prefix,
876876
context,

ops/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "deno_ops"
5-
version = "0.231.0"
5+
version = "0.232.0"
66
authors.workspace = true
77
edition.workspace = true
88
license.workspace = true

serde_v8/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "serde_v8"
5-
version = "0.264.0"
5+
version = "0.265.0"
66
authors.workspace = true
77
edition.workspace = true
88
license.workspace = true

0 commit comments

Comments
 (0)