diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-07-03 21:13:10 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-07-03 21:13:10 +0900 |
| commit | 39689441e78c59fb92d7563ed40f14287df9b575 (patch) | |
| tree | 7b6b33c51b4ffdd3b78267dc79e005a038531247 | |
| parent | e81449557646b184e6367706273e8c0b4c53668d (diff) | |
| download | mruby-39689441e78c59fb92d7563ed40f14287df9b575.tar.gz mruby-39689441e78c59fb92d7563ed40f14287df9b575.zip | |
add context arg to mrb_parser_parse()
| -rw-r--r-- | include/mruby/compile.h | 2 | ||||
| -rw-r--r-- | src/parse.y | 27 | ||||
| -rw-r--r-- | tools/mirb/mirb.c | 2 |
3 files changed, 15 insertions, 16 deletions
diff --git a/include/mruby/compile.h b/include/mruby/compile.h index 401f52854..c4e480577 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -98,7 +98,7 @@ struct mrb_parser_state { struct mrb_parser_state* mrb_parser_new(mrb_state*); const char *mrb_parser_filename(struct mrb_parser_state*, const char*); -void mrb_parser_parse(struct mrb_parser_state*); +void mrb_parser_parse(struct mrb_parser_state*,mrbc_context*); /* utility functions */ struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,mrbc_context*); diff --git a/src/parse.y b/src/parse.y index 78d7d7a7e..90534cb32 100644 --- a/src/parse.y +++ b/src/parse.y @@ -4669,8 +4669,17 @@ yylex(void *lval, parser_state *p) return t; } +static void +parser_init_cxt(parser_state *p, mrbc_context *cxt) +{ + if (cxt) { + if (cxt->lineno) p->lineno = cxt->lineno; + if (cxt->filename) p->filename = cxt->filename; + } +} + void -mrb_parser_parse(parser_state *p) +mrb_parser_parse(parser_state *p, mrbc_context *c) { node *tree; @@ -4685,6 +4694,7 @@ mrb_parser_parse(parser_state *p) p->in_def = p->in_single = FALSE; p->nerr = p->nwarn = 0; p->sterm = 0; + parser_init_cxt(p, c); yyparse(p); tree = p->tree; @@ -4772,15 +4782,6 @@ mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s) return c->filename; } -static void -parser_init_cxt(parser_state *p, mrbc_context *cxt) -{ - if (cxt) { - if (cxt->lineno) p->lineno = cxt->lineno; - if (cxt->filename) p->filename = cxt->filename; - } -} - parser_state* mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c) { @@ -4788,11 +4789,10 @@ mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c) p = mrb_parser_new(mrb); if (!p) return 0; - parser_init_cxt(p, c); p->s = p->send = NULL; p->f = f; - mrb_parser_parse(p); + mrb_parser_parse(p, c); return p; } @@ -4803,11 +4803,10 @@ mrb_parse_nstring(mrb_state *mrb, const char *s, int len, mrbc_context *c) p = mrb_parser_new(mrb); if (!p) return 0; - parser_init_cxt(p, c); p->s = s; p->send = s + len; - mrb_parser_parse(p); + mrb_parser_parse(p, c); return p; } diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c index 35558acfb..fb61dd272 100644 --- a/tools/mirb/mirb.c +++ b/tools/mirb/mirb.c @@ -196,7 +196,7 @@ main(void) parser->send = ruby_code + strlen(ruby_code); parser->capture_errors = 1; parser->lineno = 1; - mrb_parser_parse(parser); + mrb_parser_parse(parser, NULL); code_block_open = is_code_block_open(parser); if (code_block_open) { |
