コード例 #1
0
        /// <summary>
        /// Executes a script
        /// </summary>
        /// <remarks>
        /// Requires an active script context.
        /// </remarks>
        /// <param name="script">The script to run</param>
        /// <param name="sourceContext">A cookie identifying the script that can be used
        /// by debuggable script contexts</param>
        /// <param name="sourceUrl">The location the script came from</param>
        /// <param name="parseAttributes">Attribute mask for parsing the script</param>
        /// <returns>The result of the script, if any</returns>
        public static JsValue RunScript(string script, JsSourceContext sourceContext, string sourceUrl,
                                        ref JsParseScriptAttributes parseAttributes)
        {
            JsValue scriptValue = JsValue.FromString(script);

            scriptValue.AddRef();

            JsValue sourceUrlValue = JsValue.FromString(sourceUrl);

            sourceUrlValue.AddRef();

            JsValue result;

            try
            {
                JsErrorCode errorCode = NativeMethods.JsRun(scriptValue, sourceContext, sourceUrlValue,
                                                            parseAttributes, out result);
                JsErrorHelpers.ThrowIfError(errorCode);
            }
            finally
            {
                scriptValue.Release();
                sourceUrlValue.Release();
            }

            return(result);
        }
コード例 #2
0
        public static unsafe JsValue RunScriptUtf16Buffer(
            ReadOnlySpan <char> scriptBuffer,
            JsSourceContext sourceContext,
            ReadOnlySpan <char> sourceUrl)
        {
            //not work, because fixed.. https://github.com/dotnet/corefx/issues/31651 PInvoke marshaling will pin the pointer for ref byte hash arguments that will pin the whole block as side-effect

            fixed(char *scriptBufferPtr = &MemoryMarshal.GetReference(scriptBuffer))
            fixed(char *sourceUrlPtr = &MemoryMarshal.GetReference(sourceUrl))
            {
                JsErrorHelpers.ThrowIfError(NativeMethods.JsCreateStringUtf16((IntPtr)scriptBufferPtr, (uint)scriptBuffer.Length, out var scriptValue));
                scriptValue.AddRef();

                JsErrorHelpers.ThrowIfError(NativeMethods.JsCreateStringUtf16((IntPtr)sourceUrlPtr, (uint)sourceUrl.Length, out var sourceUrlValue));
                sourceUrlValue.AddRef();

                JsValue result;

                try
                {
                    JsErrorHelpers.ThrowIfError(NativeMethods.JsRun(scriptValue, sourceContext, sourceUrlValue, JsParseScriptAttributes.None, out result));
                }
                finally
                {
                    scriptValue.Release();
                    sourceUrlValue.Release();
                }

                return(result);
            }
        }
コード例 #3
0
        /// <summary>
        /// Executes a script
        /// </summary>
        /// <remarks>
        /// Requires an active script context.
        /// </remarks>
        /// <param name="script">The script to run</param>
        /// <param name="sourceContext">The cookie identifying the script that can be used
        /// by script contexts that have debugging enabled</param>
        /// <param name="sourceName">The location the script came from</param>
        /// <returns>The result of the script, if any</returns>
        public static JsValue RunScript(string script, JsSourceContext sourceContext, string sourceName)
        {
            JsValue     result;
            JsErrorCode errorCode;

            if (Utils.IsWindows())
            {
                errorCode = NativeMethods.JsRunScript(script, sourceContext, sourceName, out result);
                JsErrorHelpers.ThrowIfError(errorCode);
            }
            else
            {
                JsValue scriptValue = JsValue.FromString(script);
                scriptValue.AddRef();

                JsValue sourceUrlValue = JsValue.FromString(sourceName);
                sourceUrlValue.AddRef();

                try
                {
                    errorCode = NativeMethods.JsRun(scriptValue, sourceContext, sourceUrlValue,
                                                    JsParseScriptAttributes.None, out result);
                    JsErrorHelpers.ThrowIfError(errorCode);
                }
                finally
                {
                    scriptValue.Release();
                    sourceUrlValue.Release();
                }
            }

            return(result);
        }
コード例 #4
0
        /// <summary>
        /// Runs a serialized script
        /// </summary>
        /// <remarks>
        /// <para>Requires an active script context.</para>
        /// <para>The runtime will detach the data from the buffer and hold on to it until all
        /// instances of any functions created from the buffer are garbage collected.</para>
        /// </remarks>
        /// <param name="script">The source code of the serialized script</param>
        /// <param name="buffer">The serialized script</param>
        /// <param name="scriptLoadCallback">Callback to load the source code of the serialized script</param>
        /// <param name="sourceContext">A cookie identifying the script that can be used
        /// by debuggable script contexts</param>
        /// <param name="sourceUrl">The location the script came from</param>
        /// <returns>The result of running the script, if any</returns>
        public static JsValue RunSerializedScript(string script, byte[] buffer,
                                                  JsSerializedLoadScriptCallback scriptLoadCallback, JsSourceContext sourceContext, string sourceUrl)
        {
            JsValue bufferValue = JsValue.CreateExternalArrayBuffer(buffer);

            bufferValue.AddRef();

            JsValue sourceUrlValue = JsValue.FromString(sourceUrl);

            sourceUrlValue.AddRef();

            JsValue result;

            try
            {
                JsErrorCode errorCode = NativeMethods.JsRunSerialized(bufferValue, scriptLoadCallback,
                                                                      sourceContext, sourceUrlValue, out result);
                JsErrorHelpers.ThrowIfError(errorCode);
            }
            finally
            {
                bufferValue.Release();
                sourceUrlValue.Release();
            }

            return(result);
        }
コード例 #5
0
 internal static extern JsErrorCode JsRunSerialized(JsValue buffer,
                                                    JsSerializedLoadScriptCallback scriptLoadCallback, JsSourceContext sourceContext,
                                                    JsValue sourceUrl, out JsValue result);
コード例 #6
0
 internal static extern JsErrorCode JsRun(JsValue script, JsSourceContext sourceContext, JsValue sourceUrl,
                                          JsParseScriptAttributes parseAttributes, out JsValue result);
コード例 #7
0
 internal static extern JsErrorCode JsRunSerializedScript(string script, byte[] buffer,
                                                          JsSourceContext sourceContext, string sourceUrl, out JsValue result);
コード例 #8
0
 internal static extern JsErrorCode JsRunSerializedScriptWithCallback(
     JsSerializedScriptLoadSourceCallback scriptLoadCallback,
     JsSerializedScriptUnloadCallback scriptUnloadCallback, byte[] buffer,
     JsSourceContext sourceContext, string sourceUrl, out JsValue result);
コード例 #9
0
 internal static extern JsErrorCode JsRunScript(string script, JsSourceContext sourceContext,
                                                string sourceUrl, out JsValue result);