1
0
forked from aniani/vim

patch 8.2.0226: compiling for loop not tested

Problem:    Compiling for loop not tested.
Solution:   Add a test.  Make variable initialization work for more types.
This commit is contained in:
Bram Moolenaar
2020-02-06 22:06:54 +01:00
parent 777770fbb0
commit 04d0522046
3 changed files with 77 additions and 5 deletions

View File

@@ -3427,13 +3427,51 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
else
{
// variables are always initialized
// TODO: support more types
if (ga_grow(instr, 1) == FAIL)
goto theend;
if (type->tt_type == VAR_STRING)
generate_PUSHS(cctx, vim_strsave((char_u *)""));
else
generate_PUSHNR(cctx, 0);
switch (type->tt_type)
{
case VAR_BOOL:
generate_PUSHBOOL(cctx, VVAL_FALSE);
break;
case VAR_SPECIAL:
generate_PUSHSPEC(cctx, VVAL_NONE);
break;
case VAR_FLOAT:
#ifdef FEAT_FLOAT
generate_PUSHF(cctx, 0.0);
#endif
break;
case VAR_STRING:
generate_PUSHS(cctx, NULL);
break;
case VAR_BLOB:
generate_PUSHBLOB(cctx, NULL);
break;
case VAR_FUNC:
// generate_PUSHS(cctx, NULL); TODO
break;
case VAR_PARTIAL:
// generate_PUSHS(cctx, NULL); TODO
break;
case VAR_LIST:
generate_NEWLIST(cctx, 0);
break;
case VAR_DICT:
generate_NEWDICT(cctx, 0);
break;
case VAR_JOB:
// generate_PUSHS(cctx, NULL); TODO
break;
case VAR_CHANNEL:
// generate_PUSHS(cctx, NULL); TODO
break;
case VAR_NUMBER:
case VAR_UNKNOWN:
case VAR_VOID:
generate_PUSHNR(cctx, 0);
break;
}
}
if (oplen > 0 && *op != '=')