mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Make #[dom_struct] a proc_macro attribute
This commit is contained in:
parent
64885c4213
commit
31e9d81c0f
251 changed files with 298 additions and 35 deletions
|
@ -1,24 +0,0 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use syntax::ast::MetaItem;
|
||||
use syntax::codemap::Span;
|
||||
use syntax::ext::base::{Annotatable, ExtCtxt};
|
||||
use syntax::ptr::P;
|
||||
|
||||
pub fn expand_dom_struct(cx: &mut ExtCtxt, sp: Span, _: &MetaItem, anno: Annotatable) -> Annotatable {
|
||||
if let Annotatable::Item(item) = anno {
|
||||
let mut item2 = (*item).clone();
|
||||
item2.attrs.push(quote_attr!(cx, #[must_root]));
|
||||
item2.attrs.push(quote_attr!(cx, #[repr(C)]));
|
||||
item2.attrs.push(quote_attr!(cx, #[derive(JSTraceable)]));
|
||||
item2.attrs.push(quote_attr!(cx, #[derive(HeapSizeOf)]));
|
||||
item2.attrs.push(quote_attr!(cx, #[derive(DenyPublicFields)]));
|
||||
item2.attrs.push(quote_attr!(cx, #[derive(DomObject)]));
|
||||
Annotatable::Item(P(item2))
|
||||
} else {
|
||||
cx.span_err(sp, "#[dom_struct] applied to something other than a struct");
|
||||
anno
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
|
||||
#![deny(unsafe_code)]
|
||||
#![feature(box_syntax, plugin, plugin_registrar, quote, rustc_private, slice_patterns)]
|
||||
#![feature(box_syntax, plugin, plugin_registrar, rustc_private, slice_patterns)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate rustc;
|
||||
|
@ -23,24 +23,15 @@ extern crate rustc_plugin;
|
|||
extern crate syntax;
|
||||
|
||||
use rustc_plugin::Registry;
|
||||
use syntax::ext::base::*;
|
||||
use syntax::feature_gate::AttributeType::Whitelisted;
|
||||
use syntax::symbol::Symbol;
|
||||
|
||||
mod ban;
|
||||
// Public for documentation to show up
|
||||
/// Handles the auto-deriving for `#[derive(JSTraceable)]`
|
||||
pub mod jstraceable;
|
||||
mod unrooted_must_root;
|
||||
/// Utilities for writing plugins
|
||||
mod utils;
|
||||
|
||||
#[plugin_registrar]
|
||||
pub fn plugin_registrar(reg: &mut Registry) {
|
||||
reg.register_syntax_extension(
|
||||
Symbol::intern("dom_struct"),
|
||||
MultiModifier(box jstraceable::expand_dom_struct));
|
||||
|
||||
reg.register_late_lint_pass(box unrooted_must_root::UnrootedPass::new());
|
||||
reg.register_early_lint_pass(box ban::BanPass);
|
||||
reg.register_attribute("allow_unrooted_interior".to_string(), Whitelisted);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue