From 00325a546f4b90d7bee76db67adaaeac8224a679 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 1 Sep 2017 13:54:08 -0500 Subject: [PATCH] servo: Merge #18327 - Upgrade to rustc 1.21.0-nightly (7eeac1b81 2017-08-30) (from servo:rustup); r=nox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix this error in the new Rust Nightly: ```rust Compiling script v0.0.1 (file:///home/simon/servo2/components/script) error[E0599]: no method named `trace` found for type `&fn(&dom::node::Node) -> u16` in the current scope --> /home/simon/servo2/components/script/dom/treewalker.rs:464:10 | 464 | #[derive(JSTraceable)] | ^^^^^^^^^^^ | = note: JSTraceable is a function, perhaps you wish to call it = help: items from traits can only be used if the trait is implemented and in scope = note: the following trait defines an item `trace`, perhaps you need to implement it: candidate #1: `dom::bindings::trace::JSTraceable` error: aborting due to previous error error: Could not compile `script`. ``` ~I’ve tried to reproduce it in a minimal test case, but `impl SomeTrait for fn(A) -> B` did not apply for `fn(&u32) -> u32` even on Rust 1.19.0 stable. So I don’t know what changed.~ This is very likely https://github.com/servo/servo/pull/18327. Source-Repo: https://github.com/servo/servo Source-Revision: fd833d9f18cd9196502b9768ab0ac8c1498b2f68 --- servo/components/script/dom/bindings/trace.rs | 7 +++++++ servo/components/script_plugins/utils.rs | 2 +- servo/rust-toolchain | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/servo/components/script/dom/bindings/trace.rs b/servo/components/script/dom/bindings/trace.rs index df681e3add9f5..b566e972ec2d7 100644 --- a/servo/components/script/dom/bindings/trace.rs +++ b/servo/components/script/dom/bindings/trace.rs @@ -425,6 +425,13 @@ unsafe impl JSTraceable for fn(A) -> B { } } +unsafe impl<'a, A, B> JSTraceable for fn(&A) -> B { + #[inline] + unsafe fn trace(&self, _: *mut JSTracer) { + // Do nothing + } +} + unsafe impl JSTraceable for IpcSender where T: for<'de> Deserialize<'de> + Serialize { #[inline] unsafe fn trace(&self, _: *mut JSTracer) { diff --git a/servo/components/script_plugins/utils.rs b/servo/components/script_plugins/utils.rs index 4f6fce2d0edf5..45a348ea14f85 100644 --- a/servo/components/script_plugins/utils.rs +++ b/servo/components/script_plugins/utils.rs @@ -29,7 +29,7 @@ pub fn match_def_path(cx: &LateContext, def_id: DefId, path: &[&str]) -> bool { } pub fn in_derive_expn(span: Span) -> bool { - if let Some(i) = span.ctxt.outer().expn_info() { + if let Some(i) = span.ctxt().outer().expn_info() { if let ExpnFormat::MacroAttribute(n) = i.callee.format { n.as_str().contains("derive") } else { diff --git a/servo/rust-toolchain b/servo/rust-toolchain index 202c6314dd996..009c84eceb4fd 100644 --- a/servo/rust-toolchain +++ b/servo/rust-toolchain @@ -1 +1 @@ -nightly-2017-08-30 +nightly-2017-08-31