summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/mirb/mirb.c41
-rw-r--r--tools/mrbc/mrbc.c10
-rw-r--r--tools/mruby/mruby.c37
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);
}
}
}