diff options
| author | Nobuyoshi Nakada <[email protected]> | 2014-04-21 07:00:03 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <[email protected]> | 2014-04-21 07:00:57 +0900 |
| commit | 9eaddfab4455513ef6f3dbb89eca80a7798bb49a (patch) | |
| tree | 11dd45ca298a6862432d443be6fadbe55b31e491 /src | |
| parent | a3d6290d7b3302fbd602eb57e4569ba0afa7b8f2 (diff) | |
| download | mruby-9eaddfab4455513ef6f3dbb89eca80a7798bb49a.tar.gz mruby-9eaddfab4455513ef6f3dbb89eca80a7798bb49a.zip | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/parse.y | 6 |
1 files changed, 6 insertions, 0 deletions
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++; $<nd>$ = local_switch(p); + $<stack>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, $<nd>3); p->in_def--; + p->cmdarg_stack = $<stack>1; } | keyword_def singleton dot_or_colon {p->lstate = EXPR_FNAME;} fname { p->in_single++; p->lstate = EXPR_ENDFN; /* force for args */ $<nd>$ = local_switch(p); + $<stack>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, $<nd>6); p->in_single--; + p->cmdarg_stack = $<stack>1; } | keyword_break { |
