summaryrefslogtreecommitdiff
path: root/src/vim9compile.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-06 22:06:54 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-06 22:06:54 +0100
commit04d0522046e79d0e13c1317ad34bf228722ec728 (patch)
treeae5bf89d1bccca4082b689eb5ec22181484ddf54 /src/vim9compile.c
parent777770fbb0f3c091cbfa22572b953c0723355710 (diff)
downloadvim-git-04d0522046e79d0e13c1317ad34bf228722ec728.tar.gz
patch 8.2.0226: compiling for loop not testedv8.2.0226
Problem: Compiling for loop not tested. Solution: Add a test. Make variable initialization work for more types.
Diffstat (limited to 'src/vim9compile.c')
-rw-r--r--src/vim9compile.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 1c76c8adb..0c72168f1 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -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 != '=')