int main(int argc, char **argv) { mrb_state *mrb = mrb_open(); int n = -1; struct _args args; struct mrb_parser_state *p; n = parse_args(mrb, argc, argv, &args); if (n < 0 || args.rfp == NULL) { cleanup(&args); usage(argv[0]); mrb_close(mrb); return n; } p = mrb_parse_file(mrb, args.rfp); if (!p || !p->tree || p->nerr) { cleanup(&args); mrb_close(mrb); return -1; } if (args.verbose) parser_dump(mrb, p->tree, 0); n = mrb_generate_code(mrb, p->tree); mrb_pool_close(p->pool); if (args.verbose) codedump_all(mrb, n); if (n < 0 || args.check_syntax) { cleanup(&args); mrb_close(mrb); return n; } if (args.initname) { if (args.dump_type == DUMP_TYPE_BIN) n = mrb_bdump_irep(mrb, n, args.wfp, args.initname); else n = mrb_cdump_irep(mrb, n, args.wfp, args.initname); } else { n = mrb_dump_irep(mrb, n, args.wfp); } cleanup(&args); mrb_close(mrb); return n; }
int main(int argc, char **argv) { mrb_state *mrb = mrb_open(); int n = -1; struct _args args; mrbc_context *c; mrb_value result; if (mrb == NULL) { fprintf(stderr, "Invalid mrb_state, exiting mrbc"); return EXIT_FAILURE; } n = parse_args(mrb, argc, argv, &args); if (n < 0 || args.rfp == NULL) { cleanup(mrb, &args); usage(argv[0]); return n; } c = mrbc_context_new(mrb); if (args.verbose) c->dump_result = 1; c->no_exec = 1; c->filename = args.filename; result = mrb_load_file_cxt(mrb, args.rfp, c); if (mrb_undef_p(result) || mrb_fixnum(result) < 0) { cleanup(mrb, &args); return EXIT_FAILURE; } if (args.check_syntax) { printf("Syntax OK\n"); cleanup(mrb, &args); return EXIT_SUCCESS; } if (args.initname) { if (args.dump_type == DUMP_TYPE_BIN) n = mrb_bdump_irep(mrb, n, args.wfp, args.initname); else n = mrb_cdump_irep(mrb, n, args.wfp, args.initname); } else { n = mrb_dump_irep(mrb, n, args.wfp); } cleanup(mrb, &args); return EXIT_SUCCESS; }