diff options
Diffstat (limited to 'source/ap/vim/patches/7.2.191')
-rw-r--r-- | source/ap/vim/patches/7.2.191 | 3705 |
1 files changed, 0 insertions, 3705 deletions
diff --git a/source/ap/vim/patches/7.2.191 b/source/ap/vim/patches/7.2.191 deleted file mode 100644 index f9c33571..00000000 --- a/source/ap/vim/patches/7.2.191 +++ /dev/null @@ -1,3705 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.191 -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.2.191 -Problem: Mzscheme interface doesn't work on Ubuntu. -Solution: Change autoconf rules. Define missing macro. Some changes to - avoid gcc warnings. Remove per-buffer namespace. (Sergey Khorev) -Files: runtime/doc/if_mzsch.txt, src/Makefile, src/Make_ming.mak, - src/Make_mvc.mak, src/auto/configure, src/configure.in, - src/config.mk.in, src/eval.c, src/if_mzsch.c, src/if_mzsch.h, - src/main.c, src/proto/if_mzsch.pro - - -*** ../vim-7.2.190/runtime/doc/if_mzsch.txt 2008-08-09 19:36:48.000000000 +0200 ---- runtime/doc/if_mzsch.txt 2009-05-26 18:49:53.000000000 +0200 -*************** -*** 1,4 **** -! *if_mzsch.txt* For Vim version 7.2. Last change: 2008 Jun 28 - - - VIM REFERENCE MANUAL by Sergey Khorev ---- 1,4 ---- -! *if_mzsch.txt* For Vim version 7.2. Last change: 2009 May 26 - - - VIM REFERENCE MANUAL by Sergey Khorev -*************** -*** 42,51 **** - - *:mzfile* *:mzf* - :[range]mzf[ile] {file} Execute the MzScheme script in {file}. {not in Vi} -- All statements are executed in the namespace of the -- buffer that was current during :mzfile start. -- If you want to access other namespaces, use -- 'parameterize'. - - All of these commands do essentially the same thing - they execute a piece of - MzScheme code, with the "current range" set to the given line ---- 42,47 ---- -*************** -*** 54,61 **** - In the case of :mzscheme, the code to execute is in the command-line. - In the case of :mzfile, the code to execute is the contents of the given file. - -- Each buffer has its own MzScheme namespace. Global namespace is bound to -- the "global-namespace" value from the 'vimext' module. - MzScheme interface defines exception exn:vim, derived from exn. - It is raised for various Vim errors. - ---- 50,55 ---- -*************** -*** 79,118 **** - e.g.: > - :mzscheme (require (prefix vim- vimext)) - < -! All the examples below assume this naming scheme. Note that you need to do -! this again for every buffer. - -- The auto-instantiation can be achieved with autocommands, e.g. you can put -- something like this in your .vimrc (EOFs should not have indentation): > -- function s:MzRequire() -- if has("mzscheme") -- :mz << EOF -- (require (prefix vim- vimext)) -- (let ((buf (vim-get-buff-by-name (vim-eval "expand(\"<afile>\")")))) -- (when (and buf (not (eq? buf (vim-curr-buff)))) -- (parameterize ((current-namespace (vim-get-buff-namespace buf))) -- (namespace-attach-module vim-global-namespace 'vimext) -- (namespace-require '(prefix vim vimext))))) -- EOF -- endif -- endfunction -- -- function s:MzStartup() -- if has("mzscheme") -- au BufNew,BufNewFile,BufAdd,BufReadPre * :call s:MzRequire() -- :mz << EOF -- (current-library-collection-paths -- (cons -- (build-path (find-system-path 'addon-dir) (version) "collects") -- (current-library-collection-paths))) -- EOF -- endif -- endfunction -- -- call s:MzStartup() -- < -- -- The global namespace just instantiated this module with the prefix "vimext:". - *mzscheme-sandbox* - When executed in the |sandbox|, access to some filesystem and Vim interface - procedures is restricted. ---- 73,80 ---- - e.g.: > - :mzscheme (require (prefix vim- vimext)) - < -! All the examples below assume this naming scheme. - - *mzscheme-sandbox* - When executed in the |sandbox|, access to some filesystem and Vim interface - procedures is restricted. -*************** -*** 121,135 **** - 2. Examples *mzscheme-examples* - > - :mzscheme (display "Hello") - :mzscheme (vim-set-buff-line 10 "This is line #10") - < - Inline script usage: > - function! <SID>SetFirstLine() - :mz << EOF - (display "!!!") - (vim-set-buff-line 1 "This is line #1") - (vim-beep) -! EOF - endfunction - - nmap <F9> :call <SID>SetFirstLine() <CR> ---- 83,102 ---- - 2. Examples *mzscheme-examples* - > - :mzscheme (display "Hello") -+ :mz (display (string-append "Using MzScheme version " (version))) -+ :mzscheme (require (prefix vim- vimext)) ; for MzScheme < 4.x -+ :mzscheme (require (prefix-in vim- 'vimext)) ; MzScheme 4.x - :mzscheme (vim-set-buff-line 10 "This is line #10") - < - Inline script usage: > - function! <SID>SetFirstLine() - :mz << EOF - (display "!!!") -+ (require (prefix vim- vimext)) -+ ; for newer versions (require (prefix-in vim- 'vimext)) - (vim-set-buff-line 1 "This is line #1") - (vim-beep) -! EOF - endfunction - - nmap <F9> :call <SID>SetFirstLine() <CR> -*************** -*** 137,153 **** - File execution: > - :mzfile supascript.scm - < -! Accessing the current buffer namespace from an MzScheme program running in -! another buffer within |:mzfile|-executed script : > -! ; Move to the window below -! (vim-command "wincmd j") -! ; execute in the context of buffer, to which window belongs -! ; assume that buffer has 'textstring' defined -! (parameterize ((current-namespace -! (vim-get-buff-namespace (vim-curr-buff)))) -! (eval '(vim-set-buff-line 1 textstring))) -! < - - ============================================================================== - 3. Threads *mzscheme-threads* - ---- 104,136 ---- - File execution: > - :mzfile supascript.scm - < -! Vim exception handling: > -! :mz << EOF -! (require (prefix vim- vimext)) -! ; for newer versions (require (prefix-in vim- 'vimext)) -! (with-handlers -! ([exn:vim? (lambda (e) (display (exn-message e)))]) -! (vim-eval "nonsense-string")) -! EOF -! < -! Auto-instantiation of vimext module (can be placed in your |vimrc|): > -! function! MzRequire() -! :redir => l:mzversion -! :mz (version) -! :redir END -! if strpart(l:mzversion, 1, 1) < "4" -! " MzScheme versions < 4.x: -! :mz (require (prefix vim- vimext)) -! else -! " newer versions: -! :mz (require (prefix-in vim- 'vimext)) -! endif -! endfunction - -+ if has("mzscheme") -+ silent call MzRequire() -+ endif -+ < - ============================================================================== - 3. Threads *mzscheme-threads* - -*************** -*** 168,178 **** - Common - ------ - (command {command-string}) Perform the vim ":Ex" style command. -! (eval {expr-string}) Evaluate the vim expression to a string. -! A |List| is turned into a string by -! joining the items and inserting line -! breaks. -! NOTE clashes with MzScheme eval - (range-start) Start/End of the range passed with - (range-end) the Scheme command. - (beep) beep ---- 151,161 ---- - Common - ------ - (command {command-string}) Perform the vim ":Ex" style command. -! (eval {expr-string}) Evaluate the vim expression into -! respective MzScheme object: |Lists| are -! represented as Scheme lists, -! |Dictionaries| as hash tables. -! NOTE the name clashes with MzScheme eval - (range-start) Start/End of the range passed with - (range-end) the Scheme command. - (beep) beep -*************** -*** 186,192 **** - be set. The symbol 'global can be passed - as {buffer-or-window}. Then |:setglobal| - will be used. -- global-namespace The MzScheme main namespace. - - Buffers *mzscheme-buffer* - ------- ---- 169,174 ---- -*************** -*** 228,234 **** - if there is no such buffer. - (get-buff-by-num {buffernum}) Get a buffer by its number (return #f if - there is no buffer with this number). -- (get-buff-namespace [buffer]) Get buffer namespace. - - Windows *mzscheme-window* - ------ ---- 210,215 ---- -*************** -*** 250,256 **** - (set-cursor (line . col) [window]) Set cursor position. - - ============================================================================== -! 5. Dynamic loading *mzscheme-dynamic* - - On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| - output then includes |+mzscheme/dyn|. ---- 231,237 ---- - (set-cursor (line . col) [window]) Set cursor position. - - ============================================================================== -! 5. Dynamic loading *mzscheme-dynamic* *E812* - - On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| - output then includes |+mzscheme/dyn|. -*** ../vim-7.2.190/src/Makefile 2009-05-26 18:12:19.000000000 +0200 ---- src/Makefile 2009-05-26 22:54:48.000000000 +0200 -*************** -*** 536,542 **** - # Use this with GCC to check for mistakes, unused arguments, etc. - #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code - #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers -! #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code - - # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond - # allocated memory (and makes every malloc()/free() very slow). ---- 536,542 ---- - # Use this with GCC to check for mistakes, unused arguments, etc. - #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code - #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers -! #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter - - # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond - # allocated memory (and makes every malloc()/free() very slow). -*************** -*** 2200,2205 **** ---- 2200,2206 ---- - -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c - -rm -f conftest* *~ auto/link.sed - -rm -rf $(APPDIR) -+ -rm -rf mzscheme_base.c - if test -d $(PODIR); then \ - cd $(PODIR); $(MAKE) prefix=$(DESTDIR)$(prefix) clean; \ - fi -*************** -*** 2433,2440 **** - objects/if_xcmdsrv.o: if_xcmdsrv.c - $(CCC) -o $@ if_xcmdsrv.c - -! objects/if_mzsch.o: if_mzsch.c - $(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c - - objects/if_perl.o: auto/if_perl.c - $(CCC) -o $@ auto/if_perl.c ---- 2434,2444 ---- - objects/if_xcmdsrv.o: if_xcmdsrv.c - $(CCC) -o $@ if_xcmdsrv.c - -! objects/if_mzsch.o: if_mzsch.c $(MZSCHEME_EXTRA) - $(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c -+ -+ mzscheme_base.c: -+ $(MZSCHEME_MZC) --c-mods mzscheme_base.c ++lib scheme/base - - objects/if_perl.o: auto/if_perl.c - $(CCC) -o $@ auto/if_perl.c -*** ../vim-7.2.190/src/Make_ming.mak 2007-08-12 15:24:29.000000000 +0200 ---- src/Make_ming.mak 2009-05-26 18:54:15.000000000 +0200 -*************** -*** 115,122 **** ---- 115,135 ---- - MZSCHEME_VER=205_000 - endif - -+ ifndef MZSCHEME_PRECISE_GC -+ MZSCHEME_PRECISE_GC=no -+ endif -+ -+ # for version 4.x we need to generate byte-code for Scheme base -+ ifndef MZSCHEME_GENERATE_BASE -+ MZSCHEME_GENERATE_BASE=no -+ endif -+ - ifeq (no,$(DYNAMIC_MZSCHEME)) -+ ifeq (yes,$(MZSCHEME_PRECISE_GC)) -+ MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER) -+ else - MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER) -+ endif - # the modern MinGW can dynamically link to dlls directly. - # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll - ifndef MZSCHEME_DLLS -*************** -*** 410,415 **** ---- 423,435 ---- - ifdef MZSCHEME - OBJ += $(OUTDIR)/if_mzsch.o - MZSCHEME_INCL = if_mzsch.h -+ ifeq (yes,$(MZSCHEME_GENERATE_BASE)) -+ CFLAGS += -DINCLUDE_MZSCHEME_BASE -+ MZ_EXTRA_DEP += mzscheme_base.c -+ endif -+ ifeq (yes,$(MZSCHEME_PRECISE_GC)) -+ CFLAGS += -DMZ_PRECISE_GC -+ endif - endif - ifdef PYTHON - OBJ += $(OUTDIR)/if_python.o -*************** -*** 588,593 **** ---- 608,619 ---- - $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC) - $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o - -+ $(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP) -+ $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o -+ -+ mzscheme_base.c: -+ $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base -+ - pathdef.c: $(INCL) - ifneq (sh.exe, $(SHELL)) - @echo creating pathdef.c -*** ../vim-7.2.190/src/Make_mvc.mak 2009-02-04 18:34:54.000000000 +0100 ---- src/Make_mvc.mak 2009-05-26 18:54:51.000000000 +0200 -*************** -*** 34,39 **** ---- 34,40 ---- - # MZSCHEME=[Path to MzScheme directory] - # DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically) - # MZSCHEME_VER=[version, 205_000, ...] -+ # MZSCHEME_DEBUG=no - # - # Perl interface: - # PERL=[Path to Perl directory] -*************** -*** 621,635 **** ---- 622,658 ---- - MZSCHEME_VER = 205_000 - !endif - CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include -+ !if EXIST("$(MZSCHEME)\collects\scheme\base.ss") -+ # for MzScheme 4.x we need to include byte code for basic Scheme stuff -+ MZSCHEME_EXTRA_DEP = mzscheme_base.c -+ CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE -+ !endif -+ !if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \ -+ && !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib") -+ !message Building with Precise GC -+ MZSCHEME_PRECISE_GC = yes -+ CFLAGS = $(CFLAGS) -DMZ_PRECISE_GC -+ !endif - !if "$(DYNAMIC_MZSCHEME)" == "yes" -+ !if "$(MZSCHEME_PRECISE_GC)" == "yes" -+ !error MzScheme with Precise GC cannot be loaded dynamically -+ !endif - !message MzScheme DLLs will be loaded dynamically - CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \ - -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \ - -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\" - !else -+ !if "$(MZSCHEME_DEBUG)" == "yes" -+ CFLAGS = $(CFLAGS) -DMZSCHEME_FORCE_GC -+ !endif -+ !if "$(MZSCHEME_PRECISE_GC)" == "yes" -+ # Precise GC does not use separate dll -+ MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib -+ !else - MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \ - $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib - !endif -+ !endif - MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj - !endif - -*************** -*** 930,938 **** - $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c $(INCL) - $(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c - -! $(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c $(INCL) - $(CC) $(CFLAGS) if_mzsch.c \ - -DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\" - - $(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c $(INCL) - $(CC) $(CFLAGS) $(PYTHON_INC) if_python.c ---- 953,963 ---- - $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c $(INCL) - $(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c - -! $(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c $(INCL) $(MZSCHEME_EXTRA_DEP) - $(CC) $(CFLAGS) if_mzsch.c \ - -DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\" -+ mzscheme_base.c: -+ $(MZSCHEME)\mzc --c-mods mzscheme_base.c ++lib scheme/base - - $(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c $(INCL) - $(CC) $(CFLAGS) $(PYTHON_INC) if_python.c -*** ../vim-7.2.190/src/auto/configure 2009-05-21 23:25:38.000000000 +0200 ---- src/auto/configure 2009-05-26 19:12:29.000000000 +0200 -*************** -*** 701,706 **** ---- 701,708 ---- - shrpenv - vi_cv_perllib - vi_cv_path_perl -+ MZSCHEME_MZC -+ MZSCHEME_EXTRA - MZSCHEME_CFLAGS - MZSCHEME_LIBS - MZSCHEME_PRO -*************** -*** 4641,4648 **** - $as_echo "\"$PLTHOME\"" >&6; } - vi_cv_path_mzscheme_pfx="$PLTHOME" - else -! { $as_echo "$as_me:$LINENO: result: \"not set\"" >&5 -! $as_echo "\"not set\"" >&6; } - # Extract the first word of "mzscheme", so it can be a program name with args. - set dummy mzscheme; ac_word=$2 - { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 ---- 4643,4650 ---- - $as_echo "\"$PLTHOME\"" >&6; } - vi_cv_path_mzscheme_pfx="$PLTHOME" - else -! { $as_echo "$as_me:$LINENO: result: not set" >&5 -! $as_echo "not set" >&6; } - # Extract the first word of "mzscheme", so it can be a program name with args. - set dummy mzscheme; ac_word=$2 - { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 -*************** -*** 4697,4712 **** - if test "${vi_cv_path_mzscheme_pfx+set}" = set; then - $as_echo_n "(cached) " >&6 - else -! vi_cv_path_mzscheme_pfx=` -! ${vi_cv_path_mzscheme} -evm \ -! "(display (simplify-path \ - (build-path (call-with-values \ - (lambda () (split-path (find-system-path (quote exec-file)))) \ -! (lambda (base name must-be-dir?) base)) (quote up))))"` - fi - { $as_echo "$as_me:$LINENO: result: $vi_cv_path_mzscheme_pfx" >&5 - $as_echo "$vi_cv_path_mzscheme_pfx" >&6; } -! vi_cv_path_mzscheme_pfx=`echo "$vi_cv_path_mzscheme_pfx" | sed 's+/$++'` - fi - fi - fi ---- 4699,4714 ---- - if test "${vi_cv_path_mzscheme_pfx+set}" = set; then - $as_echo_n "(cached) " >&6 - else -! echo "(display (simplify-path \ - (build-path (call-with-values \ - (lambda () (split-path (find-system-path (quote exec-file)))) \ -! (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm -! vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \ -! sed -e 's+/$++'` - fi - { $as_echo "$as_me:$LINENO: result: $vi_cv_path_mzscheme_pfx" >&5 - $as_echo "$vi_cv_path_mzscheme_pfx" >&6; } -! rm -f mzdirs.scm - fi - fi - fi -*************** -*** 4716,4736 **** - { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include" >&5 - $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include... " >&6; } - if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then -! { $as_echo "$as_me:$LINENO: result: \"yes\"" >&5 -! $as_echo "\"yes\"" >&6; } - else -! { $as_echo "$as_me:$LINENO: result: \"no\"" >&5 -! $as_echo "\"no\"" >&6; } -! { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include" >&5 -! $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include... " >&6; } - if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then -! { $as_echo "$as_me:$LINENO: result: \"yes\"" >&5 -! $as_echo "\"yes\"" >&6; } -! SCHEME_INC=/plt - else -! { $as_echo "$as_me:$LINENO: result: \"no\"" >&5 -! $as_echo "\"no\"" >&6; } -! vi_cv_path_mzscheme_pfx= - fi - fi - fi ---- 4718,4749 ---- - { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include" >&5 - $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include... " >&6; } - if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then -! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include -! { $as_echo "$as_me:$LINENO: result: yes" >&5 -! $as_echo "yes" >&6; } - else -! { $as_echo "$as_me:$LINENO: result: no" >&5 -! $as_echo "no" >&6; } -! { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt" >&5 -! $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt... " >&6; } - if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then -! { $as_echo "$as_me:$LINENO: result: yes" >&5 -! $as_echo "yes" >&6; } -! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt - else -! { $as_echo "$as_me:$LINENO: result: no" >&5 -! $as_echo "no" >&6; } -! { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in /usr/include/plt/" >&5 -! $as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; } -! if test -f /usr/include/plt/scheme.h; then -! { $as_echo "$as_me:$LINENO: result: yes" >&5 -! $as_echo "yes" >&6; } -! SCHEME_INC=/usr/include/plt -! else -! { $as_echo "$as_me:$LINENO: result: no" >&5 -! $as_echo "no" >&6; } -! vi_cv_path_mzscheme_pfx= -! fi - fi - fi - fi -*************** -*** 4738,4758 **** - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - if test "x$MACOSX" = "xyes"; then - MZSCHEME_LIBS="-framework PLT_MzScheme" - elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then - MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" - else -! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" - if test "$GCC" = yes; then -! MZSCHEME_LIBS="$MZSCHEME_LIBS -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" - elif test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then -! MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib" - fi - fi - if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then - SCHEME_COLLECTS=lib/plt/ - fi -! MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC} \ - -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" - MZSCHEME_SRC="if_mzsch.c" - MZSCHEME_OBJ="objects/if_mzsch.o" ---- 4751,4784 ---- - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - if test "x$MACOSX" = "xyes"; then - MZSCHEME_LIBS="-framework PLT_MzScheme" -+ elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then -+ MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a" -+ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" - elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then - MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" - else -! if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then -! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m" -! MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" -! else -! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" -! fi - if test "$GCC" = yes; then -! MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" - elif test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then -! MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib" - fi - fi - if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then - SCHEME_COLLECTS=lib/plt/ - fi -! if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then -! MZSCHEME_EXTRA="mzscheme_base.c" -! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE" -! MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" -! fi -! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \ - -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" - MZSCHEME_SRC="if_mzsch.c" - MZSCHEME_OBJ="objects/if_mzsch.o" -*************** -*** 4767,4772 **** ---- 4793,4800 ---- - - - -+ -+ - fi - - -*** ../vim-7.2.190/src/configure.in 2009-05-21 23:25:38.000000000 +0200 ---- src/configure.in 2009-05-26 18:57:35.000000000 +0200 -*************** -*** 414,420 **** - AC_MSG_RESULT("$PLTHOME") - vi_cv_path_mzscheme_pfx="$PLTHOME" - else -! AC_MSG_RESULT("not set") - dnl -- try to find MzScheme executable - AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme) - ---- 414,420 ---- - AC_MSG_RESULT("$PLTHOME") - vi_cv_path_mzscheme_pfx="$PLTHOME" - else -! AC_MSG_RESULT(not set) - dnl -- try to find MzScheme executable - AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme) - -*************** -*** 430,443 **** - if test "X$vi_cv_path_mzscheme" != "X"; then - dnl -- find where MzScheme thinks it was installed - AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx, -! [ vi_cv_path_mzscheme_pfx=` -! ${vi_cv_path_mzscheme} -evm \ -! "(display (simplify-path \ - (build-path (call-with-values \ - (lambda () (split-path (find-system-path (quote exec-file)))) \ -! (lambda (base name must-be-dir?) base)) (quote up))))"` ]) -! dnl Remove a trailing slash. -! vi_cv_path_mzscheme_pfx=`echo "$vi_cv_path_mzscheme_pfx" | sed 's+/$++'` - fi - fi - fi ---- 430,445 ---- - if test "X$vi_cv_path_mzscheme" != "X"; then - dnl -- find where MzScheme thinks it was installed - AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx, -! dnl different versions of MzScheme differ in command line processing -! dnl use universal approach -! echo "(display (simplify-path \ - (build-path (call-with-values \ - (lambda () (split-path (find-system-path (quote exec-file)))) \ -! (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm -! dnl Remove a trailing slash -! [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \ -! sed -e 's+/$++'` ]) -! rm -f mzdirs.scm - fi - fi - fi -*************** -*** 446,461 **** - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include) - if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then -! AC_MSG_RESULT("yes") - else -! AC_MSG_RESULT("no") -! AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include) - if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then -! AC_MSG_RESULT("yes") -! SCHEME_INC=/plt - else -! AC_MSG_RESULT("no") -! vi_cv_path_mzscheme_pfx= - fi - fi - fi ---- 448,471 ---- - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include) - if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then -! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include -! AC_MSG_RESULT(yes) - else -! AC_MSG_RESULT(no) -! AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt) - if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then -! AC_MSG_RESULT(yes) -! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt - else -! AC_MSG_RESULT(no) -! AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/) -! if test -f /usr/include/plt/scheme.h; then -! AC_MSG_RESULT(yes) -! SCHEME_INC=/usr/include/plt -! else -! AC_MSG_RESULT(no) -! vi_cv_path_mzscheme_pfx= -! fi - fi - fi - fi -*************** -*** 463,485 **** - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - if test "x$MACOSX" = "xyes"; then - MZSCHEME_LIBS="-framework PLT_MzScheme" - elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then - MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" - else -! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" - if test "$GCC" = yes; then - dnl Make Vim remember the path to the library. For when it's not in - dnl $LD_LIBRARY_PATH. -! MZSCHEME_LIBS="$MZSCHEME_LIBS -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" - elif test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then -! MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib" - fi - fi - if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then - SCHEME_COLLECTS=lib/plt/ - fi -! MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC} \ - -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" - MZSCHEME_SRC="if_mzsch.c" - MZSCHEME_OBJ="objects/if_mzsch.o" ---- 473,510 ---- - if test "X$vi_cv_path_mzscheme_pfx" != "X"; then - if test "x$MACOSX" = "xyes"; then - MZSCHEME_LIBS="-framework PLT_MzScheme" -+ elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then -+ MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a" -+ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" - elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then - MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" - else -! dnl Using shared objects -! if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then -! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m" -! MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" -! else -! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" -! fi - if test "$GCC" = yes; then - dnl Make Vim remember the path to the library. For when it's not in - dnl $LD_LIBRARY_PATH. -! MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" - elif test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then -! MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib" - fi - fi - if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then - SCHEME_COLLECTS=lib/plt/ - fi -! if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then -! dnl need to generate bytecode for MzScheme base -! MZSCHEME_EXTRA="mzscheme_base.c" -! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE" -! MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" -! fi -! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \ - -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" - MZSCHEME_SRC="if_mzsch.c" - MZSCHEME_OBJ="objects/if_mzsch.o" -*************** -*** 491,496 **** ---- 516,523 ---- - AC_SUBST(MZSCHEME_PRO) - AC_SUBST(MZSCHEME_LIBS) - AC_SUBST(MZSCHEME_CFLAGS) -+ AC_SUBST(MZSCHEME_EXTRA) -+ AC_SUBST(MZSCHEME_MZC) - fi - - -*** ../vim-7.2.190/src/config.mk.in 2008-06-25 00:49:03.000000000 +0200 ---- src/config.mk.in 2009-05-26 18:57:49.000000000 +0200 -*************** -*** 41,46 **** ---- 41,48 ---- - MZSCHEME_OBJ = @MZSCHEME_OBJ@ - MZSCHEME_CFLAGS = @MZSCHEME_CFLAGS@ - MZSCHEME_PRO = @MZSCHEME_PRO@ -+ MZSCHEME_EXTRA = @MZSCHEME_EXTRA@ -+ MZSCHEME_MZC = @MZSCHEME_MZC@ - - PERL = @vi_cv_path_perl@ - PERLLIB = @vi_cv_perllib@ -*** ../vim-7.2.190/src/eval.c 2009-05-24 13:40:17.000000000 +0200 ---- src/eval.c 2009-05-26 18:58:20.000000000 +0200 -*************** -*** 5866,5872 **** - return item1 == NULL && item2 == NULL; - } - -! #if defined(FEAT_PYTHON) || defined(PROTO) - /* - * Return the dictitem that an entry in a hashtable points to. - */ ---- 5866,5872 ---- - return item1 == NULL && item2 == NULL; - } - -! #if defined(FEAT_PYTHON) || defined(FEAT_MZSCHEME) || defined(PROTO) - /* - * Return the dictitem that an entry in a hashtable points to. - */ -*** ../vim-7.2.190/src/if_mzsch.c 2009-05-17 16:23:20.000000000 +0200 ---- src/if_mzsch.c 2009-05-26 19:24:18.000000000 +0200 -*************** -*** 4,9 **** ---- 4,11 ---- - * Original work by Brent Fulgham <bfulgham@debian.org> - * (Based on lots of help from Matthew Flatt) - * -+ * TODO Convert byte-strings to char strings? -+ * - * This consists of six parts: - * 1. MzScheme interpreter main program - * 2. Routines that handle the external interface between MzScheme and -*************** -*** 18,24 **** - * garbage collector will do it self - * 2. Requires at least NORMAL features. I can't imagine why one may want - * to build with SMALL or TINY features but with MzScheme interface. -! * 3. I don't use K&R-style functions. Anyway, MzScheme headers are ANSI. - */ - - #include "vim.h" ---- 20,26 ---- - * garbage collector will do it self - * 2. Requires at least NORMAL features. I can't imagine why one may want - * to build with SMALL or TINY features but with MzScheme interface. -! * 3. I don't use K&R-style functions. Anyways, MzScheme headers are ANSI. - */ - - #include "vim.h" -*************** -*** 29,42 **** - * depend". */ - #if defined(FEAT_MZSCHEME) || defined(PROTO) - - /* 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) - - typedef struct - { -! Scheme_Type tag; -! Scheme_Env *env; - buf_T *buf; - } vim_mz_buffer; - ---- 31,45 ---- - * 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) - - typedef struct - { -! Scheme_Object so; - buf_T *buf; - } vim_mz_buffer; - -*************** -*** 44,50 **** - - typedef struct - { -! Scheme_Type tag; - win_T *win; - } vim_mz_window; - ---- 47,53 ---- - - typedef struct - { -! Scheme_Object so; - win_T *win; - } vim_mz_window; - -*************** -*** 67,85 **** - Scheme_Object *port; - } Port_Info; - -- /* info for closed prim */ -- /* -- * data have different means: -- * for do_eval it is char* -- * for do_apply is Apply_Onfo* -- * for do_load is Port_Info* -- */ -- typedef struct -- { -- void *data; -- Scheme_Env *env; -- } Cmd_Info; -- - /* info for do_apply */ - typedef struct - { ---- 70,75 ---- -*************** -*** 122,128 **** - static Scheme_Object *insert_buffer_line_list(void *, int, Scheme_Object **); - static Scheme_Object *get_range_start(void *, int, Scheme_Object **); - static Scheme_Object *get_range_end(void *, int, Scheme_Object **); -- static Scheme_Object *get_buffer_namespace(void *, int, Scheme_Object **); - static vim_mz_buffer *get_vim_curr_buffer(void); - - /* Window-related commands */ ---- 112,117 ---- -*************** -*** 163,170 **** - static int do_mzscheme_command(exarg_T *, void *, Scheme_Closed_Prim *what); - static void startup_mzscheme(void); - static char *string_to_line(Scheme_Object *obj); -- static int mzscheme_io_init(void); -- static void mzscheme_interface_init(vim_mz_buffer *self); - static void do_output(char *mesg, long len); - static void do_printf(char *format, ...); - static void do_flush(void); ---- 152,157 ---- -*************** -*** 174,192 **** - static Scheme_Object *do_eval(void *, int noargc, Scheme_Object **noargv); - static Scheme_Object *do_load(void *, int noargc, Scheme_Object **noargv); - static Scheme_Object *do_apply(void *, int noargc, Scheme_Object **noargv); -! static void register_vim_exn(Scheme_Env *env); - static vim_mz_buffer *get_buffer_arg(const char *fname, int argnum, - int argc, Scheme_Object **argv); - static vim_mz_window *get_window_arg(const char *fname, int argnum, - int argc, Scheme_Object **argv); -- static void add_vim_exn(Scheme_Env *env); - static int line_in_range(linenr_T, buf_T *); - static void check_line_range(linenr_T, buf_T *); - static void mz_fix_cursor(int lo, int hi, int extra); - -! static int eval_in_namespace(void *, Scheme_Closed_Prim *, Scheme_Env *, -! Scheme_Object **ret); -! static void make_modules(Scheme_Env *); - - #ifdef DYNAMIC_MZSCHEME - ---- 161,212 ---- - static Scheme_Object *do_eval(void *, int noargc, Scheme_Object **noargv); - static Scheme_Object *do_load(void *, int noargc, Scheme_Object **noargv); - static Scheme_Object *do_apply(void *, int noargc, Scheme_Object **noargv); -! static void register_vim_exn(void); - static vim_mz_buffer *get_buffer_arg(const char *fname, int argnum, - int argc, Scheme_Object **argv); - static vim_mz_window *get_window_arg(const char *fname, int argnum, - int argc, Scheme_Object **argv); - static int line_in_range(linenr_T, buf_T *); - static void check_line_range(linenr_T, buf_T *); - static void mz_fix_cursor(int lo, int hi, int extra); - -! static int eval_with_exn_handling(void *, Scheme_Closed_Prim *, -! Scheme_Object **ret); -! static void make_modules(void); -! static void init_exn_catching_apply(void); -! static int mzscheme_env_main(Scheme_Env *env, int argc, char **argv); -! static int mzscheme_init(void); -! #ifdef FEAT_EVAL -! static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth, -! Scheme_Hash_Table *visited); -! #endif -! -! #ifdef MZ_PRECISE_GC -! static int buffer_size_proc(void *obj) -! { -! return gcBYTES_TO_WORDS(sizeof(vim_mz_buffer)); -! } -! static int buffer_mark_proc(void *obj) -! { -! return buffer_size_proc(obj); -! } -! static int buffer_fixup_proc(void *obj) -! { -! return buffer_size_proc(obj); -! } -! static int window_size_proc(void *obj) -! { -! return gcBYTES_TO_WORDS(sizeof(vim_mz_window)); -! } -! static int window_mark_proc(void *obj) -! { -! return window_size_proc(obj); -! } -! static int window_fixup_proc(void *obj) -! { -! return window_size_proc(obj); -! } -! #endif - - #ifdef DYNAMIC_MZSCHEME - -*************** -*** 260,267 **** - (Scheme_Closed_Prim *prim, void *data, const char *name, mzshort mina, - mzshort maxa); - static Scheme_Object *(*dll_scheme_make_integer_value)(long i); -- static Scheme_Object *(*dll_scheme_make_namespace)(int argc, -- Scheme_Object *argv[]); - static Scheme_Object *(*dll_scheme_make_pair)(Scheme_Object *car, - Scheme_Object *cdr); - static Scheme_Object *(*dll_scheme_make_prim_w_arity)(Scheme_Prim *prim, ---- 280,285 ---- -*************** -*** 311,316 **** ---- 329,345 ---- - static Scheme_Object *(*dll_scheme_char_string_to_path) - (Scheme_Object *s); - # endif -+ static Scheme_Hash_Table *(*dll_scheme_make_hash_table)(int type); -+ static void (*dll_scheme_hash_set)(Scheme_Hash_Table *table, -+ Scheme_Object *key, Scheme_Object *value); -+ static Scheme_Object *(*dll_scheme_hash_get)(Scheme_Hash_Table *table, -+ Scheme_Object *key); -+ static Scheme_Object *(*dll_scheme_make_double)(double d); -+ # ifdef INCLUDE_MZSCHEME_BASE -+ static Scheme_Object *(*dll_scheme_make_sized_byte_string)(char *chars, -+ long len, int copy); -+ static Scheme_Object *(*dll_scheme_namespace_require)(Scheme_Object *req); -+ # endif - - /* arrays are imported directly */ - # define scheme_eof dll_scheme_eof -*************** -*** 368,374 **** - # define scheme_lookup_global dll_scheme_lookup_global - # define scheme_make_closed_prim_w_arity dll_scheme_make_closed_prim_w_arity - # define scheme_make_integer_value dll_scheme_make_integer_value -- # define scheme_make_namespace dll_scheme_make_namespace - # define scheme_make_pair dll_scheme_make_pair - # define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity - # if MZSCHEME_VERSION_MAJOR < 299 ---- 397,402 ---- -*************** -*** 403,408 **** ---- 431,444 ---- - # define scheme_char_string_to_path \ - dll_scheme_char_string_to_path - # endif -+ # define scheme_make_hash_table dll_scheme_make_hash_table -+ # define scheme_hash_set dll_scheme_hash_set -+ # define scheme_hash_get dll_scheme_hash_get -+ # define scheme_make_double dll_scheme_make_double -+ # ifdef INCLUDE_MZSCHEME_BASE -+ # define scheme_make_sized_byte_string dll_scheme_make_sized_byte_string -+ # define scheme_namespace_require dll_scheme_namespace_require -+ # endif - - typedef struct - { -*************** -*** 468,474 **** - {"scheme_make_closed_prim_w_arity", - (void **)&dll_scheme_make_closed_prim_w_arity}, - {"scheme_make_integer_value", (void **)&dll_scheme_make_integer_value}, -- {"scheme_make_namespace", (void **)&dll_scheme_make_namespace}, - {"scheme_make_pair", (void **)&dll_scheme_make_pair}, - {"scheme_make_prim_w_arity", (void **)&dll_scheme_make_prim_w_arity}, - # if MZSCHEME_VERSION_MAJOR < 299 ---- 504,509 ---- -*************** -*** 502,510 **** - {"scheme_current_config", (void **)&dll_scheme_current_config}, - {"scheme_char_string_to_byte_string", - (void **)&dll_scheme_char_string_to_byte_string}, -! {"scheme_char_string_to_path", -! (void **)&dll_scheme_char_string_to_path}, - # endif - {NULL, NULL}}; - - static HINSTANCE hMzGC = 0; ---- 537,552 ---- - {"scheme_current_config", (void **)&dll_scheme_current_config}, - {"scheme_char_string_to_byte_string", - (void **)&dll_scheme_char_string_to_byte_string}, -! {"scheme_char_string_to_path", (void **)&dll_scheme_char_string_to_path}, - # endif -+ {"scheme_make_hash_table", (void **)&dll_scheme_make_hash_table}, -+ {"scheme_hash_set", (void **)&dll_scheme_hash_set}, -+ {"scheme_hash_get", (void **)&dll_scheme_hash_get}, -+ {"scheme_make_double", (void **)&dll_scheme_make_double}, -+ # ifdef INCLUDE_MZSCHEME_BASE -+ {"scheme_make_sized_byte_string", (void **)&dll_scheme_make_sized_byte_string}, -+ {"scheme_namespace_require", (void **)&dll_scheme_namespace_require}, -+ #endif - {NULL, NULL}}; - - static HINSTANCE hMzGC = 0; -*************** -*** 592,597 **** ---- 634,644 ---- - } - #endif /* DYNAMIC_MZSCHEME */ - -+ /* need to put it here for dynamic stuff to work */ -+ #ifdef INCLUDE_MZSCHEME_BASE -+ # include "mzscheme_base.c" -+ #endif -+ - /* - *======================================================================== - * 1. MzScheme interpreter startup -*************** -*** 601,621 **** - static Scheme_Type mz_buffer_type; - static Scheme_Type mz_window_type; - -! static int initialized = 0; - - /* global environment */ - static Scheme_Env *environment = NULL; - /* output/error handlers */ - static Scheme_Object *curout = NULL; - static Scheme_Object *curerr = NULL; -! /* vim:exn exception */ - static Scheme_Object *exn_catching_apply = NULL; - static Scheme_Object *exn_p = NULL; - static Scheme_Object *exn_message = NULL; - static Scheme_Object *vim_exn = NULL; /* Vim Error exception */ -! /* values for exn:vim - constructor, predicate, accessors etc */ -! static Scheme_Object *vim_exn_names = NULL; -! static Scheme_Object *vim_exn_values = NULL; - - static long range_start; - static long range_end; ---- 648,669 ---- - static Scheme_Type mz_buffer_type; - static Scheme_Type mz_window_type; - -! static int initialized = FALSE; - - /* global environment */ - static Scheme_Env *environment = NULL; - /* output/error handlers */ - static Scheme_Object *curout = NULL; - static Scheme_Object *curerr = NULL; -! /* exn:vim exception */ - static Scheme_Object *exn_catching_apply = NULL; - static Scheme_Object *exn_p = NULL; - static Scheme_Object *exn_message = NULL; - static Scheme_Object *vim_exn = NULL; /* Vim Error exception */ -! -! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 -! static void *stack_base = NULL; -! #endif - - static long range_start; - static long range_end; -*************** -*** 668,677 **** - timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) - # elif defined(FEAT_GUI_GTK) - static gint -! timer_proc(gpointer data UNUSED) - # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) - static void -! timer_proc(XtPointer timed_out UNUSED, XtIntervalId *interval_id UNUSED) - # elif defined(FEAT_GUI_MAC) - pascal void - timer_proc(EventLoopTimerRef theTimer, void *userData) ---- 716,725 ---- - timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) - # elif defined(FEAT_GUI_GTK) - static gint -! timer_proc(gpointer data) - # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) - static void -! timer_proc(XtPointer timed_out, XtIntervalId *interval_id) - # elif defined(FEAT_GUI_MAC) - pascal void - timer_proc(EventLoopTimerRef theTimer, void *userData) -*************** -*** 751,762 **** - #endif - } - - static void - startup_mzscheme(void) - { -! Scheme_Object *proc_make_security_guard; -! -! scheme_set_stack_base(NULL, 1); - - MZ_REGISTER_STATIC(environment); - MZ_REGISTER_STATIC(curout); ---- 799,862 ---- - #endif - } - -+ void -+ mzscheme_main(void) -+ { -+ #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, char **argv) -+ { -+ /* 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 - - MZ_REGISTER_STATIC(environment); - MZ_REGISTER_STATIC(curout); -*************** -*** 765,774 **** - MZ_REGISTER_STATIC(exn_p); - MZ_REGISTER_STATIC(exn_message); - MZ_REGISTER_STATIC(vim_exn); -- MZ_REGISTER_STATIC(vim_exn_names); -- MZ_REGISTER_STATIC(vim_exn_values); - - environment = scheme_basic_env(); - - /* redirect output */ - scheme_console_output = do_output; ---- 865,899 ---- - MZ_REGISTER_STATIC(exn_p); - 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 -+ MZ_GC_CHECK(); -+ -+ #ifdef INCLUDE_MZSCHEME_BASE -+ { -+ /* -+ * versions 4.x do not provide Scheme bindings by defaults -+ * we need to add them explicitly -+ */ -+ Scheme_Object *scheme_base_symbol = NULL; -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, scheme_base_symbol); -+ MZ_GC_REG(); -+ /* invoke function from generated and included base.c */ -+ declare_modules(environment); -+ scheme_base_symbol = scheme_intern_symbol("scheme/base"); -+ MZ_GC_CHECK(); -+ scheme_namespace_require(scheme_base_symbol); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); -+ } -+ #endif -+ register_vim_exn(); -+ /* use new environment to initialise exception handling */ -+ init_exn_catching_apply(); - - /* redirect output */ - scheme_console_output = do_output; -*************** -*** 776,823 **** - - #ifdef MZSCHEME_COLLECTS - /* setup 'current-library-collection-paths' parameter */ -- scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS, -- scheme_make_pair( - # if MZSCHEME_VERSION_MAJOR >= 299 -! scheme_char_string_to_path( -! scheme_byte_string_to_char_string( -! scheme_make_byte_string(MZSCHEME_COLLECTS))), - # else -! scheme_make_string(MZSCHEME_COLLECTS), - # endif -- scheme_null)); - #endif - #ifdef HAVE_SANDBOX -! /* setup sandbox guards */ -! proc_make_security_guard = scheme_lookup_global( -! scheme_intern_symbol("make-security-guard"), -! environment); -! if (proc_make_security_guard != NULL) -! { -! Scheme_Object *args[3]; -! Scheme_Object *guard; -! args[0] = scheme_get_param(scheme_config, MZCONFIG_SECURITY_GUARD); -! args[1] = scheme_make_prim_w_arity(sandbox_file_guard, -! "sandbox-file-guard", 3, 3); -! args[2] = scheme_make_prim_w_arity(sandbox_network_guard, -! "sandbox-network-guard", 4, 4); -! guard = scheme_apply(proc_make_security_guard, 3, args); -! scheme_set_param(scheme_config, MZCONFIG_SECURITY_GUARD, guard); - } - #endif - /* Create buffer and window types for use in Scheme code */ - mz_buffer_type = scheme_make_type("<vim-buffer>"); - mz_window_type = scheme_make_type("<vim-window>"); - -! register_vim_exn(environment); -! make_modules(environment); - - /* - * setup callback to receive notifications - * whether thread scheduling is (or not) required - */ - scheme_notify_multithread = notify_multithread; -- initialized = 1; - } - - /* ---- 901,1031 ---- - - #ifdef MZSCHEME_COLLECTS - /* setup 'current-library-collection-paths' parameter */ - # if MZSCHEME_VERSION_MAJOR >= 299 -! { -! Scheme_Object *coll_byte_string = NULL; -! Scheme_Object *coll_char_string = NULL; -! Scheme_Object *coll_path = NULL; -! Scheme_Object *coll_pair = NULL; -! Scheme_Config *config = NULL; -! -! MZ_GC_DECL_REG(5); -! MZ_GC_VAR_IN_REG(0, coll_byte_string); -! MZ_GC_VAR_IN_REG(1, coll_char_string); -! MZ_GC_VAR_IN_REG(2, coll_path); -! MZ_GC_VAR_IN_REG(3, coll_pair); -! MZ_GC_VAR_IN_REG(4, config); -! MZ_GC_REG(); -! coll_byte_string = scheme_make_byte_string(MZSCHEME_COLLECTS); -! MZ_GC_CHECK(); -! coll_char_string = scheme_byte_string_to_char_string(coll_byte_string); -! MZ_GC_CHECK(); -! coll_path = scheme_char_string_to_path(coll_char_string); -! MZ_GC_CHECK(); -! coll_pair = scheme_make_pair(coll_path, scheme_null); -! MZ_GC_CHECK(); -! config = scheme_config; -! MZ_GC_CHECK(); -! scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair); -! MZ_GC_CHECK(); -! MZ_GC_UNREG(); -! } - # else -! { -! Scheme_Object *coll_string = NULL; -! Scheme_Object *coll_pair = NULL; -! Scheme_Config *config = NULL; -! -! MZ_GC_DECL_REG(3); -! MZ_GC_VAR_IN_REG(0, coll_string); -! MZ_GC_VAR_IN_REG(1, coll_pair); -! MZ_GC_VAR_IN_REG(2, config); -! MZ_GC_REG(); -! coll_string = scheme_make_string(MZSCHEME_COLLECTS); -! MZ_GC_CHECK(); -! coll_pair = scheme_make_pair(coll_string, scheme_null); -! MZ_GC_CHECK(); -! config = scheme_config; -! MZ_GC_CHECK(); -! scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair); -! MZ_GC_CHECK(); -! MZ_GC_UNREG(); -! } - # endif - #endif - #ifdef HAVE_SANDBOX -! { -! Scheme_Object *make_security_guard = NULL; -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, make_security_guard); -! MZ_GC_REG(); -! -! #if MZSCHEME_VERSION_MAJOR < 400 -! { -! Scheme_Object *make_security_guard_symbol = NULL; -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, make_security_guard_symbol); -! MZ_GC_REG(); -! make_security_guard_symbol = scheme_intern_symbol("make-security-guard"); -! MZ_GC_CHECK(); -! make_security_guard = scheme_lookup_global( -! make_security_guard_symbol, environment); -! MZ_GC_UNREG(); -! } -! #else -! make_security_guard = scheme_builtin_value("make-security-guard"); -! MZ_GC_CHECK(); -! #endif -! -! /* setup sandbox guards */ -! if (make_security_guard != NULL) -! { -! Scheme_Object *args[3] = {NULL, NULL, NULL}; -! Scheme_Object *guard = NULL; -! Scheme_Config *config = NULL; -! MZ_GC_DECL_REG(5); -! MZ_GC_ARRAY_VAR_IN_REG(0, args, 3); -! MZ_GC_VAR_IN_REG(3, guard); -! MZ_GC_VAR_IN_REG(4, config); -! MZ_GC_REG(); -! config = scheme_config; -! MZ_GC_CHECK(); -! args[0] = scheme_get_param(config, MZCONFIG_SECURITY_GUARD); -! MZ_GC_CHECK(); -! args[1] = scheme_make_prim_w_arity(sandbox_file_guard, -! "sandbox-file-guard", 3, 3); -! args[2] = scheme_make_prim_w_arity(sandbox_network_guard, -! "sandbox-network-guard", 4, 4); -! guard = scheme_apply(make_security_guard, 3, args); -! MZ_GC_CHECK(); -! scheme_set_param(config, MZCONFIG_SECURITY_GUARD, guard); -! MZ_GC_CHECK(); -! MZ_GC_UNREG(); -! } -! MZ_GC_UNREG(); - } - #endif - /* Create buffer and window types for use in Scheme code */ - mz_buffer_type = scheme_make_type("<vim-buffer>"); -+ MZ_GC_CHECK(); - mz_window_type = scheme_make_type("<vim-window>"); -+ MZ_GC_CHECK(); -+ #ifdef MZ_PRECISE_GC -+ GC_register_traversers(mz_buffer_type, -+ buffer_size_proc, buffer_mark_proc, buffer_fixup_proc, -+ TRUE, TRUE); -+ GC_register_traversers(mz_window_type, -+ window_size_proc, window_mark_proc, window_fixup_proc, -+ TRUE, TRUE); -+ #endif - -! make_modules(); - - /* - * setup callback to receive notifications - * whether thread scheduling is (or not) required - */ - scheme_notify_multithread = notify_multithread; - } - - /* -*************** -*** 827,897 **** - static int - mzscheme_init(void) - { -- int do_require = FALSE; -- - if (!initialized) - { -- do_require = TRUE; - #ifdef DYNAMIC_MZSCHEME - if (!mzscheme_enabled(TRUE)) - { -! EMSG(_("???: Sorry, this command is disabled, the MzScheme library could not be loaded.")); - return -1; - } - #endif - startup_mzscheme(); -! -! if (mzscheme_io_init()) -! return -1; -! -! } -! /* recreate ports each call effectivelly clearing these ones */ -! curout = scheme_make_string_output_port(); -! curerr = scheme_make_string_output_port(); -! scheme_set_param(scheme_config, MZCONFIG_OUTPUT_PORT, curout); -! scheme_set_param(scheme_config, MZCONFIG_ERROR_PORT, curerr); -! -! if (do_require) -! { -! /* auto-instantiate in basic env */ -! eval_in_namespace("(require (prefix vimext: vimext))", do_eval, -! environment, NULL); - } -- -- return 0; -- } -- -- /* -- * This routine fills the namespace with various important routines that can -- * be used within MzScheme. -- */ -- static void -- mzscheme_interface_init(vim_mz_buffer *mzbuff) -- { -- Scheme_Object *attach; -- -- mzbuff->env = (Scheme_Env *)scheme_make_namespace(0, NULL); -- -- /* -- * attach instantiated modules from global namespace -- * so they can be easily instantiated in the buffer namespace -- */ -- attach = scheme_lookup_global( -- scheme_intern_symbol("namespace-attach-module"), -- environment); -- -- if (attach != NULL) - { -! Scheme_Object *ret; -! Scheme_Object *args[2]; -! -! args[0] = (Scheme_Object *)environment; -! args[1] = scheme_intern_symbol("vimext"); -! -! ret = (Scheme_Object *)mzvim_apply(attach, 2, args); - } - -! add_vim_exn(mzbuff->env); - } - - /* ---- 1035,1072 ---- - static int - mzscheme_init(void) - { - if (!initialized) - { - #ifdef DYNAMIC_MZSCHEME - if (!mzscheme_enabled(TRUE)) - { -! EMSG(_("E812: Sorry, this command is disabled, the MzScheme libraries could not be loaded.")); - return -1; - } - #endif - startup_mzscheme(); -! initialized = TRUE; - } - { -! Scheme_Config *config = NULL; -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, config); -! MZ_GC_REG(); -! config = scheme_config; -! MZ_GC_CHECK(); -! /* recreate ports each call effectivelly clearing these ones */ -! curout = scheme_make_string_output_port(); -! MZ_GC_CHECK(); -! curerr = scheme_make_string_output_port(); -! MZ_GC_CHECK(); -! scheme_set_param(config, MZCONFIG_OUTPUT_PORT, curout); -! MZ_GC_CHECK(); -! scheme_set_param(config, MZCONFIG_ERROR_PORT, curerr); -! MZ_GC_CHECK(); -! MZ_GC_UNREG(); - } - -! return 0; - } - - /* -*************** -*** 901,928 **** - */ - - /* -! * Evaluate command in namespace with exception handling - */ - static int -! eval_in_namespace(void *data, Scheme_Closed_Prim *what, Scheme_Env *env, -! Scheme_Object **ret) - { -! Scheme_Object *value; -! Scheme_Object *exn; -! Cmd_Info info; /* closure info */ -! -! info.data = data; -! info.env = env; -! -! scheme_set_param(scheme_config, MZCONFIG_ENV, -! (Scheme_Object *) env); -! /* -! * ensure all evaluations will be in current buffer namespace, -! * the second argument to scheme_eval_string isn't enough! -! */ -! value = _apply_thunk_catch_exceptions( -! scheme_make_closed_prim_w_arity(what, &info, "mzvim", 0, 0), -! &exn); - - if (!value) - { ---- 1076,1100 ---- - */ - - /* -! * Evaluate command with exception handling - */ - static int -! eval_with_exn_handling(void *data, Scheme_Closed_Prim *what, Scheme_Object **ret) - { -! Scheme_Object *value = NULL; -! Scheme_Object *exn = NULL; -! Scheme_Object *prim = NULL; -! -! MZ_GC_DECL_REG(3); -! MZ_GC_VAR_IN_REG(0, value); -! MZ_GC_VAR_IN_REG(1, exn); -! MZ_GC_VAR_IN_REG(2, prim); -! MZ_GC_REG(); -! -! prim = scheme_make_closed_prim_w_arity(what, data, "mzvim", 0, 0); -! MZ_GC_CHECK(); -! value = _apply_thunk_catch_exceptions(prim, &exn); -! MZ_GC_CHECK(); - - if (!value) - { -*************** -*** 930,938 **** - /* Got an exn? */ - if (value) - { -! scheme_display(value, curerr); /* Send to stderr-vim */ - do_flush(); - } - /* `raise' was called on some arbitrary value */ - return FAIL; - } ---- 1102,1112 ---- - /* Got an exn? */ - if (value) - { -! scheme_display(value, curerr); /* Send to stderr-vim */ -! MZ_GC_CHECK(); - do_flush(); - } -+ MZ_GC_UNREG(); - /* `raise' was called on some arbitrary value */ - return FAIL; - } -*************** -*** 941,949 **** ---- 1115,1127 ---- - *ret = value; - /* Print any result, as long as it's not a void */ - else if (!SCHEME_VOIDP(value)) -+ { - scheme_display(value, curout); /* Send to stdout-vim */ -+ MZ_GC_CHECK(); -+ } - - do_flush(); -+ MZ_GC_UNREG(); - return OK; - } - -*************** -*** 957,963 **** - range_start = eap->line1; - range_end = eap->line2; - -! return eval_in_namespace(data, what, get_vim_curr_buffer()->env, NULL); - } - - /* ---- 1135,1141 ---- - range_start = eap->line1; - range_end = eap->line2; - -! return eval_with_exn_handling(data, what, NULL); - } - - /* -*************** -*** 974,979 **** ---- 1152,1158 ---- - bp->buf = INVALID_BUFFER_VALUE; - buf->b_mzscheme_ref = NULL; - scheme_gc_ptr_ok(bp); -+ MZ_GC_CHECK(); - } - } - -*************** -*** 990,995 **** ---- 1169,1175 ---- - wp->win = INVALID_WINDOW_VALUE; - win->w_mzscheme_ref = NULL; - scheme_gc_ptr_ok(wp); -+ MZ_GC_CHECK(); - } - } - -*************** -*** 1014,1031 **** - } - } - -- /* eval MzScheme string */ -- void * -- mzvim_eval_string(char_u *str) -- { -- Scheme_Object *ret = NULL; -- if (mzscheme_init()) -- return FAIL; -- -- eval_in_namespace(str, do_eval, get_vim_curr_buffer()->env, &ret); -- return ret; -- } -- - /* - * apply MzScheme procedure with arguments, - * handling errors ---- 1194,1199 ---- -*************** -*** 1033,1075 **** - Scheme_Object * - mzvim_apply(Scheme_Object *proc, int argc, Scheme_Object **argv) - { -- Apply_Info data; -- Scheme_Object *ret = NULL; -- - if (mzscheme_init()) - return FAIL; - -! data.proc = proc; -! data.argc = argc; -! data.argv = argv; -! -! eval_in_namespace(&data, do_apply, get_vim_curr_buffer()->env, &ret); -! return ret; - } - - static Scheme_Object * - do_load(void *data, int noargc, Scheme_Object **noargv) - { -! Cmd_Info *info = (Cmd_Info *)data; -! Scheme_Object *result = scheme_void; -! Scheme_Object *expr; -! char_u *file = scheme_malloc_fail_ok( -! scheme_malloc_atomic, MAXPATHL + 1); -! Port_Info *pinfo = (Port_Info *)(info->data); - - /* make Vim expansion */ -! expand_env((char_u *)pinfo->name, file, MAXPATHL); -! /* scheme_load looks strange working with namespaces and error handling*/ - pinfo->port = scheme_open_input_file(file, "mzfile"); -! scheme_count_lines(pinfo->port); /* to get accurate read error location*/ - - /* Like REPL but print only last result */ - while (!SCHEME_EOFP(expr = scheme_read(pinfo->port))) -! result = scheme_eval(expr, info->env); - - /* errors will be caught in do_mzscheme_comamnd and ex_mzfile */ - scheme_close_input_port(pinfo->port); - pinfo->port = NULL; - return result; - } - ---- 1201,1265 ---- - Scheme_Object * - mzvim_apply(Scheme_Object *proc, int argc, Scheme_Object **argv) - { - if (mzscheme_init()) - return FAIL; -+ else -+ { -+ Apply_Info data = {NULL, 0, NULL}; -+ Scheme_Object *ret = NULL; - -! MZ_GC_DECL_REG(5); -! MZ_GC_VAR_IN_REG(0, ret); -! MZ_GC_VAR_IN_REG(1, data.proc); -! MZ_GC_ARRAY_VAR_IN_REG(2, data.argv, argc); -! MZ_GC_REG(); -! -! data.proc = proc; -! data.argc = argc; -! data.argv = argv; -! -! eval_with_exn_handling(&data, do_apply, &ret); -! MZ_GC_UNREG(); -! return ret; -! } - } - - static Scheme_Object * - do_load(void *data, int noargc, Scheme_Object **noargv) - { -! Scheme_Object *expr = NULL; -! Scheme_Object *result = NULL; -! char *file = NULL; -! Port_Info *pinfo = (Port_Info *)data; -! -! MZ_GC_DECL_REG(3); -! MZ_GC_VAR_IN_REG(0, expr); -! MZ_GC_VAR_IN_REG(1, result); -! MZ_GC_VAR_IN_REG(2, file); -! MZ_GC_REG(); -! -! file = (char *)scheme_malloc_fail_ok(scheme_malloc_atomic, MAXPATHL + 1); -! MZ_GC_CHECK(); - - /* make Vim expansion */ -! expand_env((char_u *)pinfo->name, (char_u *)file, MAXPATHL); - pinfo->port = scheme_open_input_file(file, "mzfile"); -! MZ_GC_CHECK(); -! scheme_count_lines(pinfo->port); /* to get accurate read error location*/ -! MZ_GC_CHECK(); - - /* Like REPL but print only last result */ - while (!SCHEME_EOFP(expr = scheme_read(pinfo->port))) -! { -! result = scheme_eval(expr, environment); -! MZ_GC_CHECK(); -! } - - /* errors will be caught in do_mzscheme_comamnd and ex_mzfile */ - scheme_close_input_port(pinfo->port); -+ MZ_GC_CHECK(); - pinfo->port = NULL; -+ MZ_GC_UNREG(); - return result; - } - -*************** -*** 1077,1089 **** - void - ex_mzfile(exarg_T *eap) - { -! Port_Info pinfo; - - pinfo.name = (char *)eap->arg; -- pinfo.port = NULL; - if (do_mzscheme_command(eap, &pinfo, do_load) != OK - && pinfo.port != NULL) /* looks like port was not closed */ - scheme_close_input_port(pinfo.port); - } - - ---- 1267,1286 ---- - void - ex_mzfile(exarg_T *eap) - { -! Port_Info pinfo = {NULL, NULL}; -! -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, pinfo.port); -! MZ_GC_REG(); - - pinfo.name = (char *)eap->arg; - if (do_mzscheme_command(eap, &pinfo, do_load) != OK - && pinfo.port != NULL) /* looks like port was not closed */ -+ { - scheme_close_input_port(pinfo.port); -+ MZ_GC_CHECK(); -+ } -+ MZ_GC_UNREG(); - } - - -*************** -*** 1103,1116 **** - "(with-handlers ([void (lambda (exn) (cons #f exn))]) " - "(cons #t (thunk))))"; - -! /* make sure we have a namespace with the standard syntax: */ -! Scheme_Env *env = (Scheme_Env *)scheme_make_namespace(0, NULL); -! add_vim_exn(env); -! -! exn_catching_apply = scheme_eval_string(e, env); -! exn_p = scheme_lookup_global(scheme_intern_symbol("exn?"), env); -! exn_message = scheme_lookup_global( -! scheme_intern_symbol("exn-message"), env); - } - } - ---- 1300,1311 ---- - "(with-handlers ([void (lambda (exn) (cons #f exn))]) " - "(cons #t (thunk))))"; - -! exn_catching_apply = scheme_eval_string(e, environment); -! MZ_GC_CHECK(); -! exn_p = scheme_builtin_value("exn?"); -! MZ_GC_CHECK(); -! exn_message = scheme_builtin_value("exn-message"); -! MZ_GC_CHECK(); - } - } - -*************** -*** 1124,1131 **** - { - Scheme_Object *v; - -- init_exn_catching_apply(); -- - v = _scheme_apply(exn_catching_apply, 1, &f); - /* v is a pair: (cons #t value) or (cons #f exn) */ - ---- 1319,1324 ---- -*************** -*** 1141,1148 **** - static Scheme_Object * - extract_exn_message(Scheme_Object *v) - { -- init_exn_catching_apply(); -- - if (SCHEME_TRUEP(_scheme_apply(exn_p, 1, &v))) - return _scheme_apply(exn_message, 1, &v); - else ---- 1334,1339 ---- -*************** -*** 1152,1167 **** - static Scheme_Object * - do_eval(void *s, int noargc, Scheme_Object **noargv) - { -! Cmd_Info *info = (Cmd_Info *)s; -! -! return scheme_eval_string_all((char *)(info->data), info->env, TRUE); - } - - static Scheme_Object * - do_apply(void *a, int noargc, Scheme_Object **noargv) - { -! Apply_Info *info = (Apply_Info *)(((Cmd_Info *)a)->data); -! - return scheme_apply(info->proc, info->argc, info->argv); - } - ---- 1343,1355 ---- - static Scheme_Object * - do_eval(void *s, int noargc, Scheme_Object **noargv) - { -! return scheme_eval_string_all((char *)s, environment, TRUE); - } - - static Scheme_Object * - do_apply(void *a, int noargc, Scheme_Object **noargv) - { -! Apply_Info *info = (Apply_Info *)a; - return scheme_apply(info->proc, info->argc, info->argv); - } - -*************** -*** 1219,1224 **** ---- 1407,1413 ---- - long length; - - buff = scheme_get_sized_string_output(curerr, &length); -+ MZ_GC_CHECK(); - if (length) - { - do_err_output(buff, length); -*************** -*** 1226,1242 **** - } - - buff = scheme_get_sized_string_output(curout, &length); - if (length) - do_output(buff, length); - } - -- static int -- mzscheme_io_init(void) -- { -- /* Nothing needed so far... */ -- return 0; -- } -- - /* - *======================================================================== - * 4. Implementation of the Vim Features for MzScheme ---- 1415,1425 ---- - } - - buff = scheme_get_sized_string_output(curout, &length); -+ MZ_GC_CHECK(); - if (length) - do_output(buff, length); - } - - /* - *======================================================================== - * 4. Implementation of the Vim Features for MzScheme -*************** -*** 1263,1284 **** - vim_eval(void *data, int argc, Scheme_Object **argv) - { - #ifdef FEAT_EVAL -! Vim_Prim *prim = (Vim_Prim *)data; -! char *expr; -! char *str; -! Scheme_Object *result; - -! expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - -! str = (char *)eval_to_string((char_u *)expr, NULL, TRUE); - -! if (str == NULL) - raise_vim_exn(_("invalid expression")); - -! result = scheme_make_string(str); -! -! vim_free(str); - - return result; - #else - raise_vim_exn(_("expressions disabled at compile time")); ---- 1446,1475 ---- - vim_eval(void *data, int argc, Scheme_Object **argv) - { - #ifdef FEAT_EVAL -! Vim_Prim *prim = (Vim_Prim *)data; -! char *expr; -! Scheme_Object *result; -! /* hash table to store visited values to avoid infinite loops */ -! Scheme_Hash_Table *visited = NULL; -! typval_T *vim_result; -! -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, visited); -! MZ_GC_REG(); - -! visited = scheme_make_hash_table(SCHEME_hash_ptr); -! MZ_GC_CHECK(); - -! expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); -! vim_result = eval_expr((char_u *)expr, NULL); - -! if (vim_result == NULL) - raise_vim_exn(_("invalid expression")); - -! result = vim_to_mzscheme(vim_result, 1, visited); -! free_tv(vim_result); - -+ MZ_GC_UNREG(); - return result; - #else - raise_vim_exn(_("expressions disabled at compile time")); -*************** -*** 1318,1324 **** - Vim_Prim *prim = (Vim_Prim *)data; - char_u *name; - long value; -! char_u *strval; - int rc; - Scheme_Object *rval; - int opt_flags = 0; ---- 1509,1515 ---- - Vim_Prim *prim = (Vim_Prim *)data; - char_u *name; - long value; -! char *strval; - int rc; - Scheme_Object *rval; - int opt_flags = 0; -*************** -*** 1333,1338 **** ---- 1524,1530 ---- - { - MZ_REGISTER_STATIC(M_global); - M_global = scheme_intern_symbol("global"); -+ MZ_GC_CHECK(); - } - - if (argv[1] == M_global) -*************** -*** 1354,1360 **** - scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); - } - -! rc = get_option_value(name, &value, &strval, opt_flags); - curbuf = save_curb; - curwin = save_curw; - ---- 1546,1552 ---- - scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); - } - -! rc = get_option_value(name, &value, (char_u **)&strval, opt_flags); - curbuf = save_curb; - curwin = save_curw; - -*************** -*** 1364,1369 **** ---- 1556,1562 ---- - return scheme_make_integer_value(value); - case 0: - rval = scheme_make_string(strval); -+ MZ_GC_CHECK(); - vim_free(strval); - return rval; - case -1: -*************** -*** 1393,1398 **** ---- 1586,1592 ---- - { - MZ_REGISTER_STATIC(M_global); - M_global = scheme_intern_symbol("global"); -+ MZ_GC_CHECK(); - } - - if (argv[1] == M_global) -*************** -*** 1463,1469 **** ---- 1657,1666 ---- - - for (w = firstwin; w != NULL; w = w->w_next) - if (w->w_buffer == buf->buf) -+ { - list = scheme_make_pair(window_new(w), list); -+ MZ_GC_CHECK(); -+ } - - return list; - } -*************** -*** 1471,1477 **** - static Scheme_Object * - window_new(win_T *win) - { -! vim_mz_window *self; - - /* We need to handle deletion of windows underneath us. - * If we add a "w_mzscheme_ref" field to the win_T structure, ---- 1668,1678 ---- - static Scheme_Object * - window_new(win_T *win) - { -! vim_mz_window *self = NULL; -! -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, self); -! MZ_GC_REG(); - - /* We need to handle deletion of windows underneath us. - * If we add a "w_mzscheme_ref" field to the win_T structure, -*************** -*** 1485,1497 **** - return win->w_mzscheme_ref; - - self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window)); -- - vim_memset(self, 0, sizeof(vim_mz_window)); - scheme_dont_gc_ptr(self); /* because win isn't visible to GC */ - win->w_mzscheme_ref = self; - self->win = win; -! self->tag = mz_window_type; - - return (Scheme_Object *)(self); - } - ---- 1686,1699 ---- - return win->w_mzscheme_ref; - - self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window)); - vim_memset(self, 0, sizeof(vim_mz_window)); - scheme_dont_gc_ptr(self); /* because win isn't visible to GC */ -+ MZ_GC_CHECK(); - win->w_mzscheme_ref = self; - self->win = win; -! self->so.type = mz_window_type; - -+ MZ_GC_UNREG(); - return (Scheme_Object *)(self); - } - -*************** -*** 1660,1666 **** - /* - *=========================================================================== - * 6. Vim Buffer-related Manipulation Functions -- * Note that each buffer should have its own private namespace. - *=========================================================================== - */ - ---- 1862,1867 ---- -*************** -*** 1669,1682 **** - mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv) - { - Vim_Prim *prim = (Vim_Prim *)data; -! char *fname; - int num = 0; - Scheme_Object *onum; - - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -! fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - /* TODO make open existing file */ - num = buflist_add(fname, BLN_LISTED | BLN_CURBUF); - ---- 1870,1883 ---- - mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv) - { - Vim_Prim *prim = (Vim_Prim *)data; -! char_u *fname; - int num = 0; - Scheme_Object *onum; - - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -! fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - /* TODO make open existing file */ - num = buflist_add(fname, BLN_LISTED | BLN_CURBUF); - -*************** -*** 1712,1718 **** - buf_T *buf; - char_u *fname; - -! fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - - for (buf = firstbuf; buf; buf = buf->b_next) - if (buf->b_ffname == NULL || buf->b_sfname == NULL) ---- 1913,1919 ---- - buf_T *buf; - char_u *fname; - -! fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); - - for (buf = firstbuf; buf; buf = buf->b_next) - if (buf->b_ffname == NULL || buf->b_sfname == NULL) -*************** -*** 1783,1789 **** - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf = get_buffer_arg(prim->name, 0, argc, argv); - -! return scheme_make_string(buf->buf->b_ffname); - } - - /* (curr-buff) */ ---- 1984,1990 ---- - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf = get_buffer_arg(prim->name, 0, argc, argv); - -! return scheme_make_string((char *)buf->buf->b_ffname); - } - - /* (curr-buff) */ -*************** -*** 1796,1802 **** - static Scheme_Object * - buffer_new(buf_T *buf) - { -! vim_mz_buffer *self; - - /* We need to handle deletion of buffers underneath us. - * If we add a "b_mzscheme_ref" field to the buf_T structure, ---- 1997,2007 ---- - static Scheme_Object * - buffer_new(buf_T *buf) - { -! vim_mz_buffer *self = NULL; -! -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, self); -! MZ_GC_REG(); - - /* We need to handle deletion of buffers underneath us. - * If we add a "b_mzscheme_ref" field to the buf_T structure, -*************** -*** 1806,1820 **** - return buf->b_mzscheme_ref; - - self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer)); -- - vim_memset(self, 0, sizeof(vim_mz_buffer)); -! scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */ - buf->b_mzscheme_ref = self; - self->buf = buf; -! self->tag = mz_buffer_type; -! -! mzscheme_interface_init(self); /* Set up namespace */ - - return (Scheme_Object *)(self); - } - ---- 2011,2024 ---- - return buf->b_mzscheme_ref; - - self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer)); - vim_memset(self, 0, sizeof(vim_mz_buffer)); -! scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */ -! MZ_GC_CHECK(); - buf->b_mzscheme_ref = self; - self->buf = buf; -! self->so.type = mz_buffer_type; - -+ MZ_GC_UNREG(); - return (Scheme_Object *)(self); - } - -*************** -*** 1845,1858 **** - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; - int linenr; -! char *line; - - buf = get_buffer_arg(prim->name, 1, argc, argv); - linenr = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); - line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE); - - raise_if_error(); -! return scheme_make_string(line); - } - - ---- 2049,2062 ---- - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; - int linenr; -! char_u *line; - - buf = get_buffer_arg(prim->name, 1, argc, argv); - linenr = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); - line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE); - - raise_if_error(); -! return scheme_make_string((char *)line); - } - - -*************** -*** 1869,1875 **** - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; - int i, hi, lo, n; -! Scheme_Object *list; - - buf = get_buffer_arg(prim->name, 2, argc, argv); - list = scheme_null; ---- 2073,2083 ---- - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; - int i, hi, lo, n; -! Scheme_Object *list = NULL; -! -! MZ_GC_DECL_REG(1); -! MZ_GC_VAR_IN_REG(0, list); -! MZ_GC_REG(); - - buf = get_buffer_arg(prim->name, 2, argc, argv); - list = scheme_null; -*************** -*** 1897,1904 **** - - /* Set the list item */ - list = scheme_make_pair(str, list); - } -! - return list; - } - ---- 2105,2113 ---- - - /* Set the list item */ - list = scheme_make_pair(str, list); -+ MZ_GC_CHECK(); - } -! MZ_GC_UNREG(); - return list; - } - -*************** -*** 1925,1935 **** - */ - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; -! Scheme_Object *line; - char *save; -- buf_T *savebuf; - int n; - - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif ---- 2134,2147 ---- - */ - Vim_Prim *prim = (Vim_Prim *)data; - vim_mz_buffer *buf; -! Scheme_Object *line = NULL; - char *save; - int n; - -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, line); -+ MZ_GC_REG(); -+ - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -*************** -*** 1943,1949 **** - - if (SCHEME_FALSEP(line)) - { -! savebuf = curbuf; - curbuf = buf->buf; - - if (u_savedel((linenr_T)n, 1L) == FAIL) ---- 2155,2162 ---- - - if (SCHEME_FALSEP(line)) - { -! buf_T *savebuf = curbuf; -! - curbuf = buf->buf; - - if (u_savedel((linenr_T)n, 1L) == FAIL) -*************** -*** 1962,1994 **** - - curbuf = savebuf; - - raise_if_error(); - return scheme_void; - } - -! /* Otherwise it's a line */ -! save = string_to_line(line); -! savebuf = curbuf; - -! curbuf = buf->buf; - -- if (u_savesub((linenr_T)n) == FAIL) -- { -- curbuf = savebuf; -- raise_vim_exn(_("cannot save undo information")); -- } -- else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL) -- { - curbuf = savebuf; -- raise_vim_exn(_("cannot replace line")); -- } -- else -- changed_bytes((linenr_T)n, 0); - -! curbuf = savebuf; - -! raise_if_error(); -! return scheme_void; - } - - /* ---- 2175,2230 ---- - - curbuf = savebuf; - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } -+ else -+ { -+ /* Otherwise it's a line */ -+ buf_T *savebuf = curbuf; - -! save = string_to_line(line); - -! curbuf = buf->buf; -! -! if (u_savesub((linenr_T)n) == FAIL) -! { -! curbuf = savebuf; -! vim_free(save); -! raise_vim_exn(_("cannot save undo information")); -! } -! else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL) -! { -! curbuf = savebuf; -! vim_free(save); -! raise_vim_exn(_("cannot replace line")); -! } -! else -! { -! vim_free(save); -! changed_bytes((linenr_T)n, 0); -! } - - curbuf = savebuf; - -! /* Check that the cursor is not beyond the end of the line now. */ -! if (buf->buf == curwin->w_buffer) -! check_cursor_col(); - -! MZ_GC_UNREG(); -! raise_if_error(); -! return scheme_void; -! } -! } -! -! static void -! free_array(char **array) -! { -! char **curr = array; -! while (*curr != NULL) -! vim_free(*curr++); -! vim_free(array); - } - - /* -*************** -*** 2013,2027 **** - * 3. Anything else - this is an error. - */ - Vim_Prim *prim = (Vim_Prim *)data; -! vim_mz_buffer *buf; -! Scheme_Object *line_list; -! Scheme_Object *line; -! Scheme_Object *rest; -! char **array; -! buf_T *savebuf; - int i, old_len, new_len, hi, lo; - long extra; - - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif ---- 2249,2263 ---- - * 3. Anything else - this is an error. - */ - Vim_Prim *prim = (Vim_Prim *)data; -! vim_mz_buffer *buf = NULL; -! Scheme_Object *line_list = NULL; - int i, old_len, new_len, hi, lo; - long extra; - -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, line_list); -+ MZ_GC_REG(); -+ - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -*************** -*** 2047,2053 **** - - if (SCHEME_FALSEP(line_list) || SCHEME_NULLP(line_list)) - { -! savebuf = curbuf; - curbuf = buf->buf; - - if (u_savedel((linenr_T)lo, (long)old_len) == FAIL) ---- 2283,2289 ---- - - if (SCHEME_FALSEP(line_list) || SCHEME_NULLP(line_list)) - { -! buf_T *savebuf = curbuf; - curbuf = buf->buf; - - if (u_savedel((linenr_T)lo, (long)old_len) == FAIL) -*************** -*** 2070,2167 **** - - curbuf = savebuf; - - raise_if_error(); - return scheme_void; - } - -! /* List */ -! new_len = scheme_proper_list_length(line_list); -! if (new_len < 0) /* improper or cyclic list */ -! scheme_wrong_type(prim->name, "proper list", -! 2, argc, argv); - -! /* Using MzScheme allocator, so we don't need to free this and -! * can safely keep pointers to GC collected strings -! */ -! array = (char **)scheme_malloc_fail_ok(scheme_malloc, -! (unsigned)(new_len * sizeof(char *))); - -! rest = line_list; -! for (i = 0; i < new_len; ++i) -! { -! line = SCHEME_CAR(rest); -! rest = SCHEME_CDR(rest); -! if (!SCHEME_STRINGP(line)) -! scheme_wrong_type(prim->name, "string-list", 2, argc, argv); -! array[i] = string_to_line(line); -! } - -! savebuf = curbuf; -! curbuf = buf->buf; - -! if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) -! { -! curbuf = savebuf; -! raise_vim_exn(_("cannot save undo information")); -! } - -! /* -! * If the size of the range is reducing (ie, new_len < old_len) we -! * need to delete some old_len. We do this at the start, by -! * repeatedly deleting line "lo". -! */ -! for (i = 0; i < old_len - new_len; ++i) -! { -! if (ml_delete((linenr_T)lo, FALSE) == FAIL) -! { -! curbuf = savebuf; -! raise_vim_exn(_("cannot delete line")); -! } -! extra--; -! } - -! /* -! * For as long as possible, replace the existing old_len with the -! * new old_len. This is a more efficient operation, as it requires -! * less memory allocation and freeing. -! */ -! for (i = 0; i < old_len && i < new_len; i++) -! if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE) == FAIL) -! { -! curbuf = savebuf; -! raise_vim_exn(_("cannot replace line")); -! } - -! /* -! * Now we may need to insert the remaining new_len. We don't need to -! * free the string passed back because MzScheme has control of that -! * memory. -! */ -! while (i < new_len) -! { -! if (ml_append((linenr_T)(lo + i - 1), -! (char_u *)array[i], 0, FALSE) == FAIL) -! { -! curbuf = savebuf; -! raise_vim_exn(_("cannot insert line")); - } -- ++i; -- ++extra; -- } - -! /* -! * Adjust marks. Invalidate any which lie in the -! * changed range, and move any in the remainder of the buffer. -! */ -! mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), (long)MAXLNUM, (long)extra); -! changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); - -! if (buf->buf == curwin->w_buffer) -! mz_fix_cursor(lo, hi, extra); -! curbuf = savebuf; - -! raise_if_error(); -! return scheme_void; - } - - /* ---- 2306,2426 ---- - - curbuf = savebuf; - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } -+ else -+ { -+ buf_T *savebuf = curbuf; - -! /* List */ -! new_len = scheme_proper_list_length(line_list); -! MZ_GC_CHECK(); -! if (new_len < 0) /* improper or cyclic list */ -! scheme_wrong_type(prim->name, "proper list", -! 2, argc, argv); -! else -! { -! char **array = NULL; -! Scheme_Object *line = NULL; -! Scheme_Object *rest = NULL; -! -! MZ_GC_DECL_REG(2); -! MZ_GC_VAR_IN_REG(0, line); -! MZ_GC_VAR_IN_REG(1, rest); -! MZ_GC_REG(); - -! array = (char **)alloc(new_len * sizeof(char *)); -! vim_memset(array, 0, new_len * sizeof(char *)); - -! rest = line_list; -! for (i = 0; i < new_len; ++i) -! { -! line = SCHEME_CAR(rest); -! rest = SCHEME_CDR(rest); -! if (!SCHEME_STRINGP(line)) -! { -! free_array(array); -! scheme_wrong_type(prim->name, "string-list", 2, argc, argv); -! } -! array[i] = string_to_line(line); -! } - -! curbuf = buf->buf; - -! if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) -! { -! curbuf = savebuf; -! free_array(array); -! raise_vim_exn(_("cannot save undo information")); -! } - -! /* -! * If the size of the range is reducing (ie, new_len < old_len) we -! * need to delete some old_len. We do this at the start, by -! * repeatedly deleting line "lo". -! */ -! for (i = 0; i < old_len - new_len; ++i) -! { -! if (ml_delete((linenr_T)lo, FALSE) == FAIL) -! { -! curbuf = savebuf; -! free_array(array); -! raise_vim_exn(_("cannot delete line")); -! } -! extra--; -! } - -! /* -! * For as long as possible, replace the existing old_len with the -! * new old_len. This is a more efficient operation, as it requires -! * less memory allocation and freeing. -! */ -! for (i = 0; i < old_len && i < new_len; i++) -! if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE) == FAIL) -! { -! curbuf = savebuf; -! free_array(array); -! raise_vim_exn(_("cannot replace line")); -! } - -! /* -! * Now we may need to insert the remaining new_len. We don't need to -! * free the string passed back because MzScheme has control of that -! * memory. -! */ -! while (i < new_len) -! { -! if (ml_append((linenr_T)(lo + i - 1), -! (char_u *)array[i], 0, FALSE) == FAIL) -! { -! curbuf = savebuf; -! free_array(array); -! raise_vim_exn(_("cannot insert line")); -! } -! ++i; -! ++extra; -! } -! MZ_GC_UNREG(); -! free_array(array); - } - -! /* -! * Adjust marks. Invalidate any which lie in the -! * changed range, and move any in the remainder of the buffer. -! */ -! mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), (long)MAXLNUM, (long)extra); -! changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); - -! if (buf->buf == curwin->w_buffer) -! mz_fix_cursor(lo, hi, extra); -! curbuf = savebuf; - -! MZ_GC_UNREG(); -! raise_if_error(); -! return scheme_void; -! } - } - - /* -*************** -*** 2179,2193 **** - insert_buffer_line_list(void *data, int argc, Scheme_Object **argv) - { - Vim_Prim *prim = (Vim_Prim *)data; -! vim_mz_buffer *buf; -! Scheme_Object *list; -! Scheme_Object *line; -! Scheme_Object *rest; -! char **array; -! char *str; -! buf_T *savebuf; - int i, n, size; - - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif ---- 2438,2452 ---- - insert_buffer_line_list(void *data, int argc, Scheme_Object **argv) - { - Vim_Prim *prim = (Vim_Prim *)data; -! vim_mz_buffer *buf = NULL; -! Scheme_Object *list = NULL; -! char *str = NULL; - int i, n, size; - -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, list); -+ MZ_GC_REG(); -+ - #ifdef HAVE_SANDBOX - sandbox_check(); - #endif -*************** -*** 2206,2294 **** - check_line_range(n, buf->buf); - if (SCHEME_STRINGP(list)) - { -! str = string_to_line(list); - -! savebuf = curbuf; - curbuf = buf->buf; - - if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL) - { - curbuf = savebuf; - raise_vim_exn(_("cannot save undo information")); - } - else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL) - { - curbuf = savebuf; - raise_vim_exn(_("cannot insert line")); - } - else - appended_lines_mark((linenr_T)n, 1L); - - curbuf = savebuf; - update_screen(VALID); - - raise_if_error(); - return scheme_void; - } - - /* List */ - size = scheme_proper_list_length(list); - if (size < 0) /* improper or cyclic list */ - scheme_wrong_type(prim->name, "proper list", - 2, argc, argv); -! -! /* Using MzScheme allocator, so we don't need to free this and -! * can safely keep pointers to GC collected strings -! */ -! array = (char **)scheme_malloc_fail_ok( -! scheme_malloc, (unsigned)(size * sizeof(char *))); -! -! rest = list; -! for (i = 0; i < size; ++i) - { -! line = SCHEME_CAR(rest); -! rest = SCHEME_CDR(rest); -! array[i] = string_to_line(line); -! } - -! savebuf = curbuf; -! curbuf = buf->buf; - -! if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL) -! { -! curbuf = savebuf; -! raise_vim_exn(_("cannot save undo information")); -! } -! else -! { - for (i = 0; i < size; ++i) -! if (ml_append((linenr_T)(n + i), (char_u *)array[i], -! 0, FALSE) == FAIL) -! { -! curbuf = savebuf; -! raise_vim_exn(_("cannot insert line")); -! } - -! if (i > 0) -! appended_lines_mark((linenr_T)n, (long)i); -! } - -! curbuf = savebuf; -! update_screen(VALID); - - raise_if_error(); - return scheme_void; - } - -- /* (get-buff-namespace [buffer]) */ -- static Scheme_Object * -- get_buffer_namespace(void *data, int argc, Scheme_Object **argv) -- { -- Vim_Prim *prim = (Vim_Prim *)data; -- -- return (Scheme_Object *)get_buffer_arg(prim->name, 0, argc, argv)->env; -- } -- - /* - * Predicates - */ ---- 2465,2563 ---- - check_line_range(n, buf->buf); - if (SCHEME_STRINGP(list)) - { -! buf_T *savebuf = curbuf; - -! str = string_to_line(list); - curbuf = buf->buf; - - if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL) - { - curbuf = savebuf; -+ vim_free(str); - raise_vim_exn(_("cannot save undo information")); - } - else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL) - { - curbuf = savebuf; -+ vim_free(str); - raise_vim_exn(_("cannot insert line")); - } - else -+ { -+ vim_free(str); - appended_lines_mark((linenr_T)n, 1L); -+ } - - curbuf = savebuf; - update_screen(VALID); - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } - - /* List */ - size = scheme_proper_list_length(list); -+ MZ_GC_CHECK(); - if (size < 0) /* improper or cyclic list */ - scheme_wrong_type(prim->name, "proper list", - 2, argc, argv); -! else - { -! Scheme_Object *line = NULL; -! Scheme_Object *rest = NULL; -! char **array; -! buf_T *savebuf = curbuf; -! -! MZ_GC_DECL_REG(2); -! MZ_GC_VAR_IN_REG(0, line); -! MZ_GC_VAR_IN_REG(1, rest); -! MZ_GC_REG(); - -! array = (char **)alloc(size * sizeof(char *)); -! vim_memset(array, 0, size * sizeof(char *)); - -! rest = list; - for (i = 0; i < size; ++i) -! { -! line = SCHEME_CAR(rest); -! rest = SCHEME_CDR(rest); -! array[i] = string_to_line(line); -! } - -! curbuf = buf->buf; - -! if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL) -! { -! curbuf = savebuf; -! free_array(array); -! raise_vim_exn(_("cannot save undo information")); -! } -! else -! { -! for (i = 0; i < size; ++i) -! if (ml_append((linenr_T)(n + i), (char_u *)array[i], -! 0, FALSE) == FAIL) -! { -! curbuf = savebuf; -! free_array(array); -! raise_vim_exn(_("cannot insert line")); -! } -! -! if (i > 0) -! appended_lines_mark((linenr_T)n, (long)i); -! } -! free_array(array); -! MZ_GC_UNREG(); -! curbuf = savebuf; -! update_screen(VALID); -! } - -+ MZ_GC_UNREG(); - raise_if_error(); - return scheme_void; - } - - /* - * Predicates - */ -*************** -*** 2343,2383 **** - /* - * Convert an MzScheme string into a Vim line. - * -! * The result is in allocated memory. All internal nulls are replaced by -! * newline characters. It is an error for the string to contain newline -! * characters. - * - */ - static char * - string_to_line(Scheme_Object *obj) - { -! char *str; - long len; - int i; - -! str = scheme_display_to_string(obj, &len); - - /* Error checking: String must not contain newlines, as we - * are replacing a single line, and we must replace it with - * a single line. - */ -! if (memchr(str, '\n', len)) - scheme_signal_error(_("string cannot contain newlines")); - - /* Create a copy of the string, with internal nulls replaced by - * newline characters, as is the vim convention. - */ - for (i = 0; i < len; ++i) - { -! if (str[i] == '\0') -! str[i] = '\n'; - } - -! str[i] = '\0'; - -! return str; - } - - /* - * Check to see whether a Vim error has been reported, or a keyboard - * interrupt (from vim --> got_int) has been detected. ---- 2612,2784 ---- - /* - * Convert an MzScheme string into a Vim line. - * -! * All internal nulls are replaced by newline characters. -! * It is an error for the string to contain newline characters. - * -+ * Returns pointer to Vim allocated memory - */ - static char * - string_to_line(Scheme_Object *obj) - { -! char *scheme_str = NULL; -! char *vim_str = NULL; - long len; - int i; - -! scheme_str = scheme_display_to_string(obj, &len); - - /* Error checking: String must not contain newlines, as we - * are replacing a single line, and we must replace it with - * a single line. - */ -! if (memchr(scheme_str, '\n', len)) - scheme_signal_error(_("string cannot contain newlines")); - -+ vim_str = (char *)alloc(len + 1); -+ - /* Create a copy of the string, with internal nulls replaced by - * newline characters, as is the vim convention. - */ - for (i = 0; i < len; ++i) - { -! if (scheme_str[i] == '\0') -! vim_str[i] = '\n'; -! else -! vim_str[i] = scheme_str[i]; - } - -! vim_str[i] = '\0'; - -! MZ_GC_CHECK(); -! return vim_str; - } - -+ #ifdef FEAT_EVAL -+ /* -+ * Convert Vim value into MzScheme, adopted from if_python.c -+ */ -+ static Scheme_Object * -+ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited) -+ { -+ Scheme_Object *result = NULL; -+ int new_value = TRUE; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, result); -+ MZ_GC_REG(); -+ -+ /* Avoid infinite recursion */ -+ if (depth > 100) -+ { -+ MZ_GC_UNREG(); -+ return scheme_void; -+ } -+ -+ /* Check if we run into a recursive loop. The item must be in visited -+ * then and we can use it again. -+ */ -+ result = scheme_hash_get(visited, (Scheme_Object *)vim_value); -+ MZ_GC_CHECK(); -+ if (result != NULL) /* found, do nothing */ -+ new_value = FALSE; -+ else if (vim_value->v_type == VAR_STRING) -+ { -+ result = scheme_make_string((char *)vim_value->vval.v_string); -+ MZ_GC_CHECK(); -+ } -+ else if (vim_value->v_type == VAR_NUMBER) -+ { -+ result = scheme_make_integer((long)vim_value->vval.v_number); -+ MZ_GC_CHECK(); -+ } -+ # ifdef FEAT_FLOAT -+ else if (vim_value->v_type == VAR_FLOAT) -+ { -+ result = scheme_make_double((double)vim_value->vval.v_float); -+ MZ_GC_CHECK(); -+ } -+ # endif -+ else if (vim_value->v_type == VAR_LIST) -+ { -+ list_T *list = vim_value->vval.v_list; -+ listitem_T *curr; -+ -+ if (list == NULL || list->lv_first == NULL) -+ result = scheme_null; -+ else -+ { -+ Scheme_Object *obj = NULL; -+ -+ MZ_GC_DECL_REG(1); -+ MZ_GC_VAR_IN_REG(0, obj); -+ MZ_GC_REG(); -+ -+ curr = list->lv_last; -+ obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited); -+ result = scheme_make_pair(obj, scheme_null); -+ MZ_GC_CHECK(); -+ -+ while (curr != list->lv_first) -+ { -+ curr = curr->li_prev; -+ obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited); -+ result = scheme_make_pair(obj, result); -+ MZ_GC_CHECK(); -+ } -+ } -+ MZ_GC_UNREG(); -+ } -+ else if (vim_value->v_type == VAR_DICT) -+ { -+ Scheme_Object *key = NULL; -+ Scheme_Object *obj = NULL; -+ -+ MZ_GC_DECL_REG(2); -+ MZ_GC_VAR_IN_REG(0, key); -+ MZ_GC_VAR_IN_REG(1, obj); -+ MZ_GC_REG(); -+ -+ result = (Scheme_Object *)scheme_make_hash_table(SCHEME_hash_ptr); -+ MZ_GC_CHECK(); -+ if (vim_value->vval.v_dict != NULL) -+ { -+ hashtab_T *ht = &vim_value->vval.v_dict->dv_hashtab; -+ long_u todo = ht->ht_used; -+ hashitem_T *hi; -+ dictitem_T *di; -+ -+ for (hi = ht->ht_array; todo > 0; ++hi) -+ { -+ if (!HASHITEM_EMPTY(hi)) -+ { -+ --todo; -+ -+ di = dict_lookup(hi); -+ obj = vim_to_mzscheme(&di->di_tv, depth + 1, visited); -+ key = scheme_make_string((char *)hi->hi_key); -+ MZ_GC_CHECK(); -+ scheme_hash_set((Scheme_Hash_Table *)result, key, obj); -+ MZ_GC_CHECK(); -+ } -+ } -+ } -+ MZ_GC_UNREG(); -+ } -+ else -+ { -+ result = scheme_void; -+ new_value = FALSE; -+ } -+ if (new_value) -+ { -+ scheme_hash_set(visited, (Scheme_Object *)vim_value, result); -+ MZ_GC_CHECK(); -+ } -+ MZ_GC_UNREG(); -+ return result; -+ } -+ #endif -+ - /* - * Check to see whether a Vim error has been reported, or a keyboard - * interrupt (from vim --> got_int) has been detected. -*************** -*** 2392,2441 **** - * register Scheme exn:vim - */ - static void -! register_vim_exn(Scheme_Env *env) - { -! Scheme_Object *exn_name = scheme_intern_symbol("exn:vim"); - - if (vim_exn == NULL) - vim_exn = scheme_make_struct_type(exn_name, -! scheme_builtin_value("struct:exn"), NULL, 0, 0, NULL, NULL - #if MZSCHEME_VERSION_MAJOR >= 299 - , NULL - #endif - ); - -- if (vim_exn_values == NULL) -- { -- int nc = 0; - -! Scheme_Object **exn_names = scheme_make_struct_names( -! exn_name, scheme_null, 0, &nc); -! Scheme_Object **exn_values = scheme_make_struct_values( -! vim_exn, exn_names, nc, 0); -! -! vim_exn_names = scheme_make_vector(nc, scheme_false); -! vim_exn_values = scheme_make_vector(nc, scheme_false); -! /* remember names and values */ -! mch_memmove(SCHEME_VEC_ELS(vim_exn_names), exn_names, -! nc * sizeof(Scheme_Object *)); -! mch_memmove(SCHEME_VEC_ELS(vim_exn_values), exn_values, -! nc * sizeof(Scheme_Object *)); - } -! -! add_vim_exn(env); -! } -! -! /* -! * Add stuff of exn:vim to env -! */ -! static void -! add_vim_exn(Scheme_Env *env) -! { -! int i; -! -! for (i = 0; i < SCHEME_VEC_SIZE(vim_exn_values); i++) -! scheme_add_global_symbol(SCHEME_VEC_ELS(vim_exn_names)[i], -! SCHEME_VEC_ELS(vim_exn_values)[i], env); - } - - /* ---- 2793,2851 ---- - * register Scheme exn:vim - */ - static void -! register_vim_exn(void) - { -! int nc = 0; -! int i; -! Scheme_Object *struct_exn = NULL; -! Scheme_Object *exn_name = NULL; -! -! MZ_GC_DECL_REG(2); -! MZ_GC_VAR_IN_REG(0, struct_exn); -! MZ_GC_VAR_IN_REG(1, exn_name); -! MZ_GC_REG(); -! -! exn_name = scheme_intern_symbol("exn:vim"); -! MZ_GC_CHECK(); -! struct_exn = scheme_builtin_value("struct:exn"); -! MZ_GC_CHECK(); - - if (vim_exn == NULL) - vim_exn = scheme_make_struct_type(exn_name, -! struct_exn, NULL, 0, 0, NULL, NULL - #if MZSCHEME_VERSION_MAJOR >= 299 - , NULL - #endif - ); - - -! { -! Scheme_Object **tmp = NULL; -! Scheme_Object *exn_names[5] = {NULL, NULL, NULL, NULL, NULL}; -! Scheme_Object *exn_values[5] = {NULL, NULL, NULL, NULL, NULL}; -! MZ_GC_DECL_REG(6); -! MZ_GC_ARRAY_VAR_IN_REG(0, exn_names, 5); -! MZ_GC_ARRAY_VAR_IN_REG(3, exn_values, 5); -! 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(); -! -! tmp = scheme_make_struct_values(vim_exn, exn_names, nc, 0); -! mch_memmove(exn_values, tmp, nc * sizeof(Scheme_Object *)); -! MZ_GC_CHECK(); -! -! for (i = 0; i < nc; i++) -! { -! scheme_add_global_symbol(exn_names[i], -! exn_values[i], environment); -! MZ_GC_CHECK(); -! } -! MZ_GC_UNREG(); - } -! MZ_GC_UNREG(); - } - - /* -*************** -*** 2444,2469 **** - void - raise_vim_exn(const char *add_info) - { -! Scheme_Object *argv[2]; -! char_u *fmt = _("Vim error: ~a"); - - if (add_info != NULL) - { -! Scheme_Object *info = scheme_make_string(add_info); -! argv[0] = scheme_byte_string_to_char_string(scheme_make_string( -! scheme_format(fmt, strlen(fmt), 1, &info, NULL))); - SCHEME_SET_IMMUTABLE(argv[0]); - } - else - argv[0] = scheme_make_string(_("Vim error")); - - #if MZSCHEME_VERSION_MAJOR < 360 - argv[1] = scheme_current_continuation_marks(); - #else - argv[1] = scheme_current_continuation_marks(NULL); - #endif - -! scheme_raise(scheme_make_struct_instance(vim_exn, 2, argv)); - } - - void ---- 2854,2907 ---- - void - raise_vim_exn(const char *add_info) - { -! char *fmt = _("Vim error: ~a"); -! Scheme_Object *argv[2] = {NULL, NULL}; -! Scheme_Object *exn = NULL; -! -! MZ_GC_DECL_REG(4); -! MZ_GC_ARRAY_VAR_IN_REG(0, argv, 2); -! MZ_GC_VAR_IN_REG(3, exn); -! MZ_GC_REG(); - - if (add_info != NULL) - { -! char *c_string = NULL; -! Scheme_Object *byte_string = NULL; -! Scheme_Object *info = NULL; -! -! MZ_GC_DECL_REG(3); -! MZ_GC_VAR_IN_REG(0, c_string); -! MZ_GC_VAR_IN_REG(1, byte_string); -! MZ_GC_VAR_IN_REG(2, info); -! MZ_GC_REG(); -! -! info = scheme_make_string(add_info); -! MZ_GC_CHECK(); -! c_string = scheme_format(fmt, STRLEN(fmt), 1, &info, NULL); -! MZ_GC_CHECK(); -! byte_string = scheme_make_string(c_string); -! MZ_GC_CHECK(); -! argv[0] = scheme_byte_string_to_char_string(byte_string); -! MZ_GC_CHECK(); - SCHEME_SET_IMMUTABLE(argv[0]); -+ MZ_GC_UNREG(); - } - else - argv[0] = scheme_make_string(_("Vim error")); -+ MZ_GC_CHECK(); - - #if MZSCHEME_VERSION_MAJOR < 360 - argv[1] = scheme_current_continuation_marks(); -+ MZ_GC_CHECK(); - #else - argv[1] = scheme_current_continuation_marks(NULL); -+ MZ_GC_CHECK(); - #endif - -! exn = scheme_make_struct_instance(vim_exn, 2, argv); -! MZ_GC_CHECK(); -! scheme_raise(exn); -! MZ_GC_UNREG(); - } - - void -*************** -*** 2570,2575 **** ---- 3008,3015 ---- - curwin->w_cursor.lnum = lo; - check_cursor(); - } -+ else -+ check_cursor_col(); - changed_cline_bef_curs(); - } - invalidate_botline(); -*************** -*** 2595,2601 **** - {mzscheme_open_buffer, "open-buff", 1, 1}, - {get_buffer_by_name, "get-buff-by-name", 1, 1}, - {get_buffer_by_num, "get-buff-by-num", 1, 1}, -- {get_buffer_namespace, "get-buff-namespace", 0, 1}, - /* - * Window-related commands - */ ---- 3035,3040 ---- -*************** -*** 2653,2675 **** - } - - static void -! make_modules(Scheme_Env *env) - { -! int i; -! Scheme_Env *mod; -! -! mod = scheme_primitive_module(scheme_intern_symbol("vimext"), env); - /* all prims made closed so they can access their own names */ -! for (i = 0; i < sizeof(prims)/sizeof(prims[0]); i++) - { - Vim_Prim *prim = prims + i; -! scheme_add_global(prim->name, -! scheme_make_closed_prim_w_arity(prim->prim, prim, prim->name, -! prim->mina, prim->maxa), -! mod); - } -- scheme_add_global("global-namespace", (Scheme_Object *)environment, mod); - scheme_finish_primitive_module(mod); - } - - #ifdef HAVE_SANDBOX ---- 3092,3126 ---- - } - - static void -! make_modules() - { -! int i; -! Scheme_Env *mod = NULL; -! Scheme_Object *vimext_symbol = NULL; -! Scheme_Object *closed_prim = NULL; -! -! MZ_GC_DECL_REG(3); -! MZ_GC_VAR_IN_REG(0, mod); -! MZ_GC_VAR_IN_REG(1, vimext_symbol); -! MZ_GC_VAR_IN_REG(2, closed_prim); -! MZ_GC_REG(); -! -! vimext_symbol = scheme_intern_symbol("vimext"); -! MZ_GC_CHECK(); -! mod = scheme_primitive_module(vimext_symbol, environment); -! MZ_GC_CHECK(); - /* all prims made closed so they can access their own names */ -! for (i = 0; i < (int)(sizeof(prims)/sizeof(prims[0])); i++) - { - Vim_Prim *prim = prims + i; -! closed_prim = scheme_make_closed_prim_w_arity(prim->prim, prim, prim->name, -! prim->mina, prim->maxa); -! scheme_add_global(prim->name, closed_prim, mod); -! MZ_GC_CHECK(); - } - scheme_finish_primitive_module(mod); -+ MZ_GC_CHECK(); -+ MZ_GC_UNREG(); - } - - #ifdef HAVE_SANDBOX -*************** -*** 2697,2717 **** ---- 3148,3172 ---- - { - MZ_REGISTER_STATIC(M_write); - M_write = scheme_intern_symbol("write"); -+ MZ_GC_CHECK(); - } - if (M_read == NULL) - { - MZ_REGISTER_STATIC(M_read); - M_read = scheme_intern_symbol("read"); -+ MZ_GC_CHECK(); - } - if (M_execute == NULL) - { - MZ_REGISTER_STATIC(M_execute); - M_execute = scheme_intern_symbol("execute"); -+ MZ_GC_CHECK(); - } - if (M_delete == NULL) - { - MZ_REGISTER_STATIC(M_delete); - M_delete = scheme_intern_symbol("delete"); -+ MZ_GC_CHECK(); - } - - while (!SCHEME_NULLP(requested_access)) -*** ../vim-7.2.190/src/if_mzsch.h 2006-03-24 23:43:11.000000000 +0100 ---- src/if_mzsch.h 2009-05-26 19:08:21.000000000 +0200 -*************** -*** 11,16 **** ---- 11,17 ---- - - /* #ifdef needed for "make depend" */ - #ifdef FEAT_MZSCHEME -+ # include <schvers.h> - # include <scheme.h> - #endif - -*************** -*** 46,49 **** ---- 47,77 ---- - # define scheme_byte_string_to_char_string(obj) (obj) - #endif - -+ /* Precise GC macros */ -+ #ifndef MZ_GC_DECL_REG -+ # define MZ_GC_DECL_REG(size) /* empty */ -+ #endif -+ #ifndef MZ_GC_VAR_IN_REG -+ # define MZ_GC_VAR_IN_REG(x, v) /* empty */ -+ #endif -+ #ifndef MZ_GC_ARRAY_VAR_IN_REG -+ # define MZ_GC_ARRAY_VAR_IN_REG(x, v, l) /* empty */ -+ #endif -+ #ifndef MZ_GC_REG -+ # define MZ_GC_REG() /* empty */ -+ #endif -+ #ifndef MZ_GC_UNREG -+ # define MZ_GC_UNREG() /* empty */ -+ #endif -+ -+ #ifdef MZSCHEME_FORCE_GC -+ /* -+ * force garbage collection to check all references are registered -+ * seg faults will indicate not registered refs -+ */ -+ # define MZ_GC_CHECK() scheme_collect_garbage(); -+ #else -+ # define MZ_GC_CHECK() /* empty */ -+ #endif -+ - #endif /* _IF_MZSCH_H_ */ -*** ../vim-7.2.190/src/main.c 2009-05-17 13:30:58.000000000 +0200 ---- src/main.c 2009-05-26 19:09:01.000000000 +0200 -*************** -*** 935,942 **** ---- 935,948 ---- - - /* - * 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; - } -*** ../vim-7.2.190/src/proto/if_mzsch.pro 2004-07-12 17:51:52.000000000 +0200 ---- src/proto/if_mzsch.pro 2009-05-26 19:09:55.000000000 +0200 -*************** -*** 15,24 **** - void *mzvim_eval_string __ARGS((char_u *str)); - struct Scheme_Object *mzvim_apply __ARGS((struct Scheme_Object *, int argc, - struct Scheme_Object **)); -! int mzthreads_allowed (void); -! #ifdef FEAT_GUI_KDE -! void timer_proc (void); -! void mzscheme_kde_start_timer (void); -! void mzscheme_kde_stop_timer (void); -! #endif - /* vim: set ft=c : */ ---- 15,20 ---- - void *mzvim_eval_string __ARGS((char_u *str)); - struct Scheme_Object *mzvim_apply __ARGS((struct Scheme_Object *, int argc, - struct Scheme_Object **)); -! int mzthreads_allowed __ARGS((void)); -! void mzscheme_main __ARGS((void)); - /* vim: set ft=c : */ -*** ../vim-7.2.190/src/version.c 2009-05-26 18:12:13.000000000 +0200 ---- src/version.c 2009-05-26 22:52:53.000000000 +0200 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 191, - /**/ - --- -Scientists decoded the first message from an alien civilization: - SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR -SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT -YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER -STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE -ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS -MAXIMUM! IT REALLY WORKS! - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |