diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 9c5e4864dab..3f15a316af3 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -7250,9 +7250,11 @@ def camel_to_upper_snake(s): def process_arg(expr, arg): if arg.type.isGeckoInterface() and not arg.type.unroll().inner.isCallback(): - if arg.variadic or arg.type.isSequence() or arg.type.nullable() and arg.optional: + if arg.variadic or arg.type.isSequence(): expr += ".r()" - elif arg.type.nullable() or arg.optional: + elif arg.type.nullable() and arg.optional and not arg.defaultValue: + expr += ".as_ref().map(Option::deref)" + elif arg.type.nullable() or arg.optional and not arg.defaultValue: expr += ".deref()" else: expr = "&" + expr diff --git a/components/script/dom/bindings/root.rs b/components/script/dom/bindings/root.rs index 9e158b450d8..86184af243d 100644 --- a/components/script/dom/bindings/root.rs +++ b/components/script/dom/bindings/root.rs @@ -264,13 +264,6 @@ pub trait RootedReference<'root> { fn r(&'root self) -> Self::Ref; } -impl<'root, T: DomObject + 'root> RootedReference<'root> for DomRoot { - type Ref = &'root T; - fn r(&'root self) -> &'root T { - self - } -} - impl<'root, T: JSTraceable + DomObject + 'root> RootedReference<'root> for [Dom] { type Ref = &'root [&'root T]; fn r(&'root self) -> &'root [&'root T] { @@ -278,13 +271,6 @@ impl<'root, T: JSTraceable + DomObject + 'root> RootedReference<'root> for [Dom< } } -impl<'root, T: RootedReference<'root> + 'root> RootedReference<'root> for Option { - type Ref = Option; - fn r(&'root self) -> Option { - self.as_ref().map(RootedReference::r) - } -} - /// A traced reference to a DOM object /// /// This type is critical to making garbage collection work with the DOM,