diff src/vim9execute.c @ 19566:ec1eeb1b69e2 v8.2.0340

patch 8.2.0340: Vim9: function and partial types not tested Commit: https://github.com/vim/vim/commit/087d2e15184bea3bf455dd266bd6ed66a45396e5 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 1 15:36:42 2020 +0100 patch 8.2.0340: Vim9: function and partial types not tested Problem: Vim9: function and partial types not tested. Solution: Support more for partial, add tests.
author Bram Moolenaar <Bram@vim.org>
date Sun, 01 Mar 2020 15:45:03 +0100
parents 8eeec8886c02
children 6b6e97d0185e
line wrap: on
line diff
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -873,10 +873,17 @@ call_def_function(
 			break;
 		    case ISN_PUSHFUNC:
 			tv->v_type = VAR_FUNC;
-			tv->vval.v_string = vim_strsave(iptr->isn_arg.string);
+			if (iptr->isn_arg.string == NULL)
+			    tv->vval.v_string = NULL;
+			else
+			    tv->vval.v_string =
+					     vim_strsave(iptr->isn_arg.string);
 			break;
 		    case ISN_PUSHPARTIAL:
-			tv->v_type = VAR_UNKNOWN;
+			tv->v_type = VAR_PARTIAL;
+			tv->vval.v_partial = iptr->isn_arg.partial;
+			if (tv->vval.v_partial != NULL)
+			    ++tv->vval.v_partial->pt_refcount;
 			break;
 		    case ISN_PUSHCHANNEL:
 #ifdef FEAT_JOB_CHANNEL
@@ -1874,11 +1881,20 @@ ex_disassemble(exarg_T *eap)
 		}
 		break;
 	    case ISN_PUSHFUNC:
-		smsg("%4d PUSHFUNC \"%s\"", current, iptr->isn_arg.string);
+		{
+		    char *name = (char *)iptr->isn_arg.string;
+
+		    smsg("%4d PUSHFUNC \"%s\"", current,
+					       name == NULL ? "[none]" : name);
+		}
 		break;
 	    case ISN_PUSHPARTIAL:
-		// TODO
-		smsg("%4d PUSHPARTIAL", current);
+		{
+		    partial_T *part = iptr->isn_arg.partial;
+
+		    smsg("%4d PUSHPARTIAL \"%s\"", current,
+			 part == NULL ? "[none]" : (char *)partial_name(part));
+		}
 		break;
 	    case ISN_PUSHCHANNEL:
 #ifdef FEAT_JOB_CHANNEL