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;
int ret, eval_flags;
module = (has_suffix(filename, ".mjs") ||
JS_DetectModule((const char *)buf, buf_len));
}
- if (module)
+ if (module) {
eval_flags = JS_EVAL_TYPE_MODULE;
- else
+ } else {
eval_flags = JS_EVAL_TYPE_GLOBAL;
+ if (strict)
+ eval_flags |= JS_EVAL_FLAG_STRICT;
+ }
ret = eval_buf(ctx, buf, buf_len, filename, eval_flags);
js_free(ctx, buf);
return ret;
"-i --interactive go to interactive mode\n"
"-m --module load as ES6 module (default=autodetect)\n"
" --script load as ES6 script (default=autodetect)\n"
+ " --strict force strict mode\n"
"-I --include file include an additional file\n"
" --std make 'std' and 'os' available to the loaded script\n"
"-T --trace trace memory allocation\n"
int trace_memory = 0;
int empty_run = 0;
int module = -1;
+ int strict = 0;
int load_std = 0;
int dump_unhandled_promise_rejection = 1;
size_t memory_limit = 0;
module = 0;
continue;
}
+ if (!strcmp(longopt, "strict")) {
+ strict = 1;
+ continue;
+ }
if (opt == 'd' || !strcmp(longopt, "dump")) {
dump_memory++;
continue;
}
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;
}
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;
} else
if (optind >= argc) {
} else {
const char *filename;
filename = argv[optind];
- if (eval_file(ctx, filename, module))
+ if (eval_file(ctx, filename, module, strict))
goto fail;
}
if (interactive) {