Mercurial > vim
comparison src/vim9execute.c @ 20279:49b50843e725 v8.2.0695
patch 8.2.0695: Vim9: cannot define a function inside a function
Commit: https://github.com/vim/vim/commit/04b12697838b232b8b17c553ccc74cf1f1bdb81c
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon May 4 23:24:44 2020 +0200
patch 8.2.0695: Vim9: cannot define a function inside a function
Problem: Vim9: cannot define a function inside a function.
Solution: Initial support for :def inside :def.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 04 May 2020 23:30:04 +0200 |
parents | 683c2da4982b |
children | ab8c8fd0f868 |
comparison
equal
deleted
inserted
replaced
20278:4148ba869078 | 20279:49b50843e725 |
---|---|
203 return FAIL; | 203 return FAIL; |
204 } | 204 } |
205 if (ga_grow(&ectx->ec_stack, arg_to_add + 3 | 205 if (ga_grow(&ectx->ec_stack, arg_to_add + 3 |
206 + dfunc->df_varcount + dfunc->df_closure_count) == FAIL) | 206 + dfunc->df_varcount + dfunc->df_closure_count) == FAIL) |
207 return FAIL; | 207 return FAIL; |
208 | |
209 // Closure may need the function context where it was defined. | |
210 // TODO: assuming current context. | |
211 ectx->ec_outer_stack = &ectx->ec_stack; | |
212 ectx->ec_outer_frame = ectx->ec_frame_idx; | |
208 | 213 |
209 // Move the vararg-list to below the missing optional arguments. | 214 // Move the vararg-list to below the missing optional arguments. |
210 if (vararg_count > 0 && arg_to_add > 0) | 215 if (vararg_count > 0 && arg_to_add > 0) |
211 *STACK_TV_BOT(arg_to_add - 1) = *STACK_TV_BOT(-1); | 216 *STACK_TV_BOT(arg_to_add - 1) = *STACK_TV_BOT(-1); |
212 | 217 |