mirror of
git://slackware.nl/current.git
synced 2025-02-16 09:34:21 +01:00
342 lines
9.4 KiB
Text
342 lines
9.4 KiB
Text
![]() |
To: vim_dev@googlegroups.com
|
||
|
Subject: Patch 7.3.441
|
||
|
Fcc: outbox
|
||
|
From: Bram Moolenaar <Bram@moolenaar.net>
|
||
|
Mime-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
------------
|
||
|
|
||
|
Patch 7.3.441
|
||
|
Problem: Newer versions of MzScheme (Racket) require earlier (trampolined)
|
||
|
initialisation.
|
||
|
Solution: Call mzscheme_main() early in main(). (Sergey Khorev)
|
||
|
Files: src/Make_mvc.mak, src/if_mzsch.c, src/main.c,
|
||
|
src/proto/if_mzsch.pro
|
||
|
|
||
|
|
||
|
*** ../vim-7.3.440/src/Make_mvc.mak 2011-09-14 19:01:38.000000000 +0200
|
||
|
--- src/Make_mvc.mak 2012-02-12 01:46:05.000000000 +0100
|
||
|
***************
|
||
|
*** 740,745 ****
|
||
|
--- 740,747 ----
|
||
|
!endif
|
||
|
!endif
|
||
|
MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
|
||
|
+ # increase stack size
|
||
|
+ MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
|
||
|
!endif
|
||
|
|
||
|
# Perl interface
|
||
|
*** ../vim-7.3.440/src/if_mzsch.c 2010-11-03 21:59:23.000000000 +0100
|
||
|
--- src/if_mzsch.c 2012-02-12 01:47:31.000000000 +0100
|
||
|
***************
|
||
|
*** 31,38 ****
|
||
|
* depend". */
|
||
|
#if defined(FEAT_MZSCHEME) || defined(PROTO)
|
||
|
|
||
|
- #include <assert.h>
|
||
|
-
|
||
|
/* Base data structures */
|
||
|
#define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
|
||
|
#define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
|
||
|
--- 31,36 ----
|
||
|
***************
|
||
|
*** 559,575 ****
|
||
|
hMzSch = vimLoadLib(sch_dll);
|
||
|
hMzGC = vimLoadLib(gc_dll);
|
||
|
|
||
|
! if (!hMzSch)
|
||
|
{
|
||
|
if (verbose)
|
||
|
! EMSG2(_(e_loadlib), sch_dll);
|
||
|
return FAIL;
|
||
|
}
|
||
|
|
||
|
! if (!hMzGC)
|
||
|
{
|
||
|
if (verbose)
|
||
|
! EMSG2(_(e_loadlib), gc_dll);
|
||
|
return FAIL;
|
||
|
}
|
||
|
|
||
|
--- 557,573 ----
|
||
|
hMzSch = vimLoadLib(sch_dll);
|
||
|
hMzGC = vimLoadLib(gc_dll);
|
||
|
|
||
|
! if (!hMzGC)
|
||
|
{
|
||
|
if (verbose)
|
||
|
! EMSG2(_(e_loadlib), gc_dll);
|
||
|
return FAIL;
|
||
|
}
|
||
|
|
||
|
! if (!hMzSch)
|
||
|
{
|
||
|
if (verbose)
|
||
|
! EMSG2(_(e_loadlib), sch_dll);
|
||
|
return FAIL;
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 798,862 ****
|
||
|
static __declspec(thread) void *tls_space;
|
||
|
#endif
|
||
|
|
||
|
! void
|
||
|
! mzscheme_main(void)
|
||
|
{
|
||
|
#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
|
||
|
scheme_register_tls_space(&tls_space, 0);
|
||
|
#endif
|
||
|
! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
|
||
|
! /* use trampoline for precise GC in MzScheme >= 4.x */
|
||
|
! scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
|
||
|
#else
|
||
|
! mzscheme_env_main(NULL, 0, NULL);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
! mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
|
||
|
{
|
||
|
! /* neither argument nor return values are used */
|
||
|
! #ifdef MZ_PRECISE_GC
|
||
|
! # if MZSCHEME_VERSION_MAJOR < 400
|
||
|
! /*
|
||
|
! * Starting from version 4.x, embedding applications must use
|
||
|
! * scheme_main_setup/scheme_main_stack_setup trampolines
|
||
|
! * rather than setting stack base directly with scheme_set_stack_base
|
||
|
! */
|
||
|
Scheme_Object *dummy = NULL;
|
||
|
MZ_GC_DECL_REG(1);
|
||
|
MZ_GC_VAR_IN_REG(0, dummy);
|
||
|
|
||
|
stack_base = &__gc_var_stack__;
|
||
|
# else
|
||
|
- /* environment has been created by us by Scheme */
|
||
|
- environment = env;
|
||
|
- # endif
|
||
|
- /*
|
||
|
- * In 4.x, all activities must be performed inside trampoline
|
||
|
- * so we are forced to initialise GC immediately
|
||
|
- * This can be postponed in 3.x but I see no point in implementing
|
||
|
- * a feature which will work in older versions only.
|
||
|
- * One would better use conservative GC if he needs dynamic MzScheme
|
||
|
- */
|
||
|
- mzscheme_init();
|
||
|
- #else
|
||
|
int dummy = 0;
|
||
|
stack_base = (void *)&dummy;
|
||
|
#endif
|
||
|
! main_loop(FALSE, FALSE);
|
||
|
! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
|
||
|
/* releasing dummy */
|
||
|
MZ_GC_REG();
|
||
|
MZ_GC_UNREG();
|
||
|
#endif
|
||
|
! return 0;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
startup_mzscheme(void)
|
||
|
{
|
||
|
! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
|
||
|
scheme_set_stack_base(stack_base, 1);
|
||
|
#endif
|
||
|
|
||
|
--- 796,863 ----
|
||
|
static __declspec(thread) void *tls_space;
|
||
|
#endif
|
||
|
|
||
|
! /*
|
||
|
! * Since version 4.x precise GC requires trampolined startup.
|
||
|
! * Futures and places in version 5.x need it too.
|
||
|
! */
|
||
|
! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
|
||
|
! || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
|
||
|
! # ifdef DYNAMIC_MZSCHEME
|
||
|
! # error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
|
||
|
! # endif
|
||
|
! # define TRAMPOLINED_MZVIM_STARTUP
|
||
|
! #endif
|
||
|
!
|
||
|
! int
|
||
|
! mzscheme_main(int argc, char** argv)
|
||
|
{
|
||
|
#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
|
||
|
scheme_register_tls_space(&tls_space, 0);
|
||
|
#endif
|
||
|
! #ifdef TRAMPOLINED_MZVIM_STARTUP
|
||
|
! return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
|
||
|
#else
|
||
|
! return mzscheme_env_main(NULL, argc, argv);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
! mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
|
||
|
{
|
||
|
! int vim_main_result;
|
||
|
! #ifdef TRAMPOLINED_MZVIM_STARTUP
|
||
|
! /* Scheme has created the environment for us */
|
||
|
! environment = env;
|
||
|
! #else
|
||
|
! # ifdef MZ_PRECISE_GC
|
||
|
Scheme_Object *dummy = NULL;
|
||
|
MZ_GC_DECL_REG(1);
|
||
|
MZ_GC_VAR_IN_REG(0, dummy);
|
||
|
|
||
|
stack_base = &__gc_var_stack__;
|
||
|
# else
|
||
|
int dummy = 0;
|
||
|
stack_base = (void *)&dummy;
|
||
|
+ # endif
|
||
|
#endif
|
||
|
!
|
||
|
! /* mzscheme_main is called as a trampoline from main.
|
||
|
! * We trampoline into vim_main2
|
||
|
! * Passing argc, argv through from mzscheme_main
|
||
|
! */
|
||
|
! vim_main_result = vim_main2(argc, argv);
|
||
|
! #if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
|
||
|
/* releasing dummy */
|
||
|
MZ_GC_REG();
|
||
|
MZ_GC_UNREG();
|
||
|
#endif
|
||
|
! return vim_main_result;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
startup_mzscheme(void)
|
||
|
{
|
||
|
! #ifndef TRAMPOLINED_MZVIM_STARTUP
|
||
|
scheme_set_stack_base(stack_base, 1);
|
||
|
#endif
|
||
|
|
||
|
***************
|
||
|
*** 868,874 ****
|
||
|
MZ_REGISTER_STATIC(exn_message);
|
||
|
MZ_REGISTER_STATIC(vim_exn);
|
||
|
|
||
|
! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
|
||
|
/* in newer versions of precise GC the initial env has been created */
|
||
|
environment = scheme_basic_env();
|
||
|
#endif
|
||
|
--- 869,875 ----
|
||
|
MZ_REGISTER_STATIC(exn_message);
|
||
|
MZ_REGISTER_STATIC(vim_exn);
|
||
|
|
||
|
! #ifndef TRAMPOLINED_MZVIM_STARTUP
|
||
|
/* in newer versions of precise GC the initial env has been created */
|
||
|
environment = scheme_basic_env();
|
||
|
#endif
|
||
|
***************
|
||
|
*** 3013,3019 ****
|
||
|
MZ_GC_REG();
|
||
|
|
||
|
tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
|
||
|
- assert(nc <= 5);
|
||
|
mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
|
||
|
MZ_GC_CHECK();
|
||
|
|
||
|
--- 3014,3019 ----
|
||
|
*** ../vim-7.3.440/src/main.c 2011-12-08 15:57:54.000000000 +0100
|
||
|
--- src/main.c 2012-02-12 01:49:50.000000000 +0100
|
||
|
***************
|
||
|
*** 554,559 ****
|
||
|
--- 554,584 ----
|
||
|
debug_break_level = params.use_debug_break_level;
|
||
|
#endif
|
||
|
|
||
|
+ #ifdef FEAT_MZSCHEME
|
||
|
+ /*
|
||
|
+ * Newer version of MzScheme (Racket) require earlier (trampolined)
|
||
|
+ * initialisation via scheme_main_setup.
|
||
|
+ * Implement this by initialising it as early as possible
|
||
|
+ * and splitting off remaining Vim main into vim_main2
|
||
|
+ */
|
||
|
+ {
|
||
|
+ /* Pack up preprocessed command line arguments.
|
||
|
+ * It is safe because Scheme does not access argc/argv. */
|
||
|
+ char *args[2];
|
||
|
+ args[0] = (char *)fname;
|
||
|
+ args[1] = (char *)¶ms;
|
||
|
+ return mzscheme_main(2, args);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ int vim_main2(int argc, char **argv)
|
||
|
+ {
|
||
|
+ char_u *fname = (char_u *)argv[0];
|
||
|
+ mparm_T params;
|
||
|
+
|
||
|
+ memcpy(¶ms, argv[1], sizeof(params));
|
||
|
+ #endif
|
||
|
+
|
||
|
/* Execute --cmd arguments. */
|
||
|
exe_pre_commands(¶ms);
|
||
|
|
||
|
***************
|
||
|
*** 957,970 ****
|
||
|
|
||
|
/*
|
||
|
* Call the main command loop. This never returns.
|
||
|
! * For embedded MzScheme the main_loop will be called by Scheme
|
||
|
! * for proper stack tracking
|
||
|
! */
|
||
|
! #ifndef FEAT_MZSCHEME
|
||
|
main_loop(FALSE, FALSE);
|
||
|
- #else
|
||
|
- mzscheme_main();
|
||
|
- #endif
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
--- 982,989 ----
|
||
|
|
||
|
/*
|
||
|
* Call the main command loop. This never returns.
|
||
|
! */
|
||
|
main_loop(FALSE, FALSE);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
*** ../vim-7.3.440/src/proto/if_mzsch.pro 2010-08-15 21:57:28.000000000 +0200
|
||
|
--- src/proto/if_mzsch.pro 2012-02-12 01:50:57.000000000 +0100
|
||
|
***************
|
||
|
*** 14,19 ****
|
||
|
void mzvim_reset_timer __ARGS((void));
|
||
|
void *mzvim_eval_string __ARGS((char_u *str));
|
||
|
int mzthreads_allowed __ARGS((void));
|
||
|
! void mzscheme_main __ARGS((void));
|
||
|
void do_mzeval __ARGS((char_u *str, typval_T *rettv));
|
||
|
/* vim: set ft=c : */
|
||
|
--- 14,20 ----
|
||
|
void mzvim_reset_timer __ARGS((void));
|
||
|
void *mzvim_eval_string __ARGS((char_u *str));
|
||
|
int mzthreads_allowed __ARGS((void));
|
||
|
! int mzscheme_main __ARGS((int argc, char **argv));
|
||
|
void do_mzeval __ARGS((char_u *str, typval_T *rettv));
|
||
|
+ int vim_main2 __ARGS((int argc, char **argv));
|
||
|
/* vim: set ft=c : */
|
||
|
*** ../vim-7.3.440/src/version.c 2012-02-12 01:35:06.000000000 +0100
|
||
|
--- src/version.c 2012-02-12 01:54:14.000000000 +0100
|
||
|
***************
|
||
|
*** 716,717 ****
|
||
|
--- 716,719 ----
|
||
|
{ /* Add new patch number below this line */
|
||
|
+ /**/
|
||
|
+ 441,
|
||
|
/**/
|
||
|
|
||
|
--
|
||
|
hundred-and-one symptoms of being an internet addict:
|
||
|
43. You tell the kids they can't use the computer because "Daddy's got work to
|
||
|
do" and you don't even have a job.
|
||
|
|
||
|
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
|
||
|
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
|
||
|
\\\ an exciting new programming language -- http://www.Zimbu.org ///
|
||
|
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
|