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