Ticket #491: parrot_debugger_cmdline_options_rewrite.patch

File parrot_debugger_cmdline_options_rewrite.patch, 3.3 KB (added by tuxdna, 6 years ago)

Patch for parsing command line argument using longopts

  • src/parrot_debugger.c

     
    117117static void PDB_printwelcome(void); 
    118118static void PDB_run_code(PARROT_INTERP, int argc, char *argv[]); 
    119119 
     120static struct longopt_opt_decl options[] = { 
     121    { 's', 's', OPTION_optional_FLAG, { "--script" } }, 
     122    { 'h', 'h', OPTION_optional_FLAG, { "--help" } }, 
     123}; 
     124 
     125 
    120126/* 
    121127 
     128=item C<static void help(void)> 
     129 
     130Print out the user help info. 
     131 
     132=cut 
     133 
     134*/ 
     135 
     136static void help(Parrot_Interp interp) 
     137{ 
     138    fprintf(stderr, "Usage: parrot_debugger programfile [program-options]\n"); 
     139    fprintf(stderr, "parrot_debugger - debugger for parrot\n"); 
     140    fprintf(stderr, "usage:\n"); 
     141    fprintf(stderr, "parrot_debugger [-s | --script FILE]\n"); 
     142    fprintf(stderr, "parrot_debugger [-h | --help ]\n"); 
     143    Parrot_exit(interp, 1); 
     144} 
     145 
     146/* 
     147 
    122148=item C<int main(int argc, char *argv[])> 
    123149 
    124150Reads the PASM or PBC file from argv[1], loads it, and then calls 
     
    131157int 
    132158main(int argc, char *argv[]) 
    133159{ 
    134     int nextarg; 
    135160    Parrot_Interp     interp; 
    136161    PDB_t *pdb; 
    137162    const char       *scriptname = NULL; 
    138163 
     164    int status; 
     165    struct longopt_opt_info opt = LONGOPT_OPT_INFO_INIT; 
     166 
    139167    Parrot_set_config_hash(); 
    140168 
    141169    interp = Parrot_new(NULL); 
     
    153181    Parrot_block_GC_mark(interp); 
    154182    Parrot_block_GC_sweep(interp); 
    155183 
    156     nextarg = 1; 
    157     if (argv[nextarg] && strcmp(argv[nextarg], "--script") == 0) 
    158     { 
    159         scriptname = argv [++nextarg]; 
    160         ++nextarg; 
     184    while ((status = longopt_get(interp, 
     185                    argc, argv, options, &opt)) > 0) { 
     186        switch (opt.opt_id) { 
     187            case 's': 
     188                scriptname = opt.opt_arg; 
     189                break; 
     190            case 'h': 
     191            default: 
     192                help(interp); 
     193                break; 
     194        } 
    161195    } 
     196    if (status == -1) { 
     197        help(interp); 
     198    } 
     199    argc -= opt.opt_index; 
     200    argv += opt.opt_index; 
    162201 
    163     if (argv[nextarg]) { 
    164         const char *filename = argv[nextarg]; 
     202 
     203    if(argc > 0) { 
     204        const char *filename = *argv; 
    165205        const char *ext      = strrchr(filename, '.'); 
     206        argc --; 
     207        argv ++; 
    166208 
    167209        if (ext && STREQ(ext, ".pbc")) { 
    168210            Parrot_PackFile pf = Parrot_pbc_read(interp, filename, 0); 
     
    232274        PDB_printwelcome(); 
    233275 
    234276    interp->run_core = PARROT_DEBUGGER_CORE; 
    235     PDB_run_code(interp, argc - nextarg, argv + nextarg); 
     277    PDB_run_code(interp, argc, argv); 
    236278 
    237279 
    238280    Parrot_exit(interp, 0); 
     
    303345The debugger now uses it's own interpreter. User code is run in 
    304346Interp* debugee. We have: 
    305347 
    306   debug_interp->pdb->debugee->debugger 
    307     ^                            | 
    308     |                            v 
    309     +------------- := -----------+ 
     348   interp->pdb->debugee->debugger 
     349    ^                      | 
     350    |                      v 
     351    +--------- := ---------+ 
    310352 
    311353Debug commands are mostly run inside the C<debugger>. User code 
    312354runs of course in the C<debugee>. 
  • CREDITS

     
    795795N: Saleem Ansari 
    796796E: tuxdna@gmail.com 
    797797D: Fixed typos in documentation 
     798D: use longopts in parrot debugger 
    798799 
    799800N: Sam Ruby 
    800801E: rubys@intertwingly.net