summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-19 16:15:11 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-19 16:15:11 +0900
commit6f6c270bb13ff6e68f39e863f11706ba0bf28500 (patch)
treed759a373c396c7fc41c13a4e35c6d98ac0a0e7d3
parentaeca23166b8e822ba8c3126ac9b1b0e76914fab7 (diff)
downloadmruby-6f6c270bb13ff6e68f39e863f11706ba0bf28500.tar.gz
mruby-6f6c270bb13ff6e68f39e863f11706ba0bf28500.zip
mirb should detect end of expression smarter
-rw-r--r--src/parse.y5
-rw-r--r--tools/mirb/mirb.c3
2 files changed, 7 insertions, 1 deletions
diff --git a/src/parse.y b/src/parse.y
index 8acdf983a..2b2dd6851 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -4630,6 +4630,11 @@ mrb_parser_parse(parser_state *p)
p->tree = p->begin_tree = 0;
return;
}
+
+ p->cmd_start = TRUE;
+ p->in_def = p->in_single = FALSE;
+ p->nerr = p->nwarn = 0;
+
yyparse(p);
tree = p->tree;
if (!tree) {
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c
index df7c29df6..f09417ed0 100644
--- a/tools/mirb/mirb.c
+++ b/tools/mirb/mirb.c
@@ -27,6 +27,7 @@ is_code_block_open(struct mrb_parser_state *parser)
case EXPR_BEG:
/* an expression was just started, */
/* we can't end it like this */
+ if (parser->nerr == 0) return FALSE;
code_block_open = TRUE;
break;
case EXPR_DOT:
@@ -198,13 +199,13 @@ main(void)
}
else {
if (code_block_open) {
- strcat(ruby_code, "\n");
strcat(ruby_code, last_code_line);
}
else {
memset(ruby_code, 0, sizeof(*ruby_code));
strcat(ruby_code, last_code_line);
}
+ strcat(ruby_code, "\n");
/* parse code */
parser->s = ruby_code;