void parser_dump(mrb_state *mrb, LambdaCommonNode *ln, int offset) { args_dump(ln->args(), offset, mrb); dump_prefix(offset+1); printf("body:\n"); parser_dump(mrb, ln->body(), offset+2); }
void parser_dump(mrb_state *mrb, DefCommonNode *dn, int offset) { printf("%s\n", mrb_sym2name(mrb, dn->name())); { const tLocals &n2(dn->ve_locals()); if(!n2.empty() && (n2.front() || n2.size()>1)) { dump_prefix(offset+1); printf("local variables:\n"); dump_prefix(offset+2); for(auto iter=n2.begin(); iter!=n2.end(); ++iter) { if ( iter != n2.begin() ) printf(", "); printf("%s", mrb_sym2name(mrb, *iter)); } printf("\n"); } } args_dump(dn->args(), offset, mrb); parser_dump(mrb, dn->body(), offset+1); }
int main(int argc, char *argv[]) { static const struct option long_opts[] = { /* commands */ {"inject", required_argument, NULL, c_INJECT}, {"remove", required_argument, NULL, c_REMOVE}, {"hexdump", required_argument, NULL, c_HEXDUMP}, /* options */ {"output", required_argument, NULL, o_OUTPUT}, /* flags */ {"force", no_argument, NULL, f_FORCE}, {"p8", no_argument, NULL, f_P8}, {"verbose", no_argument, NULL, f_VERBOSE}, {"help", no_argument, NULL, f_HELP}, {0, 0, 0, 0} }; static const char *short_opts = "I:R:H:o:fpvh"; int rc = EXIT_FAILURE; if (argc == 1) usage(args.short_name, false), exit(rc); int opt = 0, idx = 0; while ((opt = getopt_long(argc, argv, short_opts, long_opts, &idx)) != -1) if (process_argument(&args, opt, optarg) < 0) goto error; /* getopt_long doesn't know what to do with orphans, */ /* so we'll scoop them up here, and deal with them later */ while (optind < argc) if (process_option(&args, argv[optind++]) < 0) goto error; if (args.verbose == f_VERBOSE) args_dump(&args); if (validate_args(&args) < 0) goto error; if (process_args(&args) < 0) goto error; rc = EXIT_SUCCESS; if (false) { err_t *err; error: err = err_get(); assert(err != NULL); fprintf(stderr, "%s: %s : %s(%d) : (code=%d) %.*s\n", program_invocation_short_name, err_type_name(err), err_file(err), err_line(err), err_code(err), err_size(err), (char *)err_data(err)); } return rc; }