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);
        }
Exemple #5
0
        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);
        }
Exemple #6
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));
        }
Exemple #8
0
 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);
 }
Exemple #9
0
 public static bool duk_get_primitive(IntPtr ctx, int idx, out string o)
 {
     o = DuktapeDLL.duk_get_string(ctx, idx); // no check
     return(true);
 }