diff options
author | Josh Matthews <josh@joshmatthews.net> | 2013-05-08 13:35:07 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2013-05-08 14:17:50 -0400 |
commit | af2db0cf682e65abe5e6e6a380f9ea51a13cc16f (patch) | |
tree | 8a995a6555b975f0ae839d9e174978fb7a0dfbc4 /src/servo/dom/bindings/utils.rs | |
parent | 597f7bdc6d547fbaf413e7352fe1b89ebe519b1c (diff) | |
download | servo-af2db0cf682e65abe5e6e6a380f9ea51a13cc16f.tar.gz servo-af2db0cf682e65abe5e6e6a380f9ea51a13cc16f.zip |
Add codegen support for dictionaries, and implement Event bindings as a side-effect. Add a stub EventTarget to allow the build to complete.
Diffstat (limited to 'src/servo/dom/bindings/utils.rs')
-rw-r--r-- | src/servo/dom/bindings/utils.rs | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/servo/dom/bindings/utils.rs b/src/servo/dom/bindings/utils.rs index dd925ee3df8..0fe45f79e04 100644 --- a/src/servo/dom/bindings/utils.rs +++ b/src/servo/dom/bindings/utils.rs @@ -6,7 +6,8 @@ use js; use js::rust::Compartment; use js::{JSCLASS_HAS_RESERVED_SLOTS, JSPROP_ENUMERATE, JSVAL_NULL, JS_THIS_OBJECT, JSFUN_CONSTRUCTOR, JS_CALLEE, JSPROP_READONLY, - JSPROP_PERMANENT, JSID_VOID, JSPROP_NATIVE_ACCESSORS, JSPROP_GETTER, JSPROP_SETTER}; + JSPROP_PERMANENT, JSID_VOID, JSPROP_NATIVE_ACCESSORS, JSPROP_GETTER, + JSPROP_SETTER, JSVAL_VOID, JSVAL_TRUE, JSVAL_FALSE}; use js::jsapi::{JSContext, JSVal, JSObject, JSBool, jsid, JSClass, JSNative, JSFunctionSpec, JSPropertySpec, JSVal, JSPropertyDescriptor}; use js::jsapi::bindgen::{JS_ValueToString, @@ -327,9 +328,18 @@ pub struct JSNativeHolder { propertyHooks: *NativePropertyHooks } +pub enum ConstantVal { + IntVal(i32), + UintVal(u32), + DoubleVal(f64), + BoolVal(bool), + NullVal, + VoidVal +} + pub struct ConstantSpec { name: *libc::c_char, - value: JSVal + value: ConstantVal } pub struct DOMClass { @@ -360,6 +370,8 @@ pub mod prototypes { ClientRectList, DOMParser, HTMLCollection, + Event, + EventTarget, _ID_Count } } @@ -492,8 +504,17 @@ fn DefineConstants(cx: *JSContext, obj: *JSObject, constants: *ConstantSpec) -> if spec.name.is_null() { return true; } + let jsval = match spec.value { + NullVal => JSVAL_NULL, + IntVal(i) => RUST_INT_TO_JSVAL(i), + UintVal(u) => RUST_UINT_TO_JSVAL(u), + DoubleVal(d) => RUST_DOUBLE_TO_JSVAL(d), + BoolVal(b) if b => JSVAL_TRUE, + BoolVal(_) => JSVAL_FALSE, + VoidVal => JSVAL_VOID + }; if JS_DefineProperty(cx, obj, spec.name, - spec.value, ptr::null(), + jsval, ptr::null(), ptr::null(), JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) == 0 { @@ -543,7 +564,7 @@ pub extern fn ThrowingConstructor(_cx: *JSContext, _argc: uint, _vp: *JSVal) -> } pub fn initialize_global(global: *JSObject) { - let protoArray = @mut ([0 as *JSObject, ..4]); //XXXjdm prototypes::_ID_COUNT + let protoArray = @mut ([0 as *JSObject, ..6]); //XXXjdm prototypes::_ID_COUNT unsafe { //XXXjdm we should be storing the box pointer instead of the inner let box = squirrel_away(protoArray); |