summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.451
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2012-09-26 01:10:42 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:51:55 +0200
commit9664bee729d487bcc0a0bc35859f8e13d5421c75 (patch)
treeb428a16618e36ed864a8d76ea3435e19a452bf90 /source/ap/vim/patches/7.3.451
parent75a4a592e5ccda30715f93563d741b83e0dcf39e (diff)
downloadcurrent-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.gz
current-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.xz
Slackware 14.0slackware-14.0
Wed Sep 26 01:10:42 UTC 2012 Slackware 14.0 x86_64 stable is released! We're perfectionists here at Slackware, so this release has been a long time a-brewing. But we think you'll agree that it was worth the wait. Slackware 14.0 combines modern components, ease of use, and flexible configuration... our "KISS" philosophy demands it. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Thanks to everyone who helped make this happen. The Slackware team, the upstream developers, and (of course) the awesome Slackware user community. Have fun! :-)
Diffstat (limited to 'source/ap/vim/patches/7.3.451')
-rw-r--r--source/ap/vim/patches/7.3.451363
1 files changed, 363 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.451 b/source/ap/vim/patches/7.3.451
new file mode 100644
index 000000000..25d1b0467
--- /dev/null
+++ b/source/ap/vim/patches/7.3.451
@@ -0,0 +1,363 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.451
+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.3.451
+Problem: Tcl doesn't work on 64 bit MS-Windows.
+Solution: Make it work. (Dave Bodenstab)
+Files: src/Make_mvc.mak, src/if_tcl.c
+
+
+*** ../vim-7.3.450/src/Make_mvc.mak 2012-02-12 01:55:50.000000000 +0100
+--- src/Make_mvc.mak 2012-02-22 15:43:01.000000000 +0100
+***************
+*** 616,622 ****
+ -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+ TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
+! TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
+ !else
+ CFLAGS = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+--- 616,622 ----
+ -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+ TCL_INC = /I "$(TCL)\Include" /I "$(TCL)"
+! TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
+ !else
+ CFLAGS = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ = $(OUTDIR)\if_tcl.obj
+*** ../vim-7.3.450/src/if_tcl.c 2011-07-27 14:15:41.000000000 +0200
+--- src/if_tcl.c 2012-02-22 15:47:00.000000000 +0100
+***************
+*** 79,90 ****
+ typedef struct
+ {
+ Tcl_Interp *interp;
+ int range_start, range_end;
+ int lbase;
+ char *curbuf, *curwin;
+ } tcl_info;
+
+! static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
+
+ #define VAR_RANGE1 "::vim::range(start)"
+ #define VAR_RANGE2 "::vim::range(begin)"
+--- 79,91 ----
+ typedef struct
+ {
+ Tcl_Interp *interp;
++ int exitvalue;
+ int range_start, range_end;
+ int lbase;
+ char *curbuf, *curwin;
+ } tcl_info;
+
+! static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
+
+ #define VAR_RANGE1 "::vim::range(start)"
+ #define VAR_RANGE2 "::vim::range(begin)"
+***************
+*** 279,294 ****
+ ****************************************************************************/
+
+ /*
+! * Replace standard "exit" and "catch" commands.
+ *
+! * This is a design flaw in Tcl - the standard "exit" command just calls
+! * exit() and kills the application. It should return TCL_EXIT to the
+! * app, which then decides if it wants to terminate or not. In our case,
+! * we just delete the Tcl interpreter (and create a new one with the next
+! * :tcl command).
+ */
+- #define TCL_EXIT 5
+-
+ static int
+ exitcmd(dummy, interp, objc, objv)
+ ClientData dummy UNUSED;
+--- 280,298 ----
+ ****************************************************************************/
+
+ /*
+! * Replace standard "exit" command.
+ *
+! * Delete the Tcl interpreter; a new one will be created with the next
+! * :tcl command). The exit code is saved (and retrieved in tclexit()).
+! * Since Tcl's exit is never expected to return and this replacement
+! * does, then (except for a trivial case) additional Tcl commands will
+! * be run. Since the interpreter is now marked as deleted, an error
+! * will be returned -- typically "attempt to call eval in deleted
+! * interpreter". Hopefully, at this point, checks for TCL_ERROR take
+! * place and control percolates back up to Vim -- but with this new error
+! * string in the interpreter's result value. Therefore it would be
+! * useless for this routine to return the exit code via Tcl_SetResult().
+ */
+ static int
+ exitcmd(dummy, interp, objc, objv)
+ ClientData dummy UNUSED;
+***************
+*** 305,351 ****
+ break;
+ /* FALLTHROUGH */
+ case 1:
+! Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
+! return TCL_EXIT;
+! default:
+! Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+! }
+! return TCL_ERROR;
+! }
+
+! static int
+! catchcmd(dummy, interp, objc, objv)
+! ClientData dummy UNUSED;
+! Tcl_Interp *interp;
+! int objc;
+! Tcl_Obj *CONST objv[];
+! {
+! char *varname = NULL;
+! int result;
+!
+! switch (objc)
+! {
+! case 3:
+! varname = Tcl_GetStringFromObj(objv[2], NULL);
+! /* fallthrough */
+! case 2:
+! Tcl_ResetResult(interp);
+! Tcl_AllowExceptions(interp);
+! result = Tcl_EvalObj(interp, objv[1]);
+! if (result == TCL_EXIT)
+! return result;
+! if (varname)
+! {
+! if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
+! {
+! Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
+! return TCL_ERROR;
+! }
+! }
+! Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
+! return TCL_OK;
+ default:
+! Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
+ }
+ return TCL_ERROR;
+ }
+--- 309,320 ----
+ break;
+ /* FALLTHROUGH */
+ case 1:
+! tclinfo.exitvalue = value;
+
+! Tcl_DeleteInterp(interp);
+! break;
+ default:
+! Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+ }
+ return TCL_ERROR;
+ }
+***************
+*** 372,377 ****
+--- 341,347 ----
+ /*
+ * "::vim::buffer list" - create a list of buffer commands.
+ * "::vim::buffer {N}" - create buffer command for buffer N.
++ * "::vim::buffer exists {N}" - test if buffer N exists.
+ * "::vim::buffer new" - create a new buffer (not implemented)
+ */
+ static int
+***************
+*** 1663,1669 ****
+ static Tcl_ChannelType channel_type =
+ {
+ "vimmessage", /* typeName */
+! NULL, /* version */
+ channel_close, /* closeProc */
+ channel_input, /* inputProc */
+ channel_output, /* outputProc */
+--- 1633,1639 ----
+ static Tcl_ChannelType channel_type =
+ {
+ "vimmessage", /* typeName */
+! TCL_CHANNEL_VERSION_2, /* version */
+ channel_close, /* closeProc */
+ channel_input, /* inputProc */
+ channel_output, /* outputProc */
+***************
+*** 1678,1683 ****
+--- 1648,1655 ----
+ NULL, /* flushProc */
+ NULL, /* handlerProc */
+ #endif
++ /* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
++ * set above */
+ #ifdef TCL_CHANNEL_VERSION_3
+ NULL, /* wideSeekProc */
+ #endif
+***************
+*** 1741,1747 ****
+ Tcl_Interp *interp;
+ static Tcl_Channel ch1, ch2;
+
+! /* replace stdout and stderr */
+ ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ Tcl_SetStdChannel(ch1, TCL_STDOUT);
+--- 1713,1721 ----
+ Tcl_Interp *interp;
+ static Tcl_Channel ch1, ch2;
+
+! /* Create replacement channels for stdout and stderr; this has to be
+! * done each time an interpreter is created since the channels are closed
+! * when the interpreter is deleted */
+ ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ Tcl_SetStdChannel(ch1, TCL_STDOUT);
+***************
+*** 1761,1775 ****
+ #endif
+
+ Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
+ Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
+
+! /* replace some standard Tcl commands */
+ Tcl_DeleteCommand(interp, "exit");
+ Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+- Tcl_DeleteCommand(interp, "catch");
+- Tcl_CreateObjCommand(interp, "catch", catchcmd,
+- (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+
+ /* new commands, in ::vim namespace */
+ Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+--- 1735,1752 ----
+ #endif
+
+ Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
++ #ifdef WIN3264
++ Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
++ #endif
+ Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
++ #ifdef WIN3264
++ Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
++ #endif
+
+! /* replace standard Tcl exit command */
+ Tcl_DeleteCommand(interp, "exit");
+ Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+
+ /* new commands, in ::vim namespace */
+ Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+***************
+*** 1821,1826 ****
+--- 1798,1805 ----
+ tclinfo.range_end = row2tcl(eap->line2);
+ tclupdatevars();
+ }
++
++ tclinfo.exitvalue = 0;
+ return OK;
+ }
+
+***************
+*** 1884,1913 ****
+ {
+ int newerr = OK;
+
+! if (error == TCL_EXIT)
+ {
+- int retval;
+ char buf[50];
+- Tcl_Obj *robj;
+
+! robj = Tcl_GetObjResult(tclinfo.interp);
+! if (Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK)
+ {
+! EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+! newerr = FAIL;
+ }
+ else
+! {
+! sprintf(buf, _("E572: exit code %d"), retval);
+! tclerrmsg(buf);
+! if (retval == 0)
+! {
+! did_emsg = 0;
+! newerr = OK;
+! }
+! else
+! newerr = FAIL;
+! }
+
+ tcldelthisinterp();
+ }
+--- 1863,1885 ----
+ {
+ int newerr = OK;
+
+! if (Tcl_InterpDeleted(tclinfo.interp) /* True if we intercepted Tcl's exit command */
+! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+! || Tcl_LimitExceeded(tclinfo.interp) /* True if the interpreter cannot continue */
+! #endif
+! )
+ {
+ char buf[50];
+
+! sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
+! tclerrmsg(buf);
+! if (tclinfo.exitvalue == 0)
+ {
+! did_emsg = 0;
+! newerr = OK;
+ }
+ else
+! newerr = FAIL;
+
+ tcldelthisinterp();
+ }
+***************
+*** 2021,2027 ****
+ Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ Tcl_AllowExceptions(tclinfo.interp);
+ err = Tcl_Eval(tclinfo.interp, script);
+! if (err != TCL_OK)
+ break;
+ line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ if (line)
+--- 1993,2004 ----
+ Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ Tcl_AllowExceptions(tclinfo.interp);
+ err = Tcl_Eval(tclinfo.interp, script);
+! if (err != TCL_OK
+! || Tcl_InterpDeleted(tclinfo.interp)
+! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+! || Tcl_LimitExceeded(tclinfo.interp)
+! #endif
+! )
+ break;
+ line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ if (line)
+*** ../vim-7.3.450/src/version.c 2012-02-22 15:34:05.000000000 +0100
+--- src/version.c 2012-02-22 16:00:49.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 451,
+ /**/
+
+--
+Where do you want to crash today?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///