diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/mirb/mirb.c | 41 | ||||
| -rw-r--r-- | tools/mrbc/mrbc.c | 10 | ||||
| -rw-r--r-- | tools/mruby/mruby.c | 37 |
3 files changed, 48 insertions, 40 deletions
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c index e20de629d..4151b9b13 100644 --- a/tools/mirb/mirb.c +++ b/tools/mirb/mirb.c @@ -6,6 +6,7 @@ ** immediately. It's a REPL... */ +#include <stdlib.h> #include <string.h> #include <mruby.h> @@ -38,7 +39,7 @@ is_code_block_open(struct mrb_parser_state *parser) int code_block_open = FALSE; /* check for unterminated string */ - if (parser->sterm) return TRUE; + if (parser->lex_strterm) return TRUE; /* check for heredoc */ if (parser->heredoc_starts_nextline) return TRUE; @@ -132,7 +133,8 @@ is_code_block_open(struct mrb_parser_state *parser) } /* Print a short remark for the user */ -void print_hint(void) +static void +print_hint(void) { printf("mirb - Embeddable Interactive Ruby Shell\n"); printf("\nThis is a very early version, please test and report errors.\n"); @@ -240,28 +242,31 @@ main(void) } else { if (0 < parser->nerr) { - /* syntax error */ - printf("line %d: %s\n", parser->error_buffer[0].lineno, parser->error_buffer[0].message); + /* syntax error */ + printf("line %d: %s\n", parser->error_buffer[0].lineno, parser->error_buffer[0].message); } else { - /* generate bytecode */ - n = mrb_generate_code(mrb, parser); + /* generate bytecode */ + n = mrb_generate_code(mrb, parser); - /* evaluate the bytecode */ - result = mrb_run(mrb, + /* evaluate the bytecode */ + result = mrb_run(mrb, /* pass a proc for evaulation */ mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); - /* did an exception occur? */ - if (mrb->exc) { - p(mrb, mrb_obj_value(mrb->exc)); - mrb->exc = 0; - } - else { - /* no */ - printf(" => "); - p(mrb, result); - } + /* did an exception occur? */ + if (mrb->exc) { + p(mrb, mrb_obj_value(mrb->exc)); + mrb->exc = 0; + } + else { + /* no */ + printf(" => "); + if (!mrb_respond_to(mrb,result,mrb_intern(mrb,"inspect"))){ + result = mrb_any_to_s(mrb,result); + } + p(mrb, result); + } } ruby_code[0] = '\0'; last_code_line[0] = '\0'; diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c index b68bf0547..6535d5636 100644 --- a/tools/mrbc/mrbc.c +++ b/tools/mrbc/mrbc.c @@ -19,8 +19,8 @@ struct _args { char *filename; char *initname; char *ext; - int check_syntax : 1; - int verbose : 1; + mrb_bool check_syntax : 1; + mrb_bool verbose : 1; }; static void @@ -83,6 +83,12 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) switch ((*argv)[1]) { case 'o': + if (outfile) { + printf("%s: An output file is already specified. (%s)\n", + *origargv, outfile); + result = -5; + goto exit; + } outfile = get_outfilename((*argv) + 2, ""); break; case 'B': diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index 9d6182238..1caf32b6a 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -6,6 +6,7 @@ #include "mruby/dump.h" #include "mruby/variable.h" #include <stdio.h> +#include <stdlib.h> #include <string.h> #ifndef ENABLE_STDIO @@ -26,10 +27,10 @@ void mrb_show_copyright(mrb_state *); struct _args { FILE *rfp; char* cmdline; - int fname : 1; - int mrbfile : 1; - int check_syntax : 1; - int verbose : 1; + mrb_bool fname : 1; + mrb_bool mrbfile : 1; + mrb_bool check_syntax : 1; + mrb_bool verbose : 1; int argc; char** argv; }; @@ -52,7 +53,7 @@ usage(const char *name) printf("Usage: %s [switches] programfile\n", name); while(*p) - printf(" %s\n", *p++); + printf(" %s\n", *p++); } static int @@ -125,7 +126,6 @@ append_cmdline: exit(0); } else return -3; - return 0; default: return -4; } @@ -189,14 +189,14 @@ showcallinfo(mrb_state *mrb) if (irep->filename != NULL) filename = irep->filename; if (irep->lines != NULL) { - mrb_code *pc; + mrb_code *pc; - if (i+1 <= ciidx) { - pc = mrb->cibase[i+1].pc; - } - else { - pc = (mrb_code*)mrb_voidp(mrb_obj_iv_get(mrb, mrb->exc, mrb_intern(mrb, "lastpc"))); - } + if (i+1 <= ciidx) { + pc = mrb->cibase[i+1].pc; + } + else { + pc = (mrb_code*)mrb_voidp(mrb_obj_iv_get(mrb, mrb->exc, mrb_intern(mrb, "lastpc"))); + } if (irep->iseq <= pc && pc < irep->iseq + irep->ilen) { line = irep->lines[pc - irep->iseq - 1]; } @@ -211,19 +211,16 @@ showcallinfo(mrb_state *mrb) method = mrb_sym2name(mrb, ci->mid); if (method) { const char *cn = mrb_class_name(mrb, ci->proc->target_class); - + if (cn) { - printf("\t[%d] %s:%d:in %s%s%s\n", - i, filename, line, cn, sep, method); + printf("\t[%d] %s:%d:in %s%s%s\n", i, filename, line, cn, sep, method); } else { - printf("\t[%d] %s:%d:in %s\n", - i, filename, line, method); + printf("\t[%d] %s:%d:in %s\n", i, filename, line, method); } } else { - printf("\t[%d] %s:%d\n", - i, filename, line); + printf("\t[%d] %s:%d\n", i, filename, line); } } } |
