home *** CD-ROM | disk | FTP | other *** search
- 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 ///
-