From a3d6290d7b3302fbd602eb57e4569ba0afa7b8f2 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 21 Apr 2014 06:53:35 +0900 Subject: use `stack_type` instead of raw `unsigned int` --- src/parse.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/parse.y b/src/parse.y index 053b5f3e9..3eb4a418f 100644 --- a/src/parse.y +++ b/src/parse.y @@ -997,7 +997,7 @@ heredoc_end(parser_state *p) node *nd; mrb_sym id; int num; - unsigned int stack; + stack_type stack; const struct vtable *vars; } -- cgit v1.2.3 From 9eaddfab4455513ef6f3dbb89eca80a7798bb49a Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 21 Apr 2014 07:00:03 +0900 Subject: allow method definition in cmdarg save cmdarg_stack and isolate command argument state from outer scope to allow method definition in cmdarg import from ruby/ruby@04bb9d6b75a55d4000700769eead5a5cb942c25b --- src/parse.y | 6 ++++++ test/t/syntax.rb | 7 +++++++ 2 files changed, 13 insertions(+) (limited to 'src') diff --git a/src/parse.y b/src/parse.y index 3eb4a418f..1a3dadd61 100644 --- a/src/parse.y +++ b/src/parse.y @@ -2226,6 +2226,8 @@ primary : literal { p->in_def++; $$ = local_switch(p); + $1 = p->cmdarg_stack; + p->cmdarg_stack = 0; } f_arglist bodystmt @@ -2234,12 +2236,15 @@ primary : literal $$ = new_def(p, $2, $4, $5); local_resume(p, $3); p->in_def--; + p->cmdarg_stack = $1; } | keyword_def singleton dot_or_colon {p->lstate = EXPR_FNAME;} fname { p->in_single++; p->lstate = EXPR_ENDFN; /* force for args */ $$ = local_switch(p); + $1 = p->cmdarg_stack; + p->cmdarg_stack = 0; } f_arglist bodystmt @@ -2248,6 +2253,7 @@ primary : literal $$ = new_sdef(p, $2, $5, $7, $8); local_resume(p, $6); p->in_single--; + p->cmdarg_stack = $1; } | keyword_break { diff --git a/test/t/syntax.rb b/test/t/syntax.rb index d761b1991..2adfbc8ab 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -265,3 +265,10 @@ assert('parenthesed do-block in cmdarg') do result = x.test (proc do :ok; end) assert_equal :ok, result end + +assert('method definition in cmdarg') do + if false + bar def foo; self.each do end end + end + true +end -- cgit v1.2.3