mirror of
https://github.com/DoneJS-Runtime/quickjs-done-nextgen.git
synced 2025-01-09 17:43:15 +00:00
Add "compile_module" and "eval_module" flags to std.evalScript
This is preparation for standalone binaries support, we need the ability to compile source as a module and then evaluate it.
This commit is contained in:
parent
517e9e274e
commit
e77cfb67b8
1 changed files with 22 additions and 1 deletions
|
@ -865,7 +865,9 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val,
|
||||||
JSValue options_obj;
|
JSValue options_obj;
|
||||||
BOOL backtrace_barrier = FALSE;
|
BOOL backtrace_barrier = FALSE;
|
||||||
BOOL eval_function = FALSE;
|
BOOL eval_function = FALSE;
|
||||||
|
BOOL eval_module = FALSE;
|
||||||
BOOL compile_only = FALSE;
|
BOOL compile_only = FALSE;
|
||||||
|
BOOL compile_module = FALSE;
|
||||||
BOOL is_async = FALSE;
|
BOOL is_async = FALSE;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
|
@ -877,14 +879,33 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val,
|
||||||
if (get_bool_option(ctx, &eval_function, options_obj,
|
if (get_bool_option(ctx, &eval_function, options_obj,
|
||||||
"eval_function"))
|
"eval_function"))
|
||||||
return JS_EXCEPTION;
|
return JS_EXCEPTION;
|
||||||
|
if (get_bool_option(ctx, &eval_module, options_obj,
|
||||||
|
"eval_module"))
|
||||||
|
return JS_EXCEPTION;
|
||||||
if (get_bool_option(ctx, &compile_only, options_obj,
|
if (get_bool_option(ctx, &compile_only, options_obj,
|
||||||
"compile_only"))
|
"compile_only"))
|
||||||
return JS_EXCEPTION;
|
return JS_EXCEPTION;
|
||||||
|
if (get_bool_option(ctx, &compile_module, options_obj,
|
||||||
|
"compile_module"))
|
||||||
|
return JS_EXCEPTION;
|
||||||
if (get_bool_option(ctx, &is_async, options_obj,
|
if (get_bool_option(ctx, &is_async, options_obj,
|
||||||
"async"))
|
"async"))
|
||||||
return JS_EXCEPTION;
|
return JS_EXCEPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (eval_module) {
|
||||||
|
obj = argv[0];
|
||||||
|
if (JS_VALUE_GET_TAG(obj) != JS_TAG_MODULE)
|
||||||
|
return JS_ThrowTypeError(ctx, "not a module");
|
||||||
|
|
||||||
|
if (JS_ResolveModule(ctx, obj) < 0)
|
||||||
|
return JS_EXCEPTION;
|
||||||
|
|
||||||
|
js_module_set_import_meta(ctx, obj, FALSE, FALSE);
|
||||||
|
|
||||||
|
return JS_EvalFunction(ctx, obj);
|
||||||
|
}
|
||||||
|
|
||||||
if (!eval_function) {
|
if (!eval_function) {
|
||||||
str = JS_ToCStringLen(ctx, &len, argv[0]);
|
str = JS_ToCStringLen(ctx, &len, argv[0]);
|
||||||
if (!str)
|
if (!str)
|
||||||
|
@ -894,7 +915,7 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val,
|
||||||
/* install the interrupt handler */
|
/* install the interrupt handler */
|
||||||
JS_SetInterruptHandler(JS_GetRuntime(ctx), interrupt_handler, NULL);
|
JS_SetInterruptHandler(JS_GetRuntime(ctx), interrupt_handler, NULL);
|
||||||
}
|
}
|
||||||
flags = JS_EVAL_TYPE_GLOBAL;
|
flags = compile_module ? JS_EVAL_TYPE_MODULE : JS_EVAL_TYPE_GLOBAL;
|
||||||
if (backtrace_barrier)
|
if (backtrace_barrier)
|
||||||
flags |= JS_EVAL_FLAG_BACKTRACE_BARRIER;
|
flags |= JS_EVAL_FLAG_BACKTRACE_BARRIER;
|
||||||
if (compile_only)
|
if (compile_only)
|
||||||
|
|
Loading…
Reference in a new issue