Exemplo n.º 1
0
        private static void HandleInvokeFailure(IntPtr cx, IntPtr jsObject, string name)
        {
            var exception = SpiderMonkey.JS_GetPendingException(cx);

            if (exception != IntPtr.Zero)
            {
                var exceptionJsVal = JsVal.FromPtr(exception);

                string st = string.Empty;
                try
                {
                    st = GetStackTrace(cx, jsObject, exceptionJsVal);
                }
                catch
                {
                    // ignored
                    // we failed to get stack trace info, but still want to continue reporting exception.
                }
                var msg = exceptionJsVal.ToString();
                msg += st;
                throw new GeckoException($"Calling function '{name}' failed: '{msg}'");
            }

            throw new GeckoException($"Failed to call function '{name}'");
        }
Exemplo n.º 2
0
        /// <summary>
        /// JS_CallFunctionName without args
        /// </summary>
        /// <param name="cx"></param>
        /// <param name="jsObject"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static JsVal JS_CallFunctionName(IntPtr cx, IntPtr jsObject, string name)
        {
            bool  result;
            JsVal value;
            int   parameterCount = 0;
            var   mutableHandle  = new MutableHandleValue();

            if (!JS_CallFunctionName(cx, ref jsObject, name, ref parameterCount, ref mutableHandle))
            {
                HandleInvokeFailure(cx, jsObject, name);
            }

            value = JsVal.FromPtr(mutableHandle.Handle);

            return(value);
        }
Exemplo n.º 3
0
        public static JsVal JS_CallFunctionValue(IntPtr cx, IntPtr jsObject, JsVal func)
        {
            var  mutableHandle = new MutableHandleValue();
            bool success;

            using (var args = new HandleValueArray(0, new JsVal[0]))
                success = JS_CallFunctionValue(cx, jsObject, ref func, args.Ptr, ref mutableHandle);
            if (success)
            {
                return(JsVal.FromPtr(mutableHandle.Handle));
            }

            HandleInvokeFailure(cx, jsObject, func.ToString());

            throw new Exception("HandleInvokeFailure always throws execption, so this line is never reached.");
        }
Exemplo n.º 4
0
        public static bool JS_ExecuteScript(IntPtr cx, string script, out JsVal jsval)
        {
            jsval = default(JsVal);
            var scriptHandle = new MutableHandle();

            if (!JS_CompileUCScript(cx, script, script.Length, GetCompileOptions(cx), ref scriptHandle))
            {
                throw new GeckoException("Failed to compile script.");
            }
            var val    = new MutableHandleValue();
            var handle = scriptHandle.Handle;

            if (!JS_ExecuteScript(cx, ref handle, ref val))
            {
                return(false);
            }

            jsval = JsVal.FromPtr(val.Handle);
            return(true);
        }