add -e flag
This commit is contained in:
@@ -455,6 +455,7 @@ static void print_usage(const char *prog)
|
||||
printf(" --native Use AOT native code instead of bytecode\n");
|
||||
printf(" --heap <size> Initial heap size (e.g. 256MB, 1GB)\n");
|
||||
printf(" --test [heap_size] Run C test suite\n");
|
||||
printf(" -e <code> Evaluate code string as a program\n");
|
||||
printf(" -h, --help Show this help message\n");
|
||||
printf("\nEnvironment:\n");
|
||||
printf(" CELL_CORE Core path (default: <shop>/packages/core)\n");
|
||||
@@ -490,6 +491,7 @@ int cell_init(int argc, char **argv)
|
||||
size_t heap_size = 1024 * 1024; /* 1MB default */
|
||||
const char *shop_override = NULL;
|
||||
const char *core_override = NULL;
|
||||
const char *eval_script = NULL;
|
||||
|
||||
// Parse flags (order-independent)
|
||||
while (arg_start < argc && argv[arg_start][0] == '-') {
|
||||
@@ -536,12 +538,19 @@ int cell_init(int argc, char **argv)
|
||||
} else if (strcmp(argv[arg_start], "--no-warn") == 0) {
|
||||
warn_mode = 0;
|
||||
arg_start++;
|
||||
} else if (strcmp(argv[arg_start], "-e") == 0) {
|
||||
if (arg_start + 1 >= argc) {
|
||||
printf("ERROR: -e requires a code string argument\n");
|
||||
return 1;
|
||||
}
|
||||
eval_script = argv[arg_start + 1];
|
||||
arg_start += 2;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (arg_start >= argc) {
|
||||
if (arg_start >= argc && !eval_script) {
|
||||
print_usage(argv[0]);
|
||||
return 1;
|
||||
}
|
||||
@@ -675,7 +684,7 @@ int cell_init(int argc, char **argv)
|
||||
JS_SetPropertyStr(ctx, env_ref.val, "actorsym", JS_DupValue(ctx, cli_rt->actor_sym_ref.val));
|
||||
tmp = js_core_json_use(ctx);
|
||||
JS_SetPropertyStr(ctx, env_ref.val, "json", tmp);
|
||||
if (native_mode || !warn_mode) {
|
||||
if (native_mode || !warn_mode || eval_script) {
|
||||
JSGCRef init_ref;
|
||||
JS_AddGCRef(ctx, &init_ref);
|
||||
init_ref.val = JS_NewObject(ctx);
|
||||
@@ -683,6 +692,10 @@ int cell_init(int argc, char **argv)
|
||||
JS_SetPropertyStr(ctx, init_ref.val, "native_mode", JS_NewBool(ctx, 1));
|
||||
if (!warn_mode)
|
||||
JS_SetPropertyStr(ctx, init_ref.val, "no_warn", JS_NewBool(ctx, 1));
|
||||
if (eval_script) {
|
||||
JSValue es = JS_NewString(ctx, eval_script);
|
||||
JS_SetPropertyStr(ctx, init_ref.val, "eval_script", es);
|
||||
}
|
||||
JS_SetPropertyStr(ctx, env_ref.val, "init", init_ref.val);
|
||||
JS_DeleteGCRef(ctx, &init_ref);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user