Commit 39689441 authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

add context arg to mrb_parser_parse()

parent e8144955
...@@ -98,7 +98,7 @@ struct mrb_parser_state { ...@@ -98,7 +98,7 @@ struct mrb_parser_state {
struct mrb_parser_state* mrb_parser_new(mrb_state*); struct mrb_parser_state* mrb_parser_new(mrb_state*);
const char *mrb_parser_filename(struct mrb_parser_state*, const char*); 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 */ /* utility functions */
struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,mrbc_context*); struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,mrbc_context*);
......
...@@ -4669,8 +4669,17 @@ yylex(void *lval, parser_state *p) ...@@ -4669,8 +4669,17 @@ yylex(void *lval, parser_state *p)
return t; 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 void
mrb_parser_parse(parser_state *p) mrb_parser_parse(parser_state *p, mrbc_context *c)
{ {
node *tree; node *tree;
...@@ -4685,6 +4694,7 @@ mrb_parser_parse(parser_state *p) ...@@ -4685,6 +4694,7 @@ mrb_parser_parse(parser_state *p)
p->in_def = p->in_single = FALSE; p->in_def = p->in_single = FALSE;
p->nerr = p->nwarn = 0; p->nerr = p->nwarn = 0;
p->sterm = 0; p->sterm = 0;
parser_init_cxt(p, c);
yyparse(p); yyparse(p);
tree = p->tree; tree = p->tree;
...@@ -4772,15 +4782,6 @@ mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s) ...@@ -4772,15 +4782,6 @@ mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s)
return c->filename; 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* parser_state*
mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c) 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) ...@@ -4788,11 +4789,10 @@ mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
p = mrb_parser_new(mrb); p = mrb_parser_new(mrb);
if (!p) return 0; if (!p) return 0;
parser_init_cxt(p, c);
p->s = p->send = NULL; p->s = p->send = NULL;
p->f = f; p->f = f;
mrb_parser_parse(p); mrb_parser_parse(p, c);
return p; return p;
} }
...@@ -4803,11 +4803,10 @@ mrb_parse_nstring(mrb_state *mrb, const char *s, int len, mrbc_context *c) ...@@ -4803,11 +4803,10 @@ mrb_parse_nstring(mrb_state *mrb, const char *s, int len, mrbc_context *c)
p = mrb_parser_new(mrb); p = mrb_parser_new(mrb);
if (!p) return 0; if (!p) return 0;
parser_init_cxt(p, c);
p->s = s; p->s = s;
p->send = s + len; p->send = s + len;
mrb_parser_parse(p); mrb_parser_parse(p, c);
return p; return p;
} }
......
...@@ -196,7 +196,7 @@ main(void) ...@@ -196,7 +196,7 @@ main(void)
parser->send = ruby_code + strlen(ruby_code); parser->send = ruby_code + strlen(ruby_code);
parser->capture_errors = 1; parser->capture_errors = 1;
parser->lineno = 1; parser->lineno = 1;
mrb_parser_parse(parser); mrb_parser_parse(parser, NULL);
code_block_open = is_code_block_open(parser); code_block_open = is_code_block_open(parser);
if (code_block_open) { if (code_block_open) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment