mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Introduce ServoParser
This is a common inline parent to ServoHTMLParser and ServoXMLParser.
This commit is contained in:
parent
f43a14ea68
commit
ea27f9d5ec
8 changed files with 43 additions and 11 deletions
|
@ -2748,7 +2748,8 @@ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
|
||||||
interface.get());
|
interface.get());
|
||||||
""" % {"id": name, "name": str_to_const_array(name)})
|
""" % {"id": name, "name": str_to_const_array(name)})
|
||||||
|
|
||||||
if len(self.descriptor.prototypeChain) == 1:
|
parentName = self.descriptor.getParentName()
|
||||||
|
if not parentName:
|
||||||
if self.descriptor.interface.getExtendedAttribute("ExceptionClass"):
|
if self.descriptor.interface.getExtendedAttribute("ExceptionClass"):
|
||||||
getPrototypeProto = "prototype_proto.set(JS_GetErrorPrototype(cx))"
|
getPrototypeProto = "prototype_proto.set(JS_GetErrorPrototype(cx))"
|
||||||
elif self.descriptor.interface.isIteratorInterface():
|
elif self.descriptor.interface.isIteratorInterface():
|
||||||
|
@ -2757,7 +2758,7 @@ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
|
||||||
getPrototypeProto = "prototype_proto.set(JS_GetObjectPrototype(cx, global))"
|
getPrototypeProto = "prototype_proto.set(JS_GetObjectPrototype(cx, global))"
|
||||||
else:
|
else:
|
||||||
getPrototypeProto = ("%s::GetProtoObject(cx, global, prototype_proto.handle_mut())" %
|
getPrototypeProto = ("%s::GetProtoObject(cx, global, prototype_proto.handle_mut())" %
|
||||||
toBindingNamespace(self.descriptor.getParentName()))
|
toBindingNamespace(parentName))
|
||||||
|
|
||||||
code = [CGGeneric("""\
|
code = [CGGeneric("""\
|
||||||
rooted!(in(cx) let mut prototype_proto = ptr::null_mut());
|
rooted!(in(cx) let mut prototype_proto = ptr::null_mut());
|
||||||
|
|
|
@ -387,6 +387,7 @@ pub mod serviceworkercontainer;
|
||||||
pub mod serviceworkerglobalscope;
|
pub mod serviceworkerglobalscope;
|
||||||
pub mod serviceworkerregistration;
|
pub mod serviceworkerregistration;
|
||||||
pub mod servohtmlparser;
|
pub mod servohtmlparser;
|
||||||
|
pub mod servoparser;
|
||||||
pub mod servoxmlparser;
|
pub mod servoxmlparser;
|
||||||
pub mod storage;
|
pub mod storage;
|
||||||
pub mod storageevent;
|
pub mod storageevent;
|
||||||
|
|
|
@ -14,13 +14,14 @@ use dom::bindings::codegen::Bindings::ServoHTMLParserBinding;
|
||||||
use dom::bindings::inheritance::Castable;
|
use dom::bindings::inheritance::Castable;
|
||||||
use dom::bindings::js::{JS, Root};
|
use dom::bindings::js::{JS, Root};
|
||||||
use dom::bindings::refcounted::Trusted;
|
use dom::bindings::refcounted::Trusted;
|
||||||
use dom::bindings::reflector::{Reflector, reflect_dom_object};
|
use dom::bindings::reflector::reflect_dom_object;
|
||||||
use dom::bindings::str::DOMString;
|
use dom::bindings::str::DOMString;
|
||||||
use dom::bindings::trace::JSTraceable;
|
use dom::bindings::trace::JSTraceable;
|
||||||
use dom::document::Document;
|
use dom::document::Document;
|
||||||
use dom::globalscope::GlobalScope;
|
use dom::globalscope::GlobalScope;
|
||||||
use dom::htmlimageelement::HTMLImageElement;
|
use dom::htmlimageelement::HTMLImageElement;
|
||||||
use dom::node::Node;
|
use dom::node::Node;
|
||||||
|
use dom::servoparser::ServoParser;
|
||||||
use dom::window::Window;
|
use dom::window::Window;
|
||||||
use encoding::all::UTF_8;
|
use encoding::all::UTF_8;
|
||||||
use encoding::types::{DecoderTrap, Encoding};
|
use encoding::types::{DecoderTrap, Encoding};
|
||||||
|
@ -212,7 +213,7 @@ impl PreInvoke for ParserContext {
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct ServoHTMLParser {
|
pub struct ServoHTMLParser {
|
||||||
reflector_: Reflector,
|
servoparser: ServoParser,
|
||||||
#[ignore_heap_size_of = "Defined in html5ever"]
|
#[ignore_heap_size_of = "Defined in html5ever"]
|
||||||
tokenizer: DOMRefCell<Tokenizer>,
|
tokenizer: DOMRefCell<Tokenizer>,
|
||||||
/// Input chunks received but not yet passed to the parser.
|
/// Input chunks received but not yet passed to the parser.
|
||||||
|
@ -269,7 +270,7 @@ impl ServoHTMLParser {
|
||||||
let tok = tokenizer::Tokenizer::new(tb, Default::default());
|
let tok = tokenizer::Tokenizer::new(tb, Default::default());
|
||||||
|
|
||||||
let parser = ServoHTMLParser {
|
let parser = ServoHTMLParser {
|
||||||
reflector_: Reflector::new(),
|
servoparser: ServoParser::new_inherited(),
|
||||||
tokenizer: DOMRefCell::new(tok),
|
tokenizer: DOMRefCell::new(tok),
|
||||||
pending_input: DOMRefCell::new(vec!()),
|
pending_input: DOMRefCell::new(vec!()),
|
||||||
document: JS::from_ref(document),
|
document: JS::from_ref(document),
|
||||||
|
@ -305,7 +306,7 @@ impl ServoHTMLParser {
|
||||||
let tok = tokenizer::Tokenizer::new(tb, tok_opts);
|
let tok = tokenizer::Tokenizer::new(tb, tok_opts);
|
||||||
|
|
||||||
let parser = ServoHTMLParser {
|
let parser = ServoHTMLParser {
|
||||||
reflector_: Reflector::new(),
|
servoparser: ServoParser::new_inherited(),
|
||||||
tokenizer: DOMRefCell::new(tok),
|
tokenizer: DOMRefCell::new(tok),
|
||||||
pending_input: DOMRefCell::new(vec!()),
|
pending_input: DOMRefCell::new(vec!()),
|
||||||
document: JS::from_ref(document),
|
document: JS::from_ref(document),
|
||||||
|
|
18
components/script/dom/servoparser.rs
Normal file
18
components/script/dom/servoparser.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/* 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 dom::bindings::reflector::Reflector;
|
||||||
|
|
||||||
|
#[dom_struct]
|
||||||
|
pub struct ServoParser {
|
||||||
|
reflector: Reflector,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ServoParser {
|
||||||
|
pub fn new_inherited() -> Self {
|
||||||
|
ServoParser {
|
||||||
|
reflector: Reflector::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,10 +5,11 @@
|
||||||
use dom::bindings::cell::DOMRefCell;
|
use dom::bindings::cell::DOMRefCell;
|
||||||
use dom::bindings::codegen::Bindings::ServoXMLParserBinding;
|
use dom::bindings::codegen::Bindings::ServoXMLParserBinding;
|
||||||
use dom::bindings::js::{JS, Root};
|
use dom::bindings::js::{JS, Root};
|
||||||
use dom::bindings::reflector::{Reflector, reflect_dom_object};
|
use dom::bindings::reflector::reflect_dom_object;
|
||||||
use dom::bindings::trace::JSTraceable;
|
use dom::bindings::trace::JSTraceable;
|
||||||
use dom::document::Document;
|
use dom::document::Document;
|
||||||
use dom::node::Node;
|
use dom::node::Node;
|
||||||
|
use dom::servoparser::ServoParser;
|
||||||
use dom::window::Window;
|
use dom::window::Window;
|
||||||
use js::jsapi::JSTracer;
|
use js::jsapi::JSTracer;
|
||||||
use msg::constellation_msg::PipelineId;
|
use msg::constellation_msg::PipelineId;
|
||||||
|
@ -31,7 +32,7 @@ pub struct Sink {
|
||||||
#[must_root]
|
#[must_root]
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct ServoXMLParser {
|
pub struct ServoXMLParser {
|
||||||
reflector_: Reflector,
|
servoparser: ServoParser,
|
||||||
#[ignore_heap_size_of = "Defined in xml5ever"]
|
#[ignore_heap_size_of = "Defined in xml5ever"]
|
||||||
tokenizer: DOMRefCell<Tokenizer>,
|
tokenizer: DOMRefCell<Tokenizer>,
|
||||||
/// Input chunks received but not yet passed to the parser.
|
/// Input chunks received but not yet passed to the parser.
|
||||||
|
@ -85,7 +86,7 @@ impl ServoXMLParser {
|
||||||
let tok = tokenizer::XmlTokenizer::new(tb, Default::default());
|
let tok = tokenizer::XmlTokenizer::new(tb, Default::default());
|
||||||
|
|
||||||
let parser = ServoXMLParser {
|
let parser = ServoXMLParser {
|
||||||
reflector_: Reflector::new(),
|
servoparser: ServoParser::new_inherited(),
|
||||||
tokenizer: DOMRefCell::new(tok),
|
tokenizer: DOMRefCell::new(tok),
|
||||||
pending_input: DOMRefCell::new(vec!()),
|
pending_input: DOMRefCell::new(vec!()),
|
||||||
document: JS::from_ref(document),
|
document: JS::from_ref(document),
|
||||||
|
|
|
@ -7,5 +7,5 @@
|
||||||
|
|
||||||
// FIXME: find a better way to hide this from content (#3688)
|
// FIXME: find a better way to hide this from content (#3688)
|
||||||
[NoInterfaceObject, Exposed=(Window,Worker)]
|
[NoInterfaceObject, Exposed=(Window,Worker)]
|
||||||
interface ServoHTMLParser {
|
interface ServoHTMLParser : ServoParser {
|
||||||
};
|
};
|
||||||
|
|
10
components/script/dom/webidls/ServoParser.webidl
Normal file
10
components/script/dom/webidls/ServoParser.webidl
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/* 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/. */
|
||||||
|
|
||||||
|
// This interface is entirely internal to Servo, and should not be accessible to
|
||||||
|
// web pages.
|
||||||
|
|
||||||
|
[Exposed=(Window,Worker),
|
||||||
|
Inline]
|
||||||
|
interface ServoParser {};
|
|
@ -6,6 +6,6 @@
|
||||||
// web pages.
|
// web pages.
|
||||||
|
|
||||||
[NoInterfaceObject, Exposed=(Window,Worker)]
|
[NoInterfaceObject, Exposed=(Window,Worker)]
|
||||||
interface ServoXMLParser {
|
interface ServoXMLParser : ServoParser {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue