aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/dom/bindings/utils.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2013-05-08 13:35:07 -0400
committerJosh Matthews <josh@joshmatthews.net>2013-05-08 14:17:50 -0400
commitaf2db0cf682e65abe5e6e6a380f9ea51a13cc16f (patch)
tree8a995a6555b975f0ae839d9e174978fb7a0dfbc4 /src/servo/dom/bindings/utils.rs
parent597f7bdc6d547fbaf413e7352fe1b89ebe519b1c (diff)
downloadservo-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.rs29
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);