Loading ...
Sorry, an error occurred while loading the content.

Patch 7.2.191

Expand Messages
  • Bram Moolenaar
    Patch 7.2.191 Problem: Mzscheme interface doesn t work on Ubuntu. Solution: Change autoconf rules. Define missing macro. Some changes to avoid gcc
    Message 1 of 1 , May 26, 2009
    • 0 Attachment
      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@...>
      * (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_V<br/><br/>(Message over 64 KB, truncated)
    Your message has been successfully submitted and would be delivered to recipients shortly.