コード例 #1
0
        private static JSModuleDef _NewModuleDef(JSContext ctx, JSValue func_val, string module_name)
        {
            var mod  = new JSModuleDef(func_val.u.ptr);
            var meta = JSApi.JS_GetImportMeta(ctx, mod);

            JSApi.JS_DefinePropertyValueStr(ctx, meta, "url", JSApi.JS_NewString(ctx, $"file://{module_name}"), JSPropFlags.JS_PROP_C_W_E);
            JSApi.JS_DefinePropertyValueStr(ctx, meta, "main", JSApi.JS_NewBool(ctx, false), JSPropFlags.JS_PROP_C_W_E);
            JSApi.JS_FreeValue(ctx, meta);
            return(mod);
        }
コード例 #2
0
        public static unsafe JSModuleDef module_loader(JSContext ctx, string module_name, IntPtr opaque)
        {
            // Debug.LogFormat("module_loader: {0}", module_name);
            var mod        = JSModuleDef.Null;
            var runtime    = ScriptEngine.GetRuntime(ctx);
            var fileSystem = runtime._fileSystem;

            if (fileSystem.Exists(module_name))
            {
                var source      = fileSystem.ReadAllBytes(module_name);
                var input_bytes = TextUtils.GetNullTerminatedBytes(source);
                var fn_bytes    = TextUtils.GetNullTerminatedBytes(module_name);

                fixed(byte *input_ptr = input_bytes)
                fixed(byte *fn_ptr = fn_bytes)
                {
                    var input_len = (size_t)(input_bytes.Length - 1);
                    var func_val  = JSApi.JS_Eval(ctx, input_ptr, input_len, fn_ptr,
                                                  JSEvalFlags.JS_EVAL_TYPE_MODULE | JSEvalFlags.JS_EVAL_FLAG_COMPILE_ONLY);

                    if (JSApi.JS_IsException(func_val))
                    {
                        ctx.print_exception();
                        JSApi.JS_ThrowReferenceError(ctx, "module error");
                    }
                    else if (func_val.IsNullish())
                    {
                        JSApi.JS_ThrowReferenceError(ctx, "module is null");
                    }
                    else
                    {
                        mod = new JSModuleDef(func_val.u.ptr);
                        var meta = JSApi.JS_GetImportMeta(ctx, mod);
                        JSApi.JS_DefinePropertyValueStr(ctx, meta, "url",
                                                        JSApi.JS_NewString(ctx, $"file://{module_name}"), JSPropFlags.JS_PROP_C_W_E);
                        JSApi.JS_DefinePropertyValueStr(ctx, meta, "main",
                                                        JSApi.JS_NewBool(ctx, false), JSPropFlags.JS_PROP_C_W_E);
                        JSApi.JS_FreeValue(ctx, meta);
                    }
                }
            }
            else
            {
                JSApi.JS_ThrowReferenceError(ctx, "module load failed: file not found");
            }

            return(mod);
        }