aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Austin <chad@imvu.com>2013-01-21 18:54:47 -0800
committerJukka Jylänki <jujjyl@gmail.com>2013-04-12 14:23:18 +0300
commit2b173301eface816c6f09f3e3d706571575a398a (patch)
treeccaba39ee2c98000e3ba42bc5ae3e759a36984d2
parente5a50ea590133df344bde9e1fda0f98afa755378 (diff)
Simplify emscripten::val a bit, reducing it closer to its primitive operations.
-rwxr-xr-xsrc/embind/emval.js14
-rw-r--r--system/include/emscripten/val.h19
2 files changed, 24 insertions, 9 deletions
diff --git a/src/embind/emval.js b/src/embind/emval.js
index 1c4955c5..8ecef7f0 100755
--- a/src/embind/emval.js
+++ b/src/embind/emval.js
@@ -49,7 +49,11 @@ function __emval_new_object() {
return __emval_register({});
}
-function __emval_new_null() {
+function __emval_undefined() {
+ return __emval_register(undefined);
+}
+
+function __emval_null() {
return __emval_register(null);
}
@@ -63,9 +67,11 @@ function __emval_take_value(type, v) {
return __emval_register(v);
}
-function __emval_has_property(handle, k) {
- k = Pointer_stringify(k);
- return _emval_handle_array[handle].value.hasOwnProperty(k);
+var global = Function('return this')();
+
+function __emval_get_global(name) {
+ name = Pointer_stringify(name);
+ return __emval_register(global[name]);
}
function __emval_get_property(handle, k) {
diff --git a/system/include/emscripten/val.h b/system/include/emscripten/val.h
index 65f52266..b0f55ec6 100644
--- a/system/include/emscripten/val.h
+++ b/system/include/emscripten/val.h
@@ -14,11 +14,12 @@ namespace emscripten {
EM_VAL _emval_new_array();
EM_VAL _emval_new_object();
- EM_VAL _emval_new_null();
+ EM_VAL _emval_undefined();
+ EM_VAL _emval_null();
EM_VAL _emval_new_cstring(const char*);
void _emval_take_value(TYPEID type/*, ...*/);
- bool _emval_has_property(EM_VAL object, const char* key);
+ EM_VAL _emval_get_global(const char* name);
EM_VAL _emval_get_property(EM_VAL object, const char* key);
EM_VAL _emval_get_property_by_long(EM_VAL object, long key);
EM_VAL _emval_get_property_by_unsigned_long(EM_VAL object, unsigned long key);
@@ -56,14 +57,22 @@ namespace emscripten {
return val(internal::_emval_new_object());
}
+ static val undefined() {
+ return val(internal::_emval_undefined());
+ }
+
static val null() {
- return val(internal::_emval_new_null());
+ return val(internal::_emval_null());
}
static val take_ownership(internal::EM_VAL e) {
return val(e);
}
+ static val global(const char* name) {
+ return val(internal::_emval_get_global(name));
+ }
+
template<typename T>
explicit val(const T& value) {
typedef internal::BindingType<T> BT;
@@ -94,8 +103,8 @@ namespace emscripten {
return *this;
}
- bool exist(const char* key) const {
- return internal::_emval_has_property(handle, key);
+ bool hasOwnProperty(const char* key) const {
+ return val::global("Object").get("prototype").get("hasOwnProperty").call("call", *this, val(key)).as<bool>();
}
val get(const char* key) const {