summaryrefslogtreecommitdiffhomepage
path: root/src/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse.y')
-rw-r--r--src/parse.y74
1 files changed, 36 insertions, 38 deletions
diff --git a/src/parse.y b/src/parse.y
index fb3526034..ec04ae8a6 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -4618,8 +4618,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;
@@ -4645,8 +4645,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 +4661,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,19 +4677,37 @@ parser_new(mrb_state *mrb)
return p;
}
+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;
+}
+
parser_state*
-mrb_parse_file(mrb_state *mrb, FILE *f, const char *fn, int line)
+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 = p->send = NULL;
p->f = f;
- if (line) p->lineno = line;
- if (fn) mrb_parser_filename(p, fn);
- start_parser(p);
+ mrb_parser_parse(p);
return p;
}
@@ -4695,13 +4716,11 @@ 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;
- start_parser(p);
+ mrb_parser_parse(p);
return p;
}
@@ -4710,14 +4729,13 @@ mrb_parse_nstring_ext(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 +4750,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 +4768,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)
{