summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby/compile.h (renamed from src/compile.h)26
-rw-r--r--include/mruby/data.h7
-rw-r--r--src/codegen.c2
-rw-r--r--src/gc.h8
-rw-r--r--src/init.c3
-rw-r--r--src/parse.y98
-rw-r--r--src/print.c13
-rw-r--r--src/version.c81
-rw-r--r--src/version.h38
-rw-r--r--test/Makefile16
-rw-r--r--test/driver.c27
-rw-r--r--test/init_mrbtest.c4
-rw-r--r--tools/mirb/mirb.c11
-rw-r--r--tools/mrbc/mrbc.c16
-rw-r--r--tools/mruby/mruby.c31
15 files changed, 145 insertions, 236 deletions
diff --git a/src/compile.h b/include/mruby/compile.h
index ba1dfd2ee..2a47b569a 100644
--- a/src/compile.h
+++ b/include/mruby/compile.h
@@ -4,6 +4,13 @@
** See Copyright Notice in mruby.h
*/
+#ifndef MRUBY_COMPILE_H
+#define MRUBY_COMPILE_H 1
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
#include "mruby.h"
#include <stdio.h>
#include <setjmp.h>
@@ -77,15 +84,24 @@ struct mrb_parser_state {
jmp_buf jmp;
};
-struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,const char*,int);
+/* parser structure */
+struct mrb_parser_state* mrb_parser_new(mrb_state*);
+const char *mrb_parser_filename(struct mrb_parser_state*, const char*);
+int mrb_parser_lineno(struct mrb_parser_state*, int);
+void mrb_parser_parse(struct mrb_parser_state*);
+
+/* utility functions */
+struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*);
struct mrb_parser_state* mrb_parse_string(mrb_state*,const char*);
struct mrb_parser_state* mrb_parse_nstring(mrb_state*,const char*,size_t);
-struct mrb_parser_state* mrb_parse_nstring_ext(mrb_state*,const char*,size_t);
int mrb_generate_code(mrb_state*, mrb_ast_node*);
-int mrb_compile_file(mrb_state*,FILE*,const char*,int);
+int mrb_compile_file(mrb_state*,FILE*);
int mrb_compile_string(mrb_state*,char*);
int mrb_compile_nstring(mrb_state*,char*,size_t);
-const char *mrb_parser_filename(struct mrb_parser_state *p, const char *s);
-int mrb_parser_lineno(struct mrb_parser_state *p, int n);
+#if defined(__cplusplus)
+} /* extern "C" { */
+#endif
+
+#endif /* MRUBY_COMPILE_H */
diff --git a/include/mruby/data.h b/include/mruby/data.h
index d4ce82e40..4c136555c 100644
--- a/include/mruby/data.h
+++ b/include/mruby/data.h
@@ -4,14 +4,13 @@
** See Copyright Notice in mruby.h
*/
-#ifndef RUBY_DATA_H
-#define RUBY_DATA_H 1
+#ifndef MRUBY_DATA_H
+#define MRUBY_DATA_H 1
#if defined(__cplusplus)
extern "C" {
#endif
-
struct mrb_data_type {
const char *struct_name;
void (*dfree)(mrb_state *mrb, void*);
@@ -48,4 +47,4 @@ void *mrb_check_datatype(mrb_state *mrb, mrb_value, const struct mrb_data_type*)
} /* extern "C" { */
#endif
-#endif /* RUBY_DATA_H */
+#endif /* MRUBY_DATA_H */
diff --git a/src/codegen.c b/src/codegen.c
index 0abd9e67e..e039e72dc 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -9,7 +9,7 @@
#include "mruby.h"
#include "mruby/irep.h"
-#include "compile.h"
+#include "mruby/compile.h"
#include "mruby/proc.h"
#include "opcode.h"
#include "mruby/string.h"
diff --git a/src/gc.h b/src/gc.h
index 61f8ce96a..0a4bc1c51 100644
--- a/src/gc.h
+++ b/src/gc.h
@@ -7,6 +7,10 @@
#ifndef MRUBY_GC_H
#define MRUBY_GC_H
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
typedef struct {
union {
struct free_obj {
@@ -41,4 +45,8 @@ void mrb_gc_mark_ht(mrb_state*, struct RHash*);
size_t mrb_gc_mark_ht_size(mrb_state*, struct RHash*);
void mrb_gc_free_ht(mrb_state*, struct RHash*);
+#if defined(__cplusplus)
+} /* extern "C" { */
+#endif
+
#endif /* MRUBY_GC_H */
diff --git a/src/init.c b/src/init.c
index 0d4b9721d..ea5591278 100644
--- a/src/init.c
+++ b/src/init.c
@@ -28,8 +28,6 @@ void mrb_init_file(mrb_state *);
void mrb_init_thread(mrb_state *);
void mrb_init_struct(mrb_state *);
void mrb_init_gc(mrb_state *);
-void Init_var_tables(mrb_state *mrb);
-void Init_version(mrb_state *mrb);
void mrb_init_print(mrb_state *mrb);
void mrb_init_mrblib(mrb_state *mrb);
void mrb_init_math(mrb_state *mrb);
@@ -48,7 +46,6 @@ mrb_init_core(mrb_state *mrb)
mrb_init_symbols(mrb);
mrb_init_proc(mrb);
mrb_init_string(mrb);
- Init_version(mrb); /* after init_string */
mrb_init_array(mrb);
mrb_init_hash(mrb);
mrb_init_numeric(mrb);
diff --git a/src/parse.y b/src/parse.y
index fb3526034..41363b49e 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -14,7 +14,7 @@
#include "mruby.h"
#include "st.h"
-#include "compile.h"
+#include "mruby/compile.h"
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
@@ -967,12 +967,11 @@ var_reference(parser_state *p, node *lhs)
%%
program : {
p->lstate = EXPR_BEG;
- local_nest(p);
+ if (!p->locals) p->locals = cons(0,0);
}
top_compstmt
{
p->tree = new_scope(p, $2);
- local_unnest(p);
}
;
@@ -2955,9 +2954,9 @@ yywarn(parser_state *p, const char *s)
n = strlen(s);
c = parser_palloc(p, n + 1);
memcpy(c, s, n + 1);
- p->error_buffer[p->nwarn].message = c;
- p->error_buffer[p->nwarn].lineno = p->lineno;
- p->error_buffer[p->nwarn].column = p->column;
+ p->warn_buffer[p->nwarn].message = c;
+ p->warn_buffer[p->nwarn].lineno = p->lineno;
+ p->warn_buffer[p->nwarn].column = p->column;
}
p->nwarn++;
}
@@ -4618,8 +4617,8 @@ yylex(void *lval, parser_state *p)
return t;
}
-static void
-start_parser(parser_state *p)
+void
+mrb_parser_parse(parser_state *p)
{
node *tree;
@@ -4631,6 +4630,9 @@ start_parser(parser_state *p)
}
yyparse(p);
tree = p->tree;
+ if ((int)tree->car == NODE_SCOPE) {
+ p->locals = cons(tree->cdr->car, 0);
+ }
if (!tree) {
if (p->begin_tree) {
tree = p->begin_tree;
@@ -4645,8 +4647,8 @@ start_parser(parser_state *p)
}
}
-static parser_state*
-parser_new(mrb_state *mrb)
+parser_state*
+mrb_parser_new(mrb_state *mrb)
{
mrb_pool *pool;
parser_state *p;
@@ -4661,6 +4663,9 @@ parser_new(mrb_state *mrb)
p->pool = pool;
p->in_def = p->in_single = 0;
+ p->s = p->send = NULL;
+ p->f = NULL;
+
p->cmd_start = TRUE;
p->in_def = p->in_single = FALSE;
@@ -4674,50 +4679,51 @@ parser_new(mrb_state *mrb)
return p;
}
-parser_state*
-mrb_parse_file(mrb_state *mrb, FILE *f, const char *fn, int line)
+const char*
+mrb_parser_filename(parser_state *p, const char *s)
{
- parser_state *p;
-
- p = parser_new(mrb);
- if (!p) return 0;
- p->s = p->send = NULL;
- p->f = f;
- if (line) p->lineno = line;
- if (fn) mrb_parser_filename(p, fn);
+ if (s) {
+ p->filename = strdup(s);
+ }
+ return p->filename;
+}
- start_parser(p);
- return p;
+int
+mrb_parser_lineno(struct mrb_parser_state *p, int n)
+{
+ if (n <= 0) {
+ return p->lineno;
+ }
+ p->column = 0;
+ p->lineno = n;
+ return n;
}
parser_state*
-mrb_parse_nstring(mrb_state *mrb, const char *s, size_t len)
+mrb_parse_file(mrb_state *mrb, FILE *f)
{
parser_state *p;
-
- p = parser_new(mrb);
+
+ p = mrb_parser_new(mrb);
if (!p) return 0;
- p->s = s;
- p->send = s + len;
- p->f = NULL;
+ p->s = p->send = NULL;
+ p->f = f;
- start_parser(p);
+ mrb_parser_parse(p);
return p;
}
parser_state*
-mrb_parse_nstring_ext(mrb_state *mrb, const char *s, size_t len)
+mrb_parse_nstring(mrb_state *mrb, const char *s, size_t len)
{
parser_state *p;
- p = parser_new(mrb);
+ p = mrb_parser_new(mrb);
if (!p) return 0;
p->s = s;
p->send = s + len;
- p->f = NULL;
- p->capture_errors = 1;
- start_parser(p);
+ mrb_parser_parse(p);
return p;
}
@@ -4732,12 +4738,12 @@ mrb_parse_string(mrb_state *mrb, const char *s)
void parser_dump(mrb_state *mrb, node *tree, int offset);
int
-mrb_compile_file(mrb_state * mrb, FILE *f,const char *fn, int line)
+mrb_compile_file(mrb_state * mrb, FILE *f)
{
parser_state *p;
int n;
- p = mrb_parse_file(mrb, f, fn, line);
+ p = mrb_parse_file(mrb, f);
if (!p) return -1;
if (!p->tree) return -1;
if (p->nerr) return -1;
@@ -4750,26 +4756,6 @@ mrb_compile_file(mrb_state * mrb, FILE *f,const char *fn, int line)
return n;
}
-const char*
-mrb_parser_filename(parser_state *p, const char *s)
-{
- if (s) {
- p->filename = strdup(s);
- }
- return p->filename;
-}
-
-int
-mrb_parser_lineno(struct mrb_parser_state *p, int n)
-{
- if (n <= 0) {
- return p->lineno;
- }
- p->column = 0;
- p->lineno = n;
- return n;
-}
-
int
mrb_compile_nstring(mrb_state *mrb, char *s, size_t len)
{
diff --git a/src/print.c b/src/print.c
index 35fde4896..f9034470b 100644
--- a/src/print.c
+++ b/src/print.c
@@ -73,3 +73,16 @@ mrb_init_print(mrb_state *mrb)
mrb_define_method(mrb, krn, "__printstr__", mrb_printstr, ARGS_REQ(1));
mrb_define_method(mrb, krn, "p", p_m, ARGS_ANY()); /* 15.3.1.3.34 */
}
+
+
+void
+mrb_show_version(mrb_state *mrb)
+{
+ printf("mruby - Embeddable Ruby Copyright (c) 2010-2012 mruby developers\n");
+}
+
+void
+mrb_show_copyright(mrb_state *mrb)
+{
+ printf("mruby - Copyright (c) 2010-2012 mruby developers\n");
+}
diff --git a/src/version.c b/src/version.c
deleted file mode 100644
index 142c2239f..000000000
--- a/src/version.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-** version.c - version information
-**
-** See Copyright Notice in mruby.h
-*/
-
-#include "mruby.h"
-#include "version.h"
-#include <stdio.h>
-#include "mruby/string.h"
-#include "mruby/variable.h"
-
-#define PRINT(type) puts(ruby_##type)
-//#define MKSTR(type) mrb_obj_freeze(mrb_str_new(ruby_##type, sizeof(ruby_##type)-1))
-#define MKSTR(type) mrb_str_new(mrb, ruby_##type, sizeof(ruby_##type)-1)
-
-const char ruby_version[] = RUBY_VERSION;
-const char ruby_release_date[] = RUBY_RELEASE_DATE;
-const char ruby_platform[] = RUBY_PLATFORM;
-const int ruby_patchlevel = RUBY_PATCHLEVEL;
-const char ruby_engine[] = RUBY_ENGINE;
-
-void
-Init_version(mrb_state *mrb)
-{
- char description[128];
- char copyright[128];
- mrb_value v = MKSTR(version);
- mrb_value d = MKSTR(release_date);
- mrb_value p = MKSTR(platform);
- mrb_value e = MKSTR(engine);
- mrb_value tmp;
-
- mrb_define_global_const(mrb, "RUBY_VERSION", v);
- mrb_define_global_const(mrb, "RUBY_RELEASE_DATE", d);
- mrb_define_global_const(mrb, "RUBY_PLATFORM", p);
- mrb_define_global_const(mrb, "RUBY_PATCHLEVEL", mrb_fixnum_value(RUBY_PATCHLEVEL));
- mrb_define_global_const(mrb, "RUBY_ENGINE", e);
-
- snprintf(description, sizeof(description), "ruby %s (%s %s %d) [%s]",
- RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_RELEASE_STR,
- RUBY_RELEASE_NUM, RUBY_PLATFORM);
- //tmp = mrb_obj_freeze(mrb_str_new2(description));
- tmp = mrb_str_new2(mrb, description);
- mrb_define_global_const(mrb, "RUBY_DESCRIPTION", tmp);
-
- snprintf(copyright, sizeof(copyright), "ruby - Copyright (C) %d-%d %s",
- RUBY_BIRTH_YEAR, RUBY_RELEASE_YEAR, RUBY_AUTHOR);
- //tmp = mrb_obj_freeze(mrb_str_new2(copyright));
- tmp = mrb_str_new2(mrb, copyright);
- mrb_define_global_const(mrb, "RUBY_COPYRIGHT", tmp);
-
- /* obsolete constants */
- mrb_define_global_const(mrb, "VERSION", v);
- mrb_define_global_const(mrb, "RELEASE_DATE", d);
- mrb_define_global_const(mrb, "PLATFORM", p);
-}
-
-void
-ruby_show_version(mrb_state *mrb)
-{
- mrb_value v = mrb_const_get(mrb, mrb_obj_value(mrb->object_class), mrb_intern(mrb, "RUBY_DESCRIPTION"));
-
- if (mrb_type(v) != MRB_TT_STRING)
- return;
-
- puts(RSTRING_PTR(v));
- fflush(stdout);
-}
-
-void
-ruby_show_copyright(mrb_state *mrb)
-{
- mrb_value v = mrb_const_get(mrb, mrb_obj_value(mrb->object_class), mrb_intern(mrb, "RUBY_COPYRIGHT"));
-
- if (mrb_type(v) != MRB_TT_STRING)
- return;
-
- puts(RSTRING_PTR(v));
- exit(0);
-}
diff --git a/src/version.h b/src/version.h
deleted file mode 100644
index fed532886..000000000
--- a/src/version.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-** version.h - version information
-**
-** See Copyright Notice in mruby.h
-*/
-
-#define RUBY_VERSION "1.8.7"
-#define RUBY_RELEASE_DATE "2010-08-16"
-#define RUBY_VERSION_CODE 187
-#define RUBY_RELEASE_CODE 20100816
-#define RUBY_PATCHLEVEL 302
-
-#define RUBY_VERSION_MAJOR 1
-#define RUBY_VERSION_MINOR 8
-#define RUBY_VERSION_TEENY 7
-#define RUBY_RELEASE_YEAR 2010
-#define RUBY_RELEASE_MONTH 8
-#define RUBY_RELEASE_DAY 16
-
-#ifdef RUBY_EXTERN
-RUBY_EXTERN const char ruby_version[];
-RUBY_EXTERN const char ruby_release_date[];
-RUBY_EXTERN const char ruby_platform[];
-RUBY_EXTERN const int ruby_patchlevel;
-RUBY_EXTERN const char *ruby_description;
-RUBY_EXTERN const char *ruby_copyright;
-#endif
-
-#define RUBY_AUTHOR "Yukihiro Matsumoto"
-#define RUBY_BIRTH_YEAR 1993
-#define RUBY_BIRTH_MONTH 2
-#define RUBY_BIRTH_DAY 24
-
-#define RUBY_RELEASE_STR "patchlevel"
-#define RUBY_RELEASE_NUM RUBY_PATCHLEVEL
-
-#define RUBY_PLATFORM "i386-mingw32"
-#define RUBY_ENGINE "ruby"
diff --git a/test/Makefile b/test/Makefile
index 8ee12dbf1..cb6ac3a5e 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -57,21 +57,16 @@ else
CFLAGS = -O3
endif
ALL_CFLAGS = -Wall -Werror-implicit-function-declaration $(CFLAGS)
-ifeq ($(OS),Windows_NT)
- MAKE_FLAGS = CC=$(CC) LL=$(LL) ALL_CFLAGS="$(ALL_CFLAGS)"
-else
- MAKE_FLAGS = CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'
-endif
##############################
# generic build targets, rules
.PHONY : test
-all : $(LIBR) $(EXE)
+all : $(EXE)
./$(EXE)
# executable constructed using linker from object files
-$(EXE) : $(LIBR) $(OBJS)
+$(EXE) : $(OBJS)
$(LL) -o $@ $(CFLAGS) $(OBJS) $(LIBR) $(LIBS)
-include $(OBJS:.o=.d)
@@ -80,17 +75,10 @@ $(EXE) : $(LIBR) $(OBJS)
$(OBJS) : %.o : %.c
$(CC) $(ALL_CFLAGS) -MMD $(INCLUDES) -c $< -o $@
-# C library compile
-$(LIBR) :
- @$(MAKE) -C $(BASEDIR) $(MAKE_FLAGS)
-
# Compile C source from merged mruby source
$(CLIB) : $(RLIB) $(MRBC) $(INIT)
$(MRBC) -Bmrbtest_irep -o$(DLIB) $(RLIB); cat $(INIT) $(DLIB) > $@
-$(MRBC) : ../src/opcode.h ../src/codegen.c ../src/parse.y
- $(MAKE) -C ../tools/mrbc $(MAKE_FLAGS)
-
# merge mruby sources
$(RLIB) : $(ASSLIB) $(MRBS)
cat $? > $@
diff --git a/test/driver.c b/test/driver.c
index 90fa6a6d0..afc93b10b 100644
--- a/test/driver.c
+++ b/test/driver.c
@@ -10,7 +10,7 @@
#include <mruby.h>
#include <mruby/proc.h>
#include <mruby/data.h>
-#include <compile.h>
+#include <mruby/compile.h>
void
mrb_init_mrbtest(mrb_state *);
@@ -27,29 +27,30 @@ int
main(void)
{
struct mrb_parser_state *parser;
- mrb_state *mrb_interpreter;
- mrb_value mrb_return_value;
+ mrb_state *mrb;
+ mrb_value return_value;
int byte_code;
+ const char *prog = "report()";
print_hint();
/* new interpreter instance */
- mrb_interpreter = mrb_open();
- mrb_init_mrbtest(mrb_interpreter);
- parser = mrb_parse_nstring_ext(mrb_interpreter, "report()", strlen("report()"));
+ mrb = mrb_open();
+ mrb_init_mrbtest(mrb);
+ parser = mrb_parse_nstring(mrb, prog, strlen(prog));
/* generate bytecode */
- byte_code = mrb_generate_code(mrb_interpreter, parser->tree);
+ byte_code = mrb_generate_code(mrb, parser->tree);
/* evaluate the bytecode */
- mrb_return_value = mrb_run(mrb_interpreter,
+ return_value = mrb_run(mrb,
/* pass a proc for evaulation */
- mrb_proc_new(mrb_interpreter, mrb_interpreter->irep[byte_code]),
- mrb_top_self(mrb_interpreter));
+ mrb_proc_new(mrb, mrb->irep[byte_code]),
+ mrb_top_self(mrb));
/* did an exception occur? */
- if (mrb_interpreter->exc) {
- mrb_p(mrb_interpreter, mrb_return_value);
- mrb_interpreter->exc = 0;
+ if (mrb->exc) {
+ mrb_p(mrb, return_value);
+ mrb->exc = 0;
}
else {
/* no */
diff --git a/test/init_mrbtest.c b/test/init_mrbtest.c
index 5d977da34..b9f09dd2f 100644
--- a/test/init_mrbtest.c
+++ b/test/init_mrbtest.c
@@ -12,5 +12,9 @@ mrb_init_mrbtest(mrb_state *mrb)
int n = mrb_read_irep(mrb, mrbtest_irep);
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
+ if (mrb->exc) {
+ mrb_p(mrb, mrb_obj_value(mrb->exc));
+ exit(0);
+ }
}
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c
index 11bdcfcf8..df7c29df6 100644
--- a/tools/mirb/mirb.c
+++ b/tools/mirb/mirb.c
@@ -11,7 +11,7 @@
#include <mruby.h>
#include <mruby/proc.h>
#include <mruby/data.h>
-#include <compile.h>
+#include <mruby/compile.h>
/* Guess if the user might want to enter more
* or if he wants an evaluation of his code now */
@@ -161,8 +161,10 @@ main(void)
print_hint();
- /* new interpreter instance */
+ /* new interpreter instance */
mrb_interpreter = mrb_open();
+ /* new parser instance */
+ parser = mrb_parser_new(mrb_interpreter);
memset(ruby_code, 0, sizeof(*ruby_code));
memset(last_code_line, 0, sizeof(*last_code_line));
@@ -205,7 +207,10 @@ main(void)
}
/* parse code */
- parser = mrb_parse_nstring_ext(mrb_interpreter, ruby_code, strlen(ruby_code));
+ parser->s = ruby_code;
+ parser->send = ruby_code + strlen(ruby_code);
+ parser->capture_errors = 1;
+ mrb_parser_parse(parser);
code_block_open = is_code_block_open(parser);
if (code_block_open) {
diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c
index 1f74defdf..dd210bfa9 100644
--- a/tools/mrbc/mrbc.c
+++ b/tools/mrbc/mrbc.c
@@ -2,15 +2,15 @@
#include "mruby/proc.h"
#include "mruby/dump.h"
#include "mruby/cdump.h"
-#include "compile.h"
+#include "mruby/compile.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define RITEBIN_EXT ".mrb"
#define C_EXT ".c"
-void ruby_show_version(mrb_state *);
-void ruby_show_copyright(mrb_state *);
+void mrb_show_version(mrb_state *);
+void mrb_show_copyright(mrb_state *);
void parser_dump(mrb_state*, struct mrb_ast_node*, int);
void codedump_all(mrb_state*, int);
@@ -96,19 +96,21 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
args->check_syntax = 1;
break;
case 'v':
- ruby_show_version(mrb);
+ mrb_show_version(mrb);
args->verbose = 1;
break;
case '-':
if (strcmp((*argv) + 2, "version") == 0) {
- ruby_show_version(mrb);
+ mrb_show_version(mrb);
+ exit(0);
}
else if (strcmp((*argv) + 2, "verbose") == 0) {
args->verbose = 1;
break;
}
else if (strcmp((*argv) + 2, "copyright") == 0) {
- ruby_show_copyright(mrb);
+ mrb_show_copyright(mrb);
+ exit(0);
}
else return -3;
return 0;
@@ -164,7 +166,7 @@ main(int argc, char **argv)
return n;
}
- p = mrb_parse_file(mrb, args.rfp, 0, 0);
+ p = mrb_parse_file(mrb, args.rfp);
if (!p || !p->tree || p->nerr) {
cleanup(&args);
return -1;
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index f59cbcace..154f266d1 100644
--- a/tools/mruby/mruby.c
+++ b/tools/mruby/mruby.c
@@ -2,13 +2,13 @@
#include "mruby/proc.h"
#include "mruby/array.h"
#include "mruby/string.h"
-#include "compile.h"
+#include "mruby/compile.h"
#include "mruby/dump.h"
#include <stdio.h>
#include <string.h>
-void ruby_show_version(mrb_state *);
-void ruby_show_copyright(mrb_state *);
+void mrb_show_version(mrb_state *);
+void mrb_show_copyright(mrb_state *);
void parser_dump(mrb_state*, struct mrb_ast_node*, int);
void codedump_all(mrb_state*, int);
@@ -85,19 +85,21 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
}
break;
case 'v':
- ruby_show_version(mrb);
+ mrb_show_version(mrb);
args->verbose = 1;
break;
case '-':
if (strcmp((*argv) + 2, "version") == 0) {
- ruby_show_version(mrb);
+ mrb_show_version(mrb);
+ exit(0);
}
else if (strcmp((*argv) + 2, "verbose") == 0) {
args->verbose = 1;
break;
}
else if (strcmp((*argv) + 2, "copyright") == 0) {
- ruby_show_copyright(mrb);
+ mrb_show_copyright(mrb);
+ exit(0);
}
else return -3;
return 0;
@@ -105,10 +107,12 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
}
- if (args->rfp == NULL && args->cmdline == NULL &&
- (*argv == NULL || (args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL)) {
- printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
- return 0;
+ if (args->rfp == NULL && args->cmdline == NULL) {
+ if (*argv == NULL) args->rfp = stdin;
+ else if ((args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) {
+ printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
+ return 0;
+ }
}
args->argv = mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
memcpy(args->argv, argv, (argc+1) * sizeof(char*));
@@ -152,7 +156,12 @@ main(int argc, char **argv)
p = mrb_parse_string(mrb, (char*)args.cmdline);
}
else {
- p = mrb_parse_file(mrb, args.rfp, argv[1], 0);
+ p = mrb_parser_new(mrb);
+ if (p) {
+ mrb_parser_filename(p, argv[1]);
+ p->f = args.rfp;
+ mrb_parser_parse(p);
+ }
}
if (!p || !p->tree || p->nerr) {
cleanup(mrb, &args);