]> git.pld-linux.org Git - packages/vim.git/blame - 7.3.441
- up to 7.3.600
[packages/vim.git] / 7.3.441
CommitLineData
03d4279c
AM
1To: vim_dev@googlegroups.com
2Subject: Patch 7.3.441
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.3.441
11Problem: Newer versions of MzScheme (Racket) require earlier (trampolined)
12 initialisation.
13Solution: Call mzscheme_main() early in main(). (Sergey Khorev)
14Files: src/Make_mvc.mak, src/if_mzsch.c, src/main.c,
15 src/proto/if_mzsch.pro
16
17
18*** ../vim-7.3.440/src/Make_mvc.mak 2011-09-14 19:01:38.000000000 +0200
19--- src/Make_mvc.mak 2012-02-12 01:46:05.000000000 +0100
20***************
21*** 740,745 ****
22--- 740,747 ----
23 !endif
24 !endif
25 MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
26+ # increase stack size
27+ MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
28 !endif
29
30 # Perl interface
31*** ../vim-7.3.440/src/if_mzsch.c 2010-11-03 21:59:23.000000000 +0100
32--- src/if_mzsch.c 2012-02-12 01:47:31.000000000 +0100
33***************
34*** 31,38 ****
35 * depend". */
36 #if defined(FEAT_MZSCHEME) || defined(PROTO)
37
38- #include <assert.h>
39-
40 /* Base data structures */
41 #define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
42 #define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
43--- 31,36 ----
44***************
45*** 559,575 ****
46 hMzSch = vimLoadLib(sch_dll);
47 hMzGC = vimLoadLib(gc_dll);
48
49! if (!hMzSch)
50 {
51 if (verbose)
52! EMSG2(_(e_loadlib), sch_dll);
53 return FAIL;
54 }
55
56! if (!hMzGC)
57 {
58 if (verbose)
59! EMSG2(_(e_loadlib), gc_dll);
60 return FAIL;
61 }
62
63--- 557,573 ----
64 hMzSch = vimLoadLib(sch_dll);
65 hMzGC = vimLoadLib(gc_dll);
66
67! if (!hMzGC)
68 {
69 if (verbose)
70! EMSG2(_(e_loadlib), gc_dll);
71 return FAIL;
72 }
73
74! if (!hMzSch)
75 {
76 if (verbose)
77! EMSG2(_(e_loadlib), sch_dll);
78 return FAIL;
79 }
80
81***************
82*** 798,862 ****
83 static __declspec(thread) void *tls_space;
84 #endif
85
86! void
87! mzscheme_main(void)
88 {
89 #if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
90 scheme_register_tls_space(&tls_space, 0);
91 #endif
92! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
93! /* use trampoline for precise GC in MzScheme >= 4.x */
94! scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
95 #else
96! mzscheme_env_main(NULL, 0, NULL);
97 #endif
98 }
99
100 static int
101! mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
102 {
103! /* neither argument nor return values are used */
104! #ifdef MZ_PRECISE_GC
105! # if MZSCHEME_VERSION_MAJOR < 400
106! /*
107! * Starting from version 4.x, embedding applications must use
108! * scheme_main_setup/scheme_main_stack_setup trampolines
109! * rather than setting stack base directly with scheme_set_stack_base
110! */
111 Scheme_Object *dummy = NULL;
112 MZ_GC_DECL_REG(1);
113 MZ_GC_VAR_IN_REG(0, dummy);
114
115 stack_base = &__gc_var_stack__;
116 # else
117- /* environment has been created by us by Scheme */
118- environment = env;
119- # endif
120- /*
121- * In 4.x, all activities must be performed inside trampoline
122- * so we are forced to initialise GC immediately
123- * This can be postponed in 3.x but I see no point in implementing
124- * a feature which will work in older versions only.
125- * One would better use conservative GC if he needs dynamic MzScheme
126- */
127- mzscheme_init();
128- #else
129 int dummy = 0;
130 stack_base = (void *)&dummy;
131 #endif
132! main_loop(FALSE, FALSE);
133! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
134 /* releasing dummy */
135 MZ_GC_REG();
136 MZ_GC_UNREG();
137 #endif
138! return 0;
139 }
140
141 static void
142 startup_mzscheme(void)
143 {
144! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
145 scheme_set_stack_base(stack_base, 1);
146 #endif
147
148--- 796,863 ----
149 static __declspec(thread) void *tls_space;
150 #endif
151
152! /*
153! * Since version 4.x precise GC requires trampolined startup.
154! * Futures and places in version 5.x need it too.
155! */
156! #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
157! || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
158! # ifdef DYNAMIC_MZSCHEME
159! # error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
160! # endif
161! # define TRAMPOLINED_MZVIM_STARTUP
162! #endif
163!
164! int
165! mzscheme_main(int argc, char** argv)
166 {
167 #if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
168 scheme_register_tls_space(&tls_space, 0);
169 #endif
170! #ifdef TRAMPOLINED_MZVIM_STARTUP
171! return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
172 #else
173! return mzscheme_env_main(NULL, argc, argv);
174 #endif
175 }
176
177 static int
178! mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
179 {
180! int vim_main_result;
181! #ifdef TRAMPOLINED_MZVIM_STARTUP
182! /* Scheme has created the environment for us */
183! environment = env;
184! #else
185! # ifdef MZ_PRECISE_GC
186 Scheme_Object *dummy = NULL;
187 MZ_GC_DECL_REG(1);
188 MZ_GC_VAR_IN_REG(0, dummy);
189
190 stack_base = &__gc_var_stack__;
191 # else
192 int dummy = 0;
193 stack_base = (void *)&dummy;
194+ # endif
195 #endif
196!
197! /* mzscheme_main is called as a trampoline from main.
198! * We trampoline into vim_main2
199! * Passing argc, argv through from mzscheme_main
200! */
201! vim_main_result = vim_main2(argc, argv);
202! #if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
203 /* releasing dummy */
204 MZ_GC_REG();
205 MZ_GC_UNREG();
206 #endif
207! return vim_main_result;
208 }
209
210 static void
211 startup_mzscheme(void)
212 {
213! #ifndef TRAMPOLINED_MZVIM_STARTUP
214 scheme_set_stack_base(stack_base, 1);
215 #endif
216
217***************
218*** 868,874 ****
219 MZ_REGISTER_STATIC(exn_message);
220 MZ_REGISTER_STATIC(vim_exn);
221
222! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
223 /* in newer versions of precise GC the initial env has been created */
224 environment = scheme_basic_env();
225 #endif
226--- 869,875 ----
227 MZ_REGISTER_STATIC(exn_message);
228 MZ_REGISTER_STATIC(vim_exn);
229
230! #ifndef TRAMPOLINED_MZVIM_STARTUP
231 /* in newer versions of precise GC the initial env has been created */
232 environment = scheme_basic_env();
233 #endif
234***************
235*** 3013,3019 ****
236 MZ_GC_REG();
237
238 tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
239- assert(nc <= 5);
240 mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
241 MZ_GC_CHECK();
242
243--- 3014,3019 ----
244*** ../vim-7.3.440/src/main.c 2011-12-08 15:57:54.000000000 +0100
245--- src/main.c 2012-02-12 01:49:50.000000000 +0100
246***************
247*** 554,559 ****
248--- 554,584 ----
249 debug_break_level = params.use_debug_break_level;
250 #endif
251
252+ #ifdef FEAT_MZSCHEME
253+ /*
254+ * Newer version of MzScheme (Racket) require earlier (trampolined)
255+ * initialisation via scheme_main_setup.
256+ * Implement this by initialising it as early as possible
257+ * and splitting off remaining Vim main into vim_main2
258+ */
259+ {
260+ /* Pack up preprocessed command line arguments.
261+ * It is safe because Scheme does not access argc/argv. */
262+ char *args[2];
263+ args[0] = (char *)fname;
264+ args[1] = (char *)&params;
265+ return mzscheme_main(2, args);
266+ }
267+ }
268+
269+ int vim_main2(int argc, char **argv)
270+ {
271+ char_u *fname = (char_u *)argv[0];
272+ mparm_T params;
273+
274+ memcpy(&params, argv[1], sizeof(params));
275+ #endif
276+
277 /* Execute --cmd arguments. */
278 exe_pre_commands(&params);
279
280***************
281*** 957,970 ****
282
283 /*
284 * Call the main command loop. This never returns.
285! * For embedded MzScheme the main_loop will be called by Scheme
286! * for proper stack tracking
287! */
288! #ifndef FEAT_MZSCHEME
289 main_loop(FALSE, FALSE);
290- #else
291- mzscheme_main();
292- #endif
293
294 return 0;
295 }
296--- 982,989 ----
297
298 /*
299 * Call the main command loop. This never returns.
300! */
301 main_loop(FALSE, FALSE);
302
303 return 0;
304 }
305*** ../vim-7.3.440/src/proto/if_mzsch.pro 2010-08-15 21:57:28.000000000 +0200
306--- src/proto/if_mzsch.pro 2012-02-12 01:50:57.000000000 +0100
307***************
308*** 14,19 ****
309 void mzvim_reset_timer __ARGS((void));
310 void *mzvim_eval_string __ARGS((char_u *str));
311 int mzthreads_allowed __ARGS((void));
312! void mzscheme_main __ARGS((void));
313 void do_mzeval __ARGS((char_u *str, typval_T *rettv));
314 /* vim: set ft=c : */
315--- 14,20 ----
316 void mzvim_reset_timer __ARGS((void));
317 void *mzvim_eval_string __ARGS((char_u *str));
318 int mzthreads_allowed __ARGS((void));
319! int mzscheme_main __ARGS((int argc, char **argv));
320 void do_mzeval __ARGS((char_u *str, typval_T *rettv));
321+ int vim_main2 __ARGS((int argc, char **argv));
322 /* vim: set ft=c : */
323*** ../vim-7.3.440/src/version.c 2012-02-12 01:35:06.000000000 +0100
324--- src/version.c 2012-02-12 01:54:14.000000000 +0100
325***************
326*** 716,717 ****
327--- 716,719 ----
328 { /* Add new patch number below this line */
329+ /**/
330+ 441,
331 /**/
332
333--
334hundred-and-one symptoms of being an internet addict:
33543. You tell the kids they can't use the computer because "Daddy's got work to
336 do" and you don't even have a job.
337
338 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
339/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
340\\\ an exciting new programming language -- http://www.Zimbu.org ///
341 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.058943 seconds and 4 git commands to generate.