diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.c | 2 | ||||
| -rw-r--r-- | src/compile.h | 91 | ||||
| -rw-r--r-- | src/gc.h | 8 | ||||
| -rw-r--r-- | src/init.c | 3 | ||||
| -rw-r--r-- | src/parse.y | 98 | ||||
| -rw-r--r-- | src/print.c | 13 | ||||
| -rw-r--r-- | src/version.c | 81 | ||||
| -rw-r--r-- | src/version.h | 38 |
8 files changed, 64 insertions, 270 deletions
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/compile.h b/src/compile.h deleted file mode 100644 index ba1dfd2ee..000000000 --- a/src/compile.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -** compile.h - mruby parser -** -** See Copyright Notice in mruby.h -*/ - -#include "mruby.h" -#include <stdio.h> -#include <setjmp.h> - -typedef struct mrb_ast_node { - struct mrb_ast_node *car, *cdr; -} mrb_ast_node; - -#include "node.h" -#include "pool.h" -#include <stdio.h> - -enum mrb_lex_state_enum { - EXPR_BEG, /* ignore newline, +/- is a sign. */ - EXPR_END, /* newline significant, +/- is an operator. */ - EXPR_ENDARG, /* ditto, and unbound braces. */ - EXPR_ENDFN, /* ditto, and unbound braces. */ - EXPR_ARG, /* newline significant, +/- is an operator. */ - EXPR_CMDARG, /* newline significant, +/- is an operator. */ - EXPR_MID, /* newline significant, +/- is an operator. */ - EXPR_FNAME, /* ignore newline, no reserved words. */ - EXPR_DOT, /* right after `.' or `::', no reserved words. */ - EXPR_CLASS, /* immediate after `class', no here document. */ - EXPR_VALUE, /* alike EXPR_BEG but label is disallowed. */ - EXPR_MAX_STATE -}; - -struct mrb_parser_message { - int lineno; - int column; - char* message; -}; - -struct mrb_parser_state { - mrb_state *mrb; - struct mrb_pool *pool; - mrb_ast_node *cells; - const char *s, *send; - FILE *f; - int lineno; - int column; - const char *filename; - - enum mrb_lex_state_enum lstate; - int sterm; - - unsigned int cond_stack; - unsigned int cmdarg_stack; - int paren_nest; - int lpar_beg; - - mrb_ast_node *pb; - char buf[1024]; - int bidx; - - mrb_ast_node *heredoc; - - int in_def, in_single, cmd_start; - mrb_ast_node *locals; - - void *ylval; - - int nerr; - int nwarn; - mrb_ast_node *tree, *begin_tree; - - int capture_errors; - struct mrb_parser_message error_buffer[10]; - struct mrb_parser_message warn_buffer[10]; - - jmp_buf jmp; -}; - -struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,const char*,int); -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_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); @@ -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" |
