summaryrefslogtreecommitdiff
path: root/src/vim9execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vim9execute.c')
-rw-r--r--src/vim9execute.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 5c5fcb157..9d187c4b4 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -840,6 +840,10 @@ call_def_function(
case ISN_PUSHF:
case ISN_PUSHS:
case ISN_PUSHBLOB:
+ case ISN_PUSHFUNC:
+ case ISN_PUSHPARTIAL:
+ case ISN_PUSHCHANNEL:
+ case ISN_PUSHJOB:
if (ga_grow(&ectx.ec_stack, 1) == FAIL)
goto failed;
tv = STACK_TV_BOT(0);
@@ -867,6 +871,29 @@ call_def_function(
case ISN_PUSHBLOB:
blob_copy(iptr->isn_arg.blob, tv);
break;
+ case ISN_PUSHFUNC:
+ tv->v_type = VAR_FUNC;
+ tv->vval.v_string = vim_strsave(iptr->isn_arg.string);
+ break;
+ case ISN_PUSHPARTIAL:
+ tv->v_type = VAR_UNKNOWN;
+ break;
+ case ISN_PUSHCHANNEL:
+#ifdef FEAT_JOB_CHANNEL
+ tv->v_type = VAR_CHANNEL;
+ tv->vval.v_channel = iptr->isn_arg.channel;
+ if (tv->vval.v_channel != NULL)
+ ++tv->vval.v_channel->ch_refcount;
+#endif
+ break;
+ case ISN_PUSHJOB:
+#ifdef FEAT_JOB_CHANNEL
+ tv->v_type = VAR_JOB;
+ tv->vval.v_job = iptr->isn_arg.job;
+ if (tv->vval.v_job != NULL)
+ ++tv->vval.v_job->jv_refcount;
+#endif
+ break;
default:
tv->v_type = VAR_STRING;
tv->vval.v_string = vim_strsave(iptr->isn_arg.string);
@@ -1846,6 +1873,36 @@ ex_disassemble(exarg_T *eap)
vim_free(tofree);
}
break;
+ case ISN_PUSHFUNC:
+ smsg("%4d PUSHFUNC \"%s\"", current, iptr->isn_arg.string);
+ break;
+ case ISN_PUSHPARTIAL:
+ // TODO
+ smsg("%4d PUSHPARTIAL", current);
+ break;
+ case ISN_PUSHCHANNEL:
+#ifdef FEAT_JOB_CHANNEL
+ {
+ channel_T *channel = iptr->isn_arg.channel;
+
+ smsg("%4d PUSHCHANNEL %d", current,
+ channel == NULL ? 0 : channel->ch_id);
+ }
+#endif
+ break;
+ case ISN_PUSHJOB:
+#ifdef FEAT_JOB_CHANNEL
+ {
+ typval_T tv;
+ char_u *name;
+
+ tv.v_type = VAR_JOB;
+ tv.vval.v_job = iptr->isn_arg.job;
+ name = tv_get_string(&tv);
+ smsg("%4d PUSHJOB %s", current, name);
+ }
+#endif
+ break;
case ISN_PUSHEXC:
smsg("%4d PUSH v:exception", current);
break;