summaryrefslogtreecommitdiffstats
path: root/src/if_mzsch.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-03-30 22:03:02 +0200
committerBram Moolenaar <Bram@vim.org>2016-03-30 22:03:02 +0200
commit67c2c058ea34628bd575aac7ddba4cd3b244ed57 (patch)
tree6ebc30138821f333997a2ff81a62bb1a951339cb /src/if_mzsch.c
parentbdf0bda968a53a55149a4c83a10a60c28e431305 (diff)
patch 7.4.1688v7.4.1688
Problem: MzScheme does not support partial. Solution: Add minimal partial support. (Ken Takata)
Diffstat (limited to 'src/if_mzsch.c')
-rw-r--r--src/if_mzsch.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/if_mzsch.c b/src/if_mzsch.c
index d255d4adf1..93e4b6cbba 100644
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -3109,6 +3109,7 @@ vim_to_mzscheme_impl(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
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, int depth, Scheme_Hash_Table *visited)
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)