summaryrefslogtreecommitdiff
path: root/src/vim9.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vim9.h')
-rw-r--r--src/vim9.h30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/vim9.h b/src/vim9.h
index abcf64f94..176fc642a 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -252,30 +252,31 @@ typedef enum {
// arguments to ISN_JUMP
typedef struct {
jumpwhen_T jump_when;
- int jump_where; // position to jump to
+ int jump_where; // position to jump to
} jump_T;
// arguments to ISN_JUMP_IF_ARG_SET
typedef struct {
- int jump_arg_off; // argument index, negative
- int jump_where; // position to jump to
+ int jump_arg_off; // argument index, negative
+ int jump_where; // position to jump to
} jumparg_T;
// arguments to ISN_FOR
typedef struct {
- int for_idx; // loop variable index
- int for_end; // position to jump to after done
+ short for_loop_idx; // loop variable index
+ int for_end; // position to jump to after done
} forloop_T;
// arguments to ISN_WHILE
typedef struct {
- int while_funcref_idx; // variable index for funcref count
- int while_end; // position to jump to after done
+ short while_funcref_idx; // variable index for funcref count
+ int while_end; // position to jump to after done
} whileloop_T;
// arguments to ISN_ENDLOOP
typedef struct {
short end_funcref_idx; // variable index of funcrefs.ga_len
+ short end_depth; // nested loop depth
short end_var_idx; // first variable declared in the loop
short end_var_count; // number of variables declared in the loop
} endloop_T;
@@ -356,9 +357,8 @@ typedef struct {
// extra arguments for funcref_T
typedef struct {
- char_u *fre_func_name; // function name for legacy function
- short fre_loop_var_idx; // index of first variable inside loop
- short fre_loop_var_count; // number of variables inside loop
+ char_u *fre_func_name; // function name for legacy function
+ loopvarinfo_T fre_loopvar_info; // info about variables inside loops
} funcref_extra_T;
// arguments to ISN_FUNCREF
@@ -369,10 +369,9 @@ typedef struct {
// arguments to ISN_NEWFUNC
typedef struct {
- char_u *nfa_lambda; // name of the lambda already defined
- char_u *nfa_global; // name of the global function to be created
- short nfa_loop_var_idx; // index of first variable inside loop
- short nfa_loop_var_count; // number of variables inside loop
+ char_u *nfa_lambda; // name of the lambda already defined
+ char_u *nfa_global; // name of the global function to be created
+ loopvarinfo_T nfa_loopvar_info; // ifno about variables inside loops
} newfuncarg_T;
typedef struct {
@@ -628,6 +627,7 @@ typedef struct {
int li_local_count; // ctx_locals.ga_len at loop start
int li_closure_count; // ctx_closure_count at loop start
int li_funcref_idx; // index of var that holds funcref count
+ int li_depth; // nested loop depth
} loop_info_T;
/*
@@ -678,6 +678,7 @@ struct scope_S {
scopetype_T se_type;
int se_local_count; // ctx_locals.ga_len before scope
skip_T se_skip_save; // ctx_skip before the block
+ int se_loop_depth; // number of loop scopes, including this
union {
ifscope_T se_if;
whilescope_T se_while;
@@ -693,6 +694,7 @@ typedef struct {
char_u *lv_name;
type_T *lv_type;
int lv_idx; // index of the variable on the stack
+ int lv_loop_depth; // depth for variable inside a loop or -1
int lv_loop_idx; // index of first variable inside a loop or -1
int lv_from_outer; // nesting level, using ctx_outer scope
int lv_const; // when TRUE cannot be assigned to