Skip to content

Commit 5d0faec

Browse files
committed
servo: Merge #15715 - Make #[dom_struct] a proc_macro attribute (from nox:custom-derive); r=SimonSapin
The rustup is needed for rust-lang/rust#40039. Source-Repo: https://github.com/servo/servo Source-Revision: a204c4176dcccdad8ec99d74055c66794c3f64ba UltraBlame original commit: b439aae221f2298caa3f41781ce3dfbd0b36d8ad
1 parent ff03d88 commit 5d0faec

File tree

253 files changed

+307
-45
lines changed

Some content is hidden

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

253 files changed

+307
-45
lines changed

servo/Cargo.lock

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "dom_struct"
3+
version = "0.0.1"
4+
authors = ["The Servo Project Developers"]
5+
license = "MPL-2.0"
6+
publish = false
7+
8+
[lib]
9+
path = "lib.rs"
10+
proc-macro = true
11+
12+
[dependencies]
13+
quote = "0.3"

servo/components/dom_struct/lib.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
3+
4+
5+
#![feature(proc_macro)]
6+
7+
extern crate proc_macro;
8+
#[macro_use] extern crate quote;
9+
10+
use proc_macro::TokenStream;
11+
12+
#[proc_macro_attribute]
13+
pub fn dom_struct(args: TokenStream, input: TokenStream) -> TokenStream {
14+
if !args.to_string().is_empty() {
15+
panic!("#[dom_struct] takes no arguments");
16+
}
17+
expand_string(&input.to_string()).parse().unwrap()
18+
}
19+
20+
fn expand_string(input: &str) -> String {
21+
let mut tokens = quote! {
22+
#[derive(DenyPublicFields, DomObject, HeapSizeOf, JSTraceable)]
23+
#[must_root]
24+
#[repr(C)]
25+
};
26+
tokens.append(input);
27+
tokens.to_string()
28+
}

servo/components/script/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ cookie = "0.2.5"
3737
cssparser = {version = "0.10", features = ["heapsize", "serde"]}
3838
deny_public_fields = {path = "../deny_public_fields"}
3939
devtools_traits = {path = "../devtools_traits"}
40+
dom_struct = {path = "../dom_struct"}
4041
domobject_derive = {path = "../domobject_derive"}
4142
encoding = "0.2"
4243
euclid = "0.11"

servo/components/script/docs/JS-Servos-only-GC.md

Lines changed: 2 additions & 0 deletions

servo/components/script/dom/attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use dom::bindings::str::DOMString;
1212
use dom::element::{AttributeMutation, Element};
1313
use dom::virtualmethods::vtable_for;
1414
use dom::window::Window;
15+
use dom_struct::dom_struct;
1516
use html5ever_atoms::{Prefix, LocalName, Namespace};
1617
use servo_atoms::Atom;
1718
use std::borrow::ToOwned;

servo/components/script/dom/beforeunloadevent.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use dom::bindings::reflector::reflect_dom_object;
1414
use dom::bindings::str::DOMString;
1515
use dom::event::{Event, EventBubbles, EventCancelable};
1616
use dom::window::Window;
17+
use dom_struct::dom_struct;
1718
use servo_atoms::Atom;
1819

1920

servo/components/script/dom/bindings/iterable.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use dom::bindings::js::{JS, Root};
1414
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
1515
use dom::bindings::trace::JSTraceable;
1616
use dom::globalscope::GlobalScope;
17+
use dom_struct::dom_struct;
1718
use js::conversions::ToJSValConvertible;
1819
use js::jsapi::{HandleValue, Heap, JSContext, JSObject, MutableHandleObject};
1920
use js::jsval::UndefinedValue;

servo/components/script/dom/blob.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use dom::bindings::js::{JS, Root};
1111
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
1212
use dom::bindings::str::DOMString;
1313
use dom::globalscope::GlobalScope;
14+
use dom_struct::dom_struct;
1415
use encoding::all::UTF_8;
1516
use encoding::types::{EncoderTrap, Encoding};
1617
use ipc_channel::ipc;

servo/components/script/dom/bluetooth.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use dom::eventtarget::EventTarget;
3030
use dom::globalscope::GlobalScope;
3131
use dom::permissions::{get_descriptor_permission_state, PermissionAlgorithm};
3232
use dom::promise::Promise;
33+
use dom_struct::dom_struct;
3334
use ipc_channel::ipc::{self, IpcSender};
3435
use ipc_channel::router::ROUTER;
3536
use js::conversions::ConversionResult;

servo/components/script/dom/bluetoothadvertisingevent.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use dom::bluetoothdevice::BluetoothDevice;
1414
use dom::event::{Event, EventBubbles, EventCancelable};
1515
use dom::globalscope::GlobalScope;
1616
use dom::window::Window;
17+
use dom_struct::dom_struct;
1718
use servo_atoms::Atom;
1819

1920

servo/components/script/dom/bluetoothcharacteristicproperties.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use dom::bindings::codegen::Bindings::BluetoothCharacteristicPropertiesBinding::
88
use dom::bindings::js::Root;
99
use dom::bindings::reflector::{Reflector, reflect_dom_object};
1010
use dom::globalscope::GlobalScope;
11+
use dom_struct::dom_struct;
1112

1213

1314
#[dom_struct]

servo/components/script/dom/bluetoothdevice.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use dom::bluetoothremotegattservice::BluetoothRemoteGATTService;
2424
use dom::eventtarget::EventTarget;
2525
use dom::globalscope::GlobalScope;
2626
use dom::promise::Promise;
27+
use dom_struct::dom_struct;
2728
use ipc_channel::ipc::{self, IpcSender};
2829
use js::jsapi::JSContext;
2930
use std::cell::Cell;

servo/components/script/dom/bluetoothpermissionresult.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use dom::bluetoothdevice::BluetoothDevice;
1818
use dom::globalscope::GlobalScope;
1919
use dom::permissionstatus::PermissionStatus;
2020
use dom::promise::Promise;
21+
use dom_struct::dom_struct;
2122
use ipc_channel::ipc::IpcSender;
2223
use js::jsapi::JSContext;
2324
use std::rc::Rc;

servo/components/script/dom/bluetoothremotegattcharacteristic.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use dom::bluetoothuuid::{BluetoothDescriptorUUID, BluetoothUUID};
2525
use dom::eventtarget::EventTarget;
2626
use dom::globalscope::GlobalScope;
2727
use dom::promise::Promise;
28+
use dom_struct::dom_struct;
2829
use ipc_channel::ipc::IpcSender;
2930
use js::jsapi::JSContext;
3031
use std::rc::Rc;

servo/components/script/dom/bluetoothremotegattdescriptor.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use dom::bluetooth::{AsyncBluetoothListener, response_async};
1919
use dom::bluetoothremotegattcharacteristic::{BluetoothRemoteGATTCharacteristic, MAXIMUM_ATTRIBUTE_LENGTH};
2020
use dom::globalscope::GlobalScope;
2121
use dom::promise::Promise;
22+
use dom_struct::dom_struct;
2223
use ipc_channel::ipc::IpcSender;
2324
use js::jsapi::JSContext;
2425
use std::rc::Rc;

servo/components/script/dom/bluetoothremotegattserver.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use dom::bluetoothdevice::BluetoothDevice;
1515
use dom::bluetoothuuid::{BluetoothServiceUUID, BluetoothUUID};
1616
use dom::globalscope::GlobalScope;
1717
use dom::promise::Promise;
18+
use dom_struct::dom_struct;
1819
use ipc_channel::ipc::IpcSender;
1920
use js::jsapi::JSContext;
2021
use std::cell::Cell;

servo/components/script/dom/bluetoothremotegattservice.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use dom::bluetoothuuid::{BluetoothCharacteristicUUID, BluetoothServiceUUID, Blue
1717
use dom::eventtarget::EventTarget;
1818
use dom::globalscope::GlobalScope;
1919
use dom::promise::Promise;
20+
use dom_struct::dom_struct;
2021
use js::jsapi::JSContext;
2122
use std::rc::Rc;
2223

servo/components/script/dom/bluetoothuuid.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use dom::bindings::error::Fallible;
88
use dom::bindings::reflector::Reflector;
99
use dom::bindings::str::DOMString;
1010
use dom::window::Window;
11+
use dom_struct::dom_struct;
1112
use regex::Regex;
1213

1314
pub type UUID = DOMString;

servo/components/script/dom/browsingcontext.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use dom::dissimilaroriginwindow::DissimilarOriginWindow;
1515
use dom::element::Element;
1616
use dom::globalscope::GlobalScope;
1717
use dom::window::Window;
18+
use dom_struct::dom_struct;
1819
use js::JSCLASS_IS_GLOBAL;
1920
use js::glue::{CreateWrapperProxyHandler, ProxyTraps, NewWindowProxy};
2021
use js::glue::{GetProxyPrivate, SetProxyExtra, GetProxyExtra};

servo/components/script/dom/canvasgradient.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use dom::bindings::num::Finite;
1414
use dom::bindings::reflector::{Reflector, reflect_dom_object};
1515
use dom::bindings::str::DOMString;
1616
use dom::globalscope::GlobalScope;
17+
use dom_struct::dom_struct;
1718

1819

1920
#[dom_struct]

servo/components/script/dom/canvaspattern.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use dom::bindings::js::Root;
88
use dom::bindings::reflector::{Reflector, reflect_dom_object};
99
use dom::canvasgradient::ToFillOrStrokeStyle;
1010
use dom::globalscope::GlobalScope;
11+
use dom_struct::dom_struct;
1112
use euclid::size::Size2D;
1213

1314

servo/components/script/dom/canvasrenderingcontext2d.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use dom::htmlcanvaselement::utils as canvas_utils;
3333
use dom::htmlimageelement::HTMLImageElement;
3434
use dom::imagedata::ImageData;
3535
use dom::node::{Node, NodeDamage, window_from_node};
36+
use dom_struct::dom_struct;
3637
use euclid::matrix2d::Matrix2D;
3738
use euclid::point::Point2D;
3839
use euclid::rect::Rect;

servo/components/script/dom/characterdata.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use dom::element::Element;
1919
use dom::node::{Node, NodeDamage};
2020
use dom::processinginstruction::ProcessingInstruction;
2121
use dom::text::Text;
22+
use dom_struct::dom_struct;
2223
use servo_config::opts;
2324
use std::cell::Ref;
2425

servo/components/script/dom/client.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
99
use dom::bindings::str::{DOMString, USVString};
1010
use dom::serviceworker::ServiceWorker;
1111
use dom::window::Window;
12+
use dom_struct::dom_struct;
1213
use servo_url::ServoUrl;
1314
use std::default::Default;
1415
use uuid::Uuid;

servo/components/script/dom/closeevent.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
1212
use dom::bindings::str::DOMString;
1313
use dom::event::{Event, EventBubbles, EventCancelable};
1414
use dom::globalscope::GlobalScope;
15+
use dom_struct::dom_struct;
1516
use servo_atoms::Atom;
1617

1718
#[dom_struct]

servo/components/script/dom/comment.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use dom::characterdata::CharacterData;
1111
use dom::document::Document;
1212
use dom::node::Node;
1313
use dom::window::Window;
14+
use dom_struct::dom_struct;
1415

1516

1617
#[dom_struct]

servo/components/script/dom/crypto.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use dom::bindings::error::{Error, Fallible};
1010
use dom::bindings::js::Root;
1111
use dom::bindings::reflector::{Reflector, reflect_dom_object};
1212
use dom::globalscope::GlobalScope;
13+
use dom_struct::dom_struct;
1314
use js::jsapi::{JSContext, JSObject};
1415
use js::jsapi::Type;
1516
use servo_rand::{ServoRng, Rng};

servo/components/script/dom/css.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use dom::bindings::error::Fallible;
88
use dom::bindings::reflector::Reflector;
99
use dom::bindings::str::DOMString;
1010
use dom::window::Window;
11+
use dom_struct::dom_struct;
1112
use style::parser::ParserContext;
1213
use style::supports::{Declaration, parse_condition_or_declaration};
1314

servo/components/script/dom/cssconditionrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use dom::cssgroupingrule::CSSGroupingRule;
99
use dom::cssmediarule::CSSMediaRule;
1010
use dom::cssstylesheet::CSSStyleSheet;
1111
use dom::csssupportsrule::CSSSupportsRule;
12+
use dom_struct::dom_struct;
1213
use parking_lot::RwLock;
1314
use std::sync::Arc;
1415
use style::stylesheets::CssRules as StyleCssRules;

servo/components/script/dom/cssfontfacerule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
99
use dom::cssrule::{CSSRule, SpecificCSSRule};
1010
use dom::cssstylesheet::CSSStyleSheet;
1111
use dom::window::Window;
12+
use dom_struct::dom_struct;
1213
use parking_lot::RwLock;
1314
use std::sync::Arc;
1415
use style::font_face::FontFaceRule;

servo/components/script/dom/cssgroupingrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use dom::bindings::str::DOMString;
1111
use dom::cssrule::CSSRule;
1212
use dom::cssrulelist::{CSSRuleList, RulesSource};
1313
use dom::cssstylesheet::CSSStyleSheet;
14+
use dom_struct::dom_struct;
1415
use parking_lot::RwLock;
1516
use std::sync::Arc;
1617
use style::stylesheets::CssRules as StyleCssRules;

servo/components/script/dom/cssimportrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
99
use dom::cssrule::{CSSRule, SpecificCSSRule};
1010
use dom::cssstylesheet::CSSStyleSheet;
1111
use dom::window::Window;
12+
use dom_struct::dom_struct;
1213
use parking_lot::RwLock;
1314
use std::sync::Arc;
1415
use style::stylesheets::ImportRule;

servo/components/script/dom/csskeyframerule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use dom::cssrule::{CSSRule, SpecificCSSRule};
1111
use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSStyleOwner};
1212
use dom::cssstylesheet::CSSStyleSheet;
1313
use dom::window::Window;
14+
use dom_struct::dom_struct;
1415
use parking_lot::RwLock;
1516
use std::sync::Arc;
1617
use style::keyframes::Keyframe;

servo/components/script/dom/csskeyframesrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use dom::cssrule::{CSSRule, SpecificCSSRule};
1515
use dom::cssrulelist::{CSSRuleList, RulesSource};
1616
use dom::cssstylesheet::CSSStyleSheet;
1717
use dom::window::Window;
18+
use dom_struct::dom_struct;
1819
use parking_lot::RwLock;
1920
use servo_atoms::Atom;
2021
use std::sync::Arc;

servo/components/script/dom/cssmediarule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use dom::cssrule::SpecificCSSRule;
1313
use dom::cssstylesheet::CSSStyleSheet;
1414
use dom::medialist::MediaList;
1515
use dom::window::Window;
16+
use dom_struct::dom_struct;
1617
use parking_lot::RwLock;
1718
use std::sync::Arc;
1819
use style::media_queries::parse_media_query_list;

servo/components/script/dom/cssnamespacerule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use dom::bindings::str::DOMString;
1010
use dom::cssrule::{CSSRule, SpecificCSSRule};
1111
use dom::cssstylesheet::CSSStyleSheet;
1212
use dom::window::Window;
13+
use dom_struct::dom_struct;
1314
use parking_lot::RwLock;
1415
use std::sync::Arc;
1516
use style::stylesheets::NamespaceRule;

servo/components/script/dom/cssrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use dom::cssstylesheet::CSSStyleSheet;
1818
use dom::csssupportsrule::CSSSupportsRule;
1919
use dom::cssviewportrule::CSSViewportRule;
2020
use dom::window::Window;
21+
use dom_struct::dom_struct;
2122
use std::cell::Cell;
2223
use style::stylesheets::CssRule as StyleCssRule;
2324

servo/components/script/dom/cssrulelist.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use dom::csskeyframerule::CSSKeyframeRule;
1212
use dom::cssrule::CSSRule;
1313
use dom::cssstylesheet::CSSStyleSheet;
1414
use dom::window::Window;
15+
use dom_struct::dom_struct;
1516
use parking_lot::RwLock;
1617
use std::sync::Arc;
1718
use style::stylesheets::{CssRules, KeyframesRule, RulesMutateError};

servo/components/script/dom/cssstyledeclaration.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use dom::cssrule::CSSRule;
1313
use dom::element::Element;
1414
use dom::node::{Node, window_from_node};
1515
use dom::window::Window;
16+
use dom_struct::dom_struct;
1617
use parking_lot::RwLock;
1718
use servo_url::ServoUrl;
1819
use std::ascii::AsciiExt;

servo/components/script/dom/cssstylerule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use dom::cssrule::{CSSRule, SpecificCSSRule};
1111
use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSStyleOwner};
1212
use dom::cssstylesheet::CSSStyleSheet;
1313
use dom::window::Window;
14+
use dom_struct::dom_struct;
1415
use parking_lot::RwLock;
1516
use std::sync::Arc;
1617
use style::stylesheets::StyleRule;

servo/components/script/dom/cssstylesheet.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use dom::cssrulelist::{CSSRuleList, RulesSource};
1313
use dom::element::Element;
1414
use dom::stylesheet::StyleSheet;
1515
use dom::window::Window;
16+
use dom_struct::dom_struct;
1617
use std::cell::Cell;
1718
use std::sync::Arc;
1819
use style::stylesheets::Stylesheet as StyleStyleSheet;

servo/components/script/dom/csssupportsrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use dom::cssconditionrule::CSSConditionRule;
1212
use dom::cssrule::SpecificCSSRule;
1313
use dom::cssstylesheet::CSSStyleSheet;
1414
use dom::window::Window;
15+
use dom_struct::dom_struct;
1516
use parking_lot::RwLock;
1617
use std::sync::Arc;
1718
use style::parser::ParserContext;

servo/components/script/dom/cssviewportrule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
99
use dom::cssrule::{CSSRule, SpecificCSSRule};
1010
use dom::cssstylesheet::CSSStyleSheet;
1111
use dom::window::Window;
12+
use dom_struct::dom_struct;
1213
use parking_lot::RwLock;
1314
use std::sync::Arc;
1415
use style::viewport::ViewportRule;

0 commit comments

Comments
 (0)