summaryrefslogtreecommitdiff
path: root/source/ap/vim/patches/7.2.191
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.2.191')
-rw-r--r--source/ap/vim/patches/7.2.1913705
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 ///