private static int _GetTimerFunction(IntPtr ctx, out DuktapeFunction fn) { if (!DuktapeDLL.duk_is_function(ctx, 0)) { fn = null; return(0); } if (!DuktapeDLL.duk_is_number(ctx, 1)) { fn = null; return(1); } var top_index = DuktapeDLL.duk_get_top_index(ctx); // Debug.Log($"_GetTimerFunction {top} ?? {DuktapeDLL.duk_get_top(ctx)}"); DuktapeValue[] argv = null; if (top_index > 1) { argv = new DuktapeValue[top_index - 1]; for (var i = 2; i <= top_index; i++) { DuktapeDLL.duk_dup(ctx, i); var argPtr = DuktapeDLL.duk_get_heapptr(ctx, -1); argv[i - 2] = new DuktapeValue(ctx, DuktapeDLL.duk_unity_ref(ctx), argPtr); } } DuktapeDLL.duk_dup(ctx, 0); var fnPtr = DuktapeDLL.duk_get_heapptr(ctx, -1); fn = new DuktapeFunction(ctx, DuktapeDLL.duk_unity_ref(ctx), fnPtr, argv); return(-1); }
public static int Array_Create(IntPtr ctx) { Type type; int size; if (duk_get_type(ctx, 0, out type)) { if (type != null) { if (DuktapeDLL.duk_is_number(ctx, 1) && duk_get_primitive(ctx, 1, out size)) { var o = Array.CreateInstance(type, size); duk_push_classvalue(ctx, o); return(1); } else { return(DuktapeDLL.duk_generic_error(ctx, "invalid size")); } } else { return(DuktapeDLL.duk_generic_error(ctx, "invalid type")); } } return(DuktapeDLL.duk_generic_error(ctx, "invalid args")); }
public static int ClearTimer(IntPtr ctx) { if (DuktapeDLL.duk_is_number(ctx, 0)) { var id = DuktapeDLL.duk_get_uint(ctx, 0); DuktapeDLL.duk_push_boolean(ctx, DuktapeRunner.Clear(id)); return(1); } return(0); }
public double GetDoubleValue(int index) { var ctx = _context.rawValue; this.Push(ctx); DuktapeDLL.duk_get_prop_index(ctx, -1, (uint)index); var res = 0.0; if (DuktapeDLL.duk_is_number(ctx, -1)) { res = DuktapeDLL.duk_get_number(ctx, -1); } DuktapeDLL.duk_pop_2(ctx); return(res); }
public float GetFloatValue(int index) { var ctx = _context.rawValue; this.Push(ctx); DuktapeDLL.duk_get_prop_index(ctx, -1, (uint)index); var res = 0f; if (DuktapeDLL.duk_is_number(ctx, -1)) { res = (float)DuktapeDLL.duk_get_number(ctx, -1); } DuktapeDLL.duk_pop_2(ctx); return(res); }