mirror of
https://github.com/bellard/quickjs.git
synced 2025-11-15 18:22:15 +03:00
qjs: added --strict option - don't consider included files as modules - allow module and strict code with -e option
This commit is contained in:
29
qjs.c
29
qjs.c
@@ -75,7 +75,7 @@ static int eval_buf(JSContext *ctx, const void *buf, int buf_len,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int eval_file(JSContext *ctx, const char *filename, int module)
|
static int eval_file(JSContext *ctx, const char *filename, int module, int strict)
|
||||||
{
|
{
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
int ret, eval_flags;
|
int ret, eval_flags;
|
||||||
@@ -91,10 +91,13 @@ static int eval_file(JSContext *ctx, const char *filename, int module)
|
|||||||
module = (has_suffix(filename, ".mjs") ||
|
module = (has_suffix(filename, ".mjs") ||
|
||||||
JS_DetectModule((const char *)buf, buf_len));
|
JS_DetectModule((const char *)buf, buf_len));
|
||||||
}
|
}
|
||||||
if (module)
|
if (module) {
|
||||||
eval_flags = JS_EVAL_TYPE_MODULE;
|
eval_flags = JS_EVAL_TYPE_MODULE;
|
||||||
else
|
} else {
|
||||||
eval_flags = JS_EVAL_TYPE_GLOBAL;
|
eval_flags = JS_EVAL_TYPE_GLOBAL;
|
||||||
|
if (strict)
|
||||||
|
eval_flags |= JS_EVAL_FLAG_STRICT;
|
||||||
|
}
|
||||||
ret = eval_buf(ctx, buf, buf_len, filename, eval_flags);
|
ret = eval_buf(ctx, buf, buf_len, filename, eval_flags);
|
||||||
js_free(ctx, buf);
|
js_free(ctx, buf);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -294,6 +297,7 @@ void help(void)
|
|||||||
"-i --interactive go to interactive mode\n"
|
"-i --interactive go to interactive mode\n"
|
||||||
"-m --module load as ES6 module (default=autodetect)\n"
|
"-m --module load as ES6 module (default=autodetect)\n"
|
||||||
" --script load as ES6 script (default=autodetect)\n"
|
" --script load as ES6 script (default=autodetect)\n"
|
||||||
|
" --strict force strict mode\n"
|
||||||
"-I --include file include an additional file\n"
|
"-I --include file include an additional file\n"
|
||||||
" --std make 'std' and 'os' available to the loaded script\n"
|
" --std make 'std' and 'os' available to the loaded script\n"
|
||||||
"-T --trace trace memory allocation\n"
|
"-T --trace trace memory allocation\n"
|
||||||
@@ -319,6 +323,7 @@ int main(int argc, char **argv)
|
|||||||
int trace_memory = 0;
|
int trace_memory = 0;
|
||||||
int empty_run = 0;
|
int empty_run = 0;
|
||||||
int module = -1;
|
int module = -1;
|
||||||
|
int strict = 0;
|
||||||
int load_std = 0;
|
int load_std = 0;
|
||||||
int dump_unhandled_promise_rejection = 1;
|
int dump_unhandled_promise_rejection = 1;
|
||||||
size_t memory_limit = 0;
|
size_t memory_limit = 0;
|
||||||
@@ -388,6 +393,10 @@ int main(int argc, char **argv)
|
|||||||
module = 0;
|
module = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(longopt, "strict")) {
|
||||||
|
strict = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (opt == 'd' || !strcmp(longopt, "dump")) {
|
if (opt == 'd' || !strcmp(longopt, "dump")) {
|
||||||
dump_memory++;
|
dump_memory++;
|
||||||
continue;
|
continue;
|
||||||
@@ -485,12 +494,20 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < include_count; i++) {
|
for(i = 0; i < include_count; i++) {
|
||||||
if (eval_file(ctx, include_list[i], module))
|
if (eval_file(ctx, include_list[i], 0, strict))
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expr) {
|
if (expr) {
|
||||||
if (eval_buf(ctx, expr, strlen(expr), "<cmdline>", 0))
|
int eval_flags;
|
||||||
|
if (module > 0) {
|
||||||
|
eval_flags = JS_EVAL_TYPE_MODULE;
|
||||||
|
} else {
|
||||||
|
eval_flags = JS_EVAL_TYPE_GLOBAL;
|
||||||
|
if (strict)
|
||||||
|
eval_flags |= JS_EVAL_FLAG_STRICT;
|
||||||
|
}
|
||||||
|
if (eval_buf(ctx, expr, strlen(expr), "<cmdline>", eval_flags))
|
||||||
goto fail;
|
goto fail;
|
||||||
} else
|
} else
|
||||||
if (optind >= argc) {
|
if (optind >= argc) {
|
||||||
@@ -499,7 +516,7 @@ int main(int argc, char **argv)
|
|||||||
} else {
|
} else {
|
||||||
const char *filename;
|
const char *filename;
|
||||||
filename = argv[optind];
|
filename = argv[optind];
|
||||||
if (eval_file(ctx, filename, module))
|
if (eval_file(ctx, filename, module, strict))
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
if (interactive) {
|
if (interactive) {
|
||||||
|
|||||||
Reference in New Issue
Block a user