diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-30 22:03:02 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-30 22:03:02 +0200 |
commit | 67c2c058ea34628bd575aac7ddba4cd3b244ed57 (patch) | |
tree | 6ebc30138821f333997a2ff81a62bb1a951339cb /src/if_mzsch.c | |
parent | bdf0bda968a53a55149a4c83a10a60c28e431305 (diff) | |
download | vim-git-67c2c058ea34628bd575aac7ddba4cd3b244ed57.tar.gz |
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.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/if_mzsch.c b/src/if_mzsch.c index d255d4adf..93e4b6cbb 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) |