mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
@@ -56,6 +56,7 @@ void mrb_irep_free(mrb_state*, struct mrb_irep*);
|
||||
void mrb_irep_incref(mrb_state*, struct mrb_irep*);
|
||||
void mrb_irep_decref(mrb_state*, struct mrb_irep*);
|
||||
void mrb_irep_cutref(mrb_state*, struct mrb_irep*);
|
||||
void mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep);
|
||||
|
||||
MRB_END_DECL
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ struct mrbc_args {
|
||||
const char *initname;
|
||||
mrb_bool check_syntax : 1;
|
||||
mrb_bool verbose : 1;
|
||||
mrb_bool remove_lv : 1;
|
||||
unsigned int flags : 4;
|
||||
};
|
||||
|
||||
@@ -33,6 +34,7 @@ usage(const char *name)
|
||||
"-B<symbol> binary <symbol> output in C language format",
|
||||
"-e generate little endian iseq data",
|
||||
"-E generate big endian iseq data",
|
||||
"--remove-lv remove local variables",
|
||||
"--verbose run at verbose mode",
|
||||
"--version print the version",
|
||||
"--copyright print the copyright",
|
||||
@@ -142,6 +144,10 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct mrbc_args *args)
|
||||
mrb_show_copyright(mrb);
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
else if (strcmp(argv[i] + 2, "remove-lv") == 0) {
|
||||
args->remove_lv = TRUE;
|
||||
break;
|
||||
}
|
||||
return -1;
|
||||
default:
|
||||
return i;
|
||||
@@ -232,6 +238,9 @@ dump_file(mrb_state *mrb, FILE *wfp, const char *outfile, struct RProc *proc, st
|
||||
int n = MRB_DUMP_OK;
|
||||
mrb_irep *irep = proc->body.irep;
|
||||
|
||||
if (args->remove_lv) {
|
||||
mrb_irep_remove_lv(mrb, irep);
|
||||
}
|
||||
if (args->initname) {
|
||||
n = mrb_dump_irep_cfunc(mrb, irep, args->flags, wfp, args->initname);
|
||||
if (n == MRB_DUMP_INVALID_ARGUMENT) {
|
||||
|
||||
@@ -12,22 +12,6 @@ struct strip_args {
|
||||
mrb_bool lvar;
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
irep_remove_lv(mrb_state *mrb, mrb_irep *irep)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (irep->lv) {
|
||||
mrb_free(mrb, irep->lv);
|
||||
irep->lv = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < irep->rlen; ++i) {
|
||||
irep_remove_lv(mrb, irep->reps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_usage(const char *f)
|
||||
{
|
||||
@@ -99,7 +83,7 @@ strip(mrb_state *mrb, struct strip_args *args)
|
||||
|
||||
/* clear lv if --lvar is enabled */
|
||||
if (args->lvar) {
|
||||
irep_remove_lv(mrb, irep);
|
||||
mrb_irep_remove_lv(mrb, irep);
|
||||
}
|
||||
|
||||
wfile = fopen(filename, "wb");
|
||||
|
||||
@@ -3092,3 +3092,18 @@ mrb_generate_code(mrb_state *mrb, parser_state *p)
|
||||
{
|
||||
return generate_code(mrb, p, VAL);
|
||||
}
|
||||
|
||||
void
|
||||
mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (irep->lv) {
|
||||
mrb_free(mrb, irep->lv);
|
||||
irep->lv = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < irep->rlen; ++i) {
|
||||
mrb_irep_remove_lv(mrb, irep->reps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user