Ejemplo n.º 1
0
Archivo: mrbc.c Proyecto: NARKOZ/mruby
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) {
    fputs("Invalid mrb_state, exiting mrbc\n", stderr);
    return EXIT_FAILURE;
  }

  n = parse_args(mrb, argc, argv, &args);
  if (n == EXIT_FAILURE || 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) {
    puts("Syntax OK");
    cleanup(mrb, &args);
    return EXIT_SUCCESS;
  }
  if (args.initname) {
    n = mrb_dump_irep_cfunc(mrb, n, args.debug_info, args.wfp, args.initname);
    if (n == MRB_DUMP_INVALID_ARGUMENT) {
      printf("%s: Invalid C language symbol name\n", args.initname);
      return EXIT_FAILURE;
    }
  }
  else {
    n = mrb_dump_irep_binary(mrb, n, args.debug_info, args.wfp);
  }

  cleanup(mrb, &args);
  return EXIT_SUCCESS;
}
Ejemplo n.º 2
0
static int
dump_file(mrb_state *mrb, FILE *wfp, const char *outfile, struct mrbc_args *args)
{
  int n = MRB_DUMP_OK;

  if (args->initname) {
    n = mrb_dump_irep_cfunc(mrb, 0, args->debug_info, wfp, args->initname);
    if (n == MRB_DUMP_INVALID_ARGUMENT) {
      fprintf(stderr, "%s: invalid C language symbol name\n", args->initname);
    }
  }
  else {
    n = mrb_dump_irep_binary(mrb, 0, args->debug_info, wfp);
  }
  if (n != MRB_DUMP_OK) {
    fprintf(stderr, "%s: error in mrb dump (%s) %d\n", args->prog, outfile, n);
  }
  return n;
}