public static bool duk_get_type(IntPtr ctx, int idx, out Type o) { if (DuktapeDLL.duk_is_string(ctx, idx)) { var name = DuktapeDLL.duk_get_string(ctx, idx); o = DuktapeAux.GetType(name); return(o != null); } else { //TODO: 增加一个隐藏属性记录jsobject对应类型 (constructor, object) if (DuktapeDLL.duk_get_prop_string(ctx, idx, DuktapeVM.OBJ_PROP_EXPORTED_REFID)) { var vm = DuktapeVM.GetVM(ctx); var refid = DuktapeDLL.duk_get_uint(ctx, -1); DuktapeDLL.duk_pop(ctx); o = vm.GetExportedType(refid); // Debug.Log($"get type from exported registry {o}:{refid}"); return(o != null); } else if (DuktapeDLL.duk_get_prop_string(ctx, idx, DuktapeVM.OBJ_PROP_NATIVE)) { var cache = DuktapeVM.GetObjectCache(ctx); var refid = DuktapeDLL.duk_get_int(ctx, -1); DuktapeDLL.duk_pop(ctx); cache.TryGetTypedObject(refid, out o); // Debug.Log($"get type from objectcache registry {o}:{refid}"); return(o != null); } } o = null; return(false); }
public static bool duk_get_type(IntPtr ctx, int idx, out Type o) { if (DuktapeDLL.duk_is_string(ctx, idx)) { var name = DuktapeDLL.duk_get_string(ctx, idx); o = DuktapeAux.GetType(name); return(o != null); } else { uint refid_t; //TODO: 增加一个隐藏属性记录jsobject对应类型 (constructor, object) if (DuktapeDLL.duk_unity_get_type_refid(ctx, idx, out refid_t)) { var vm = DuktapeVM.GetVM(ctx); o = vm.GetExportedType(refid_t); // Debug.Log($"get type from exported registry {o}:{refid}"); return(o != null); } else { int refid; if (DuktapeDLL.duk_unity_get_refid(ctx, idx, out refid)) { var cache = DuktapeVM.GetObjectCache(ctx); cache.TryGetTypedObject(refid, out o); // Debug.Log($"get type from objectcache registry {o}:{refid}"); return(o != null); } } } o = null; return(false); }
public static int duk_dostring(IntPtr ctx) { var source = DuktapeDLL.duk_get_string(ctx, 0); var filename = DuktapeDLL.duk_get_string(ctx, 1); DuktapeVM.GetVM(ctx).EvalSource(source, filename); return(0); }
public static bool duk_get_var(IntPtr ctx, int idx, out object o) { var jstype = DuktapeDLL.duk_get_type(ctx, idx); switch (jstype) { case duk_type_t.DUK_TYPE_BOOLEAN: /* ECMAScript boolean: 0 or 1 */ { o = DuktapeDLL.duk_get_boolean(ctx, idx); return(true); } case duk_type_t.DUK_TYPE_NUMBER: /* ECMAScript number: double */ { o = DuktapeDLL.duk_get_number(ctx, idx); return(true); } case duk_type_t.DUK_TYPE_STRING: /* ECMAScript string: CESU-8 / extended UTF-8 encoded */ { o = DuktapeDLL.duk_get_string(ctx, idx); return(true); } case duk_type_t.DUK_TYPE_OBJECT: /* ECMAScript object: includes objects, arrays, functions, threads */ { return(duk_get_cached_object(ctx, idx, out o)); } case duk_type_t.DUK_TYPE_BUFFER: /* fixed or dynamic, garbage collected byte buffer */ { uint length; var pointer = DuktapeDLL.duk_unity_get_buffer_data(ctx, idx, out length); var buffer = new byte[length]; o = buffer; Marshal.Copy(pointer, buffer, 0, (int)length); return(true); } case duk_type_t.DUK_TYPE_POINTER: /* raw void pointer */ case duk_type_t.DUK_TYPE_LIGHTFUNC: /* lightweight function pointer */ throw new NotImplementedException(); case duk_type_t.DUK_TYPE_NONE: /* no value, e.g. invalid index */ o = null; return(false); case duk_type_t.DUK_TYPE_UNDEFINED: /* ECMAScript undefined */ case duk_type_t.DUK_TYPE_NULL: /* ECMAScript null */ o = null; return(true); } o = null; return(false); }
public static int duk_dostring(IntPtr ctx) { // var source = DuktapeDLL.duk_get_string(ctx, 0); uint len; var buffer_ptr = DuktapeDLL.duk_unity_get_lstring(ctx, 0, out len); if (len > 0) { var bytes = new byte[len]; Marshal.Copy(buffer_ptr, bytes, 0, (int)len); var filename = DuktapeDLL.duk_get_string(ctx, 1); DuktapeVM.GetVM(ctx).EvalSource(filename, bytes); } return(0); }
public string GetStringValue(int index) { var ctx = _context.rawValue; this.Push(ctx); DuktapeDLL.duk_get_prop_index(ctx, -1, (uint)index); string res = null; if (DuktapeDLL.duk_is_string(ctx, -1)) { res = DuktapeDLL.duk_get_string(ctx, -1); } DuktapeDLL.duk_pop_2(ctx); return(res); }
public static bool duk_get_object(IntPtr ctx, int idx, out object o) { if (DuktapeDLL.duk_is_null_or_undefined(ctx, idx)) // or check for object? { o = null; return(true); } var jstype = DuktapeDLL.duk_get_type(ctx, idx); switch (jstype) { case duk_type_t.DUK_TYPE_STRING: o = DuktapeDLL.duk_get_string(ctx, idx); return(true); default: break; } return(duk_get_cached_object(ctx, idx, out o)); }
public static bool duk_get_primitive_array(IntPtr ctx, int idx, out string[] o) { if (DuktapeDLL.duk_is_array(ctx, idx)) { var length = DuktapeDLL.duk_unity_get_length(ctx, idx); var nidx = DuktapeDLL.duk_normalize_index(ctx, idx); o = new string[length]; for (var i = 0U; i < length; i++) { DuktapeDLL.duk_get_prop_index(ctx, idx, i); string e; e = DuktapeDLL.duk_get_string(ctx, -1); // duk_get_primitive(ctx, -1, out e); o[i] = e; DuktapeDLL.duk_pop(ctx); } return(true); } duk_get_classvalue <string[]>(ctx, idx, out o); return(true); }
public static bool duk_get_primitive(IntPtr ctx, int idx, out string o) { o = DuktapeDLL.duk_get_string(ctx, idx); // no check return(true); }