Commit 61d8bb13 authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

keep toplevel local variables; close #133

parent a18fb01b
...@@ -967,12 +967,11 @@ var_reference(parser_state *p, node *lhs) ...@@ -967,12 +967,11 @@ var_reference(parser_state *p, node *lhs)
%% %%
program : { program : {
p->lstate = EXPR_BEG; p->lstate = EXPR_BEG;
local_nest(p); if (!p->locals) p->locals = cons(0,0);
} }
top_compstmt top_compstmt
{ {
p->tree = new_scope(p, $2); p->tree = new_scope(p, $2);
local_unnest(p);
} }
; ;
...@@ -4631,6 +4630,9 @@ mrb_parser_parse(parser_state *p) ...@@ -4631,6 +4630,9 @@ mrb_parser_parse(parser_state *p)
} }
yyparse(p); yyparse(p);
tree = p->tree; tree = p->tree;
if ((int)tree->car == NODE_SCOPE) {
p->locals = cons(tree->cdr->car, 0);
}
if (!tree) { if (!tree) {
if (p->begin_tree) { if (p->begin_tree) {
tree = p->begin_tree; tree = p->begin_tree;
......
...@@ -161,8 +161,10 @@ main(void) ...@@ -161,8 +161,10 @@ main(void)
print_hint(); print_hint();
/* new interpreter instance */ /* new interpreter instance */
mrb_interpreter = mrb_open(); mrb_interpreter = mrb_open();
/* new parser instance */
parser = mrb_parser_new(mrb_interpreter);
memset(ruby_code, 0, sizeof(*ruby_code)); memset(ruby_code, 0, sizeof(*ruby_code));
memset(last_code_line, 0, sizeof(*last_code_line)); memset(last_code_line, 0, sizeof(*last_code_line));
...@@ -205,7 +207,10 @@ main(void) ...@@ -205,7 +207,10 @@ main(void)
} }
/* parse code */ /* parse code */
parser = mrb_parse_nstring_ext(mrb_interpreter, ruby_code, strlen(ruby_code)); parser->s = ruby_code;
parser->send = ruby_code + strlen(ruby_code);
parser->capture_errors = 1;
mrb_parser_parse(parser);
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