diff options
author | Chad Austin <chad@imvu.com> | 2013-01-21 18:54:47 -0800 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:23:18 +0300 |
commit | 2b173301eface816c6f09f3e3d706571575a398a (patch) | |
tree | ccaba39ee2c98000e3ba42bc5ae3e759a36984d2 | |
parent | e5a50ea590133df344bde9e1fda0f98afa755378 (diff) |
Simplify emscripten::val a bit, reducing it closer to its primitive operations.
-rwxr-xr-x | src/embind/emval.js | 14 | ||||
-rw-r--r-- | system/include/emscripten/val.h | 19 |
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 { |