aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/namespace.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2016-09-02 17:26:54 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2016-09-08 11:01:34 +0200
commit0b689a8a312a2da095b2a8cfcc1bf827aac5d4ac (patch)
treef77886e125fcffc5c6c20df0ca6cb78eee5ff8e6 /components/script/dom/bindings/namespace.rs
parent8ba0cf30a169ec62efbdd8e8d8ae530f441f42f1 (diff)
downloadservo-0b689a8a312a2da095b2a8cfcc1bf827aac5d4ac.tar.gz
servo-0b689a8a312a2da095b2a8cfcc1bf827aac5d4ac.zip
Implement WebIDL namespaces
Diffstat (limited to 'components/script/dom/bindings/namespace.rs')
-rw-r--r--components/script/dom/bindings/namespace.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/components/script/dom/bindings/namespace.rs b/components/script/dom/bindings/namespace.rs
new file mode 100644
index 00000000000..38055dea180
--- /dev/null
+++ b/components/script/dom/bindings/namespace.rs
@@ -0,0 +1,42 @@
+/* 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/. */
+
+//! Machinery to initialise namespace objects.
+
+use dom::bindings::guard::Guard;
+use dom::bindings::interface::{create_object, define_on_global_object};
+use js::jsapi::{HandleObject, JSClass, JSContext, JSFunctionSpec, MutableHandleObject};
+use libc;
+use std::ptr;
+
+/// The class of a namespace object.
+#[derive(Copy, Clone)]
+pub struct NamespaceObjectClass(JSClass);
+
+unsafe impl Sync for NamespaceObjectClass {}
+
+impl NamespaceObjectClass {
+ /// Create a new `NamespaceObjectClass` structure.
+ pub const unsafe fn new(name: &'static [u8]) -> Self {
+ NamespaceObjectClass(JSClass {
+ name: name as *const _ as *const libc::c_char,
+ flags: 0,
+ cOps: ptr::null_mut(),
+ reserved: [ptr::null_mut(); 3],
+ })
+ }
+}
+
+/// Create a new namespace object.
+pub unsafe fn create_namespace_object(
+ cx: *mut JSContext,
+ global: HandleObject,
+ proto: HandleObject,
+ class: &'static NamespaceObjectClass,
+ methods: &[Guard<&'static [JSFunctionSpec]>],
+ name: &[u8],
+ rval: MutableHandleObject) {
+ create_object(cx, proto, &class.0, methods, &[], &[], rval);
+ define_on_global_object(cx, global, name, rval.handle());
+}