diff options
| -rw-r--r-- | include/mrbconf.h | 1 | ||||
| -rw-r--r-- | include/mruby/compile.h | 8 | ||||
| -rw-r--r-- | src/codegen.c | 19 | ||||
| -rw-r--r-- | src/parse.y | 16 | ||||
| -rw-r--r-- | test/driver.c | 1 |
5 files changed, 35 insertions, 10 deletions
diff --git a/include/mrbconf.h b/include/mrbconf.h index 0caa3f90e..988bdf0ad 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -8,6 +8,7 @@ #define MRUBYCONF_H #include <stdint.h> +#include <stddef.h> /* configuration options: */ /* add -DMRB_USE_FLOAT to use float instead of double for floating point numbers */ diff --git a/include/mruby/compile.h b/include/mruby/compile.h index d8edc32cf..51615fe9f 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -101,7 +101,9 @@ struct mrb_parser_state { struct mrb_pool *pool; mrb_ast_node *cells; const char *s, *send; +#ifdef ENABLE_STDIO FILE *f; +#endif char *filename; int lineno; int column; @@ -143,16 +145,22 @@ void mrb_parser_free(struct mrb_parser_state*); void mrb_parser_parse(struct mrb_parser_state*,mrbc_context*); /* utility functions */ +#ifdef ENABLE_STDIO struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,mrbc_context*); +#endif struct mrb_parser_state* mrb_parse_string(mrb_state*,const char*,mrbc_context*); struct mrb_parser_state* mrb_parse_nstring(mrb_state*,const char*,int,mrbc_context*); int mrb_generate_code(mrb_state*, struct mrb_parser_state*); /* program load functions */ +#ifdef ENABLE_STDIO mrb_value mrb_load_file(mrb_state*,FILE*); +#endif mrb_value mrb_load_string(mrb_state *mrb, const char *s); mrb_value mrb_load_nstring(mrb_state *mrb, const char *s, int len); +#ifdef ENABLE_STDIO mrb_value mrb_load_file_cxt(mrb_state*,FILE*, mrbc_context *cxt); +#endif mrb_value mrb_load_string_cxt(mrb_state *mrb, const char *s, mrbc_context *cxt); mrb_value mrb_load_nstring_cxt(mrb_state *mrb, const char *s, int len, mrbc_context *cxt); diff --git a/src/codegen.c b/src/codegen.c index 5b86c90a9..e8fcce5c2 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1848,12 +1848,13 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_BACK_REF: { - char buf[4]; - int len; + char buf[2] = { '$' }; + mrb_value str; int sym; - len = snprintf(buf, sizeof(buf), "$%c", (int)(intptr_t)tree); - sym = new_sym(s, mrb_intern2(s->mrb, buf, len)); + buf[1] = (char)(intptr_t)tree; + str = mrb_str_new(s->mrb, buf, 2); + sym = new_sym(s, mrb_intern_str(s->mrb, str)); genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym)); push(); } @@ -1861,12 +1862,14 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_NTH_REF: { - char buf[4]; - int len; int sym; + mrb_state *mrb = s->mrb; + mrb_value fix = mrb_fixnum_value((intptr_t)tree); + mrb_value str = mrb_str_buf_new(mrb, 4); - len = snprintf(buf, sizeof(buf), "$%d", (int)(intptr_t)tree); - sym = new_sym(s, mrb_intern2(s->mrb, buf, len)); + mrb_str_buf_cat(mrb, str, "$", 1); + mrb_str_buf_append(mrb, str, mrb_fix2str(mrb, fix, 10)); + sym = new_sym(s, mrb_intern_str(mrb, str)); genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym)); push(); } diff --git a/src/parse.y b/src/parse.y index 29ea34c59..bdb646799 100644 --- a/src/parse.y +++ b/src/parse.y @@ -3241,12 +3241,15 @@ nextc(parser_state *p) cons_free(tmp); } else { +#ifdef ENABLE_STDIO if (p->f) { if (feof(p->f)) return -1; c = fgetc(p->f); if (c == EOF) return -1; } - else if (!p->s || p->s >= p->send) { + else +#endif + if (!p->s || p->s >= p->send) { return -1; } else { @@ -3304,6 +3307,7 @@ peeks(parser_state *p, const char *s) { int len = strlen(s); +#ifdef ENABLE_STDIO if (p->f) { int n = 0; while (*s) { @@ -3311,7 +3315,9 @@ peeks(parser_state *p, const char *s) } return TRUE; } - else if (p->s && p->s + len >= p->send) { + else +#endif + if (p->s && p->s + len >= p->send) { if (memcmp(p->s, s, len) == 0) return TRUE; } return FALSE; @@ -5079,7 +5085,9 @@ mrb_parser_new(mrb_state *mrb) p->in_def = p->in_single = 0; p->s = p->send = NULL; +#ifdef ENABLE_STDIO p->f = NULL; +#endif p->cmd_start = TRUE; p->in_def = p->in_single = FALSE; @@ -5132,6 +5140,7 @@ mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s) return c->filename; } +#ifdef ENABLE_STDIO parser_state* mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c) { @@ -5145,6 +5154,7 @@ mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c) mrb_parser_parse(p, c); return p; } +#endif parser_state* mrb_parse_nstring(mrb_state *mrb, const char *s, int len, mrbc_context *c) @@ -5208,6 +5218,7 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) return v; } +#ifdef ENABLE_STDIO mrb_value mrb_load_file_cxt(mrb_state *mrb, FILE *f, mrbc_context *c) { @@ -5219,6 +5230,7 @@ mrb_load_file(mrb_state *mrb, FILE *f) { return mrb_load_file_cxt(mrb, f, NULL); } +#endif mrb_value mrb_load_nstring_cxt(mrb_state *mrb, const char *s, int len, mrbc_context *c) diff --git a/test/driver.c b/test/driver.c index acf79df05..a55e1180f 100644 --- a/test/driver.c +++ b/test/driver.c @@ -6,6 +6,7 @@ */ +#include <stdio.h> #include <stdlib.h> #include <string.h> |
