changeset 8800:f57949e1e9f1 v7.4.1688

commit https://github.com/vim/vim/commit/67c2c058ea34628bd575aac7ddba4cd3b244ed57 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Mar 30 22:03:02 2016 +0200 patch 7.4.1688 Problem: MzScheme does not support partial. Solution: Add minimal partial support. (Ken Takata)
author Christian Brabandt <cb@256bit.org>
date Wed, 30 Mar 2016 22:15:10 +0200
parents 6cce662ed5e3
children c2837e03085c
files src/if_mzsch.c src/version.c
diffstat 2 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -3109,6 +3109,7 @@ vim_to_mzscheme_impl(typval_T *vim_value
 	MZ_GC_VAR_IN_REG(0, funcname);
 	MZ_GC_REG();
 
+	/* FIXME: func_ref() and func_unref() are needed. */
 	funcname = scheme_make_byte_string((char *)vim_value->vval.v_string);
 	MZ_GC_CHECK();
 	result = scheme_make_closed_prim_w_arity(vim_funcref, funcname,
@@ -3117,6 +3118,30 @@ vim_to_mzscheme_impl(typval_T *vim_value
 
 	MZ_GC_UNREG();
     }
+    else if (vim_value->v_type == VAR_PARTIAL)
+    {
+	if (vim_value->vval.v_partial == NULL)
+	    result = scheme_null;
+	else
+	{
+	    Scheme_Object *funcname = NULL;
+
+	    MZ_GC_DECL_REG(1);
+	    MZ_GC_VAR_IN_REG(0, funcname);
+	    MZ_GC_REG();
+
+	    /* FIXME: func_ref() and func_unref() are needed. */
+	    /* TODO: Support pt_dict and pt_argv. */
+	    funcname = scheme_make_byte_string(
+		    (char *)vim_value->vval.v_partial->pt_name);
+	    MZ_GC_CHECK();
+	    result = scheme_make_closed_prim_w_arity(vim_funcref, funcname,
+		    (const char *)BYTE_STRING_VALUE(funcname), 0, -1);
+	    MZ_GC_CHECK();
+
+	    MZ_GC_UNREG();
+	}
+    }
     else if (vim_value->v_type == VAR_SPECIAL)
     {
 	if (vim_value->vval.v_number <= VVAL_TRUE)
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1688,
+/**/
     1687,
 /**/
     1686,