Tcl Source Code

Artifact [0abeca1f17]
Login

Artifact 0abeca1f17b888f34513be48147ff426bdd1549f:

Attachment "1413115.patch" to ticket [1413115fff] added by dgp 2006-02-10 00:30:33.
Index: doc/incr.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/incr.n,v
retrieving revision 1.5
diff -u -r1.5 incr.n
--- doc/incr.n	27 Oct 2004 12:53:22 -0000	1.5
+++ doc/incr.n	9 Feb 2006 17:23:55 -0000
@@ -20,12 +20,18 @@
 .SH DESCRIPTION
 .PP
 Increments the value stored in the variable whose name is \fIvarName\fR.
-The value of the variable must be an integer.
+The value of the variable must be an integer.  
 If \fIincrement\fR is supplied then its value (which must be an
 integer) is added to the value of variable \fIvarName\fR;  otherwise
 1 is added to \fIvarName\fR.
 The new value is stored as a decimal string in variable \fIvarName\fR
 and also returned as result.
+.PP
+.VS 8.5
+Starting with the Tcl 8.5 release, the variable \fIvarName\fR passed
+to \fBincr\fR may be unset, and in that case, it will be set to
+the value \fIincrement\fR or to the default increment value of \fB1\fR.
+.VE 8.5
 .SH EXAMPLES
 Add one to the contents of the variable \fIx\fR:
 .CS
@@ -44,7 +50,7 @@
 .CE
 .PP
 Add nothing at all to the variable \fIx\fR (often useful for checking
-whether an argument to a procedure is actually numeric and generating
+whether an argument to a procedure is actually integral and generating
 an error if it is not):
 .CS
 \fBincr\fR x 0
Index: generic/tclExecute.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclExecute.c,v
retrieving revision 1.225
diff -u -r1.225 tclExecute.c
--- generic/tclExecute.c	27 Dec 2005 20:14:08 -0000	1.225
+++ generic/tclExecute.c	9 Feb 2006 17:23:56 -0000
@@ -2403,7 +2403,7 @@
 	part1 = TclGetString(objPtr);
 
 	varPtr = TclObjLookupVar(interp, objPtr, part2,
-		TCL_LEAVE_ERR_MSG, "read", 0, 1, &arrayPtr);
+		TCL_LEAVE_ERR_MSG, "read", 1, 1, &arrayPtr);
 	if (varPtr == NULL) {
 	    Tcl_AddObjErrorInfo(interp,
 		    "\n    (reading value of variable to increment)", -1);
Index: generic/tclVar.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclVar.c,v
retrieving revision 1.119
diff -u -r1.119 tclVar.c
--- generic/tclVar.c	2 Feb 2006 10:55:05 -0000	1.119
+++ generic/tclVar.c	9 Feb 2006 17:23:56 -0000
@@ -1780,7 +1780,7 @@
     part2 = ((part2Ptr == NULL)? NULL : TclGetString(part2Ptr));
 
     varPtr = TclObjLookupVar(interp, part1Ptr, part2, flags, "read",
-	    0, 1, &arrayPtr);
+	    1, 1, &arrayPtr);
     if (varPtr == NULL) {
 	Tcl_AddObjErrorInfo(interp,
 		"\n    (reading value of variable to increment)", -1);
@@ -1839,11 +1839,11 @@
     register Tcl_Obj *varValuePtr, *newValuePtr = NULL;
     int duplicated, code;
 
+    varPtr->refCount++;
     varValuePtr = TclPtrGetVar(interp, varPtr, arrayPtr, part1, part2, flags);
+    varPtr->refCount--;
     if (varValuePtr == NULL) {
-	Tcl_AddObjErrorInfo(interp,
-		"\n    (reading value of variable to increment)", -1);
-	return NULL;
+	varValuePtr = Tcl_NewIntObj(0);
     }
     if (Tcl_IsShared(varValuePtr)) {
 	duplicated = 1;
Index: tests/compile.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/compile.test,v
retrieving revision 1.40
diff -u -r1.40 compile.test
--- tests/compile.test	9 Nov 2005 20:24:10 -0000	1.40
+++ tests/compile.test	9 Feb 2006 17:23:58 -0000
@@ -250,13 +250,13 @@
     list [catch {p} msg] $msg
 } {1 {list must have an even number of elements}}
 test compile-11.5 {Tcl_Append*: ensure Tcl_ResetResult is used properly} {
-    proc p {} { set r [list foobar] ; incr foo }
+    proc p {} { set r [list foobar] ; incr foo bar baz}
     list [catch {p} msg] $msg
-} {1 {can't read "foo": no such variable}}
+} {1 {wrong # args: should be "incr varName ?increment?"}}
 test compile-11.6 {Tcl_Append*: ensure Tcl_ResetResult is used properly} {
-    proc p {} { set r [list foobar] ; incr foo bogus }
+    proc p {} { set r [list foobar] ; incr}
     list [catch {p} msg] $msg
-} {1 {can't read "foo": no such variable}}
+} {1 {wrong # args: should be "incr varName ?increment?"}}
 test compile-11.7 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body {
     proc p {} { set r [list foobar] ; expr !a }
     list [catch {p} msg] $msg
Index: tests/incr-old.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/incr-old.test,v
retrieving revision 1.8
diff -u -r1.8 incr-old.test
--- tests/incr-old.test	3 Nov 2004 17:16:05 -0000	1.8
+++ tests/incr-old.test	9 Feb 2006 17:23:58 -0000
@@ -47,11 +47,8 @@
 } {1 {wrong # args: should be "incr varName ?increment?"}}
 test incr-old-2.3 {incr errors} {
     catch {unset x}
-    list [catch {incr x} msg] $msg $errorInfo
-} {1 {can't read "x": no such variable} {can't read "x": no such variable
-    (reading value of variable to increment)
-    invoked from within
-"incr x"}}
+    incr x
+} 1
 test incr-old-2.4 {incr errors} {
     set x abc
     list [catch {incr x} msg] $msg $errorInfo
Index: tests/incr.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/incr.test,v
retrieving revision 1.11
diff -u -r1.11 incr.test
--- tests/incr.test	3 Nov 2004 17:16:05 -0000	1.11
+++ tests/incr.test	9 Feb 2006 17:23:58 -0000
@@ -87,9 +87,8 @@
     proc p {} {
         incr bar
     }
-    catch {p} msg
-    set msg
-} {can't read "bar": no such variable}
+    p
+} 1
 test incr-1.14 {TclCompileIncrCmd: simple local name, >255 locals} {
     proc 260locals {} {
         # create 260 locals
@@ -211,11 +210,9 @@
 
 
 test incr-1.26 {TclCompileIncrCmd: runtime error, bad variable name} {
-    list [catch {incr {"foo}} msg] $msg $errorInfo
-} {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable
-    (reading value of variable to increment)
-    invoked from within
-"incr {"foo}"}}
+    unset -nocomplain {"foo}
+    incr {"foo}
+} 1
 test incr-1.27 {TclCompileIncrCmd: runtime error, bad variable name} -body {
     list [catch {incr [set]} msg] $msg $errorInfo
 } -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?"
@@ -331,9 +328,8 @@
 	set z incr
         $z bar
     }
-    catch {p} msg
-    set msg
-} {can't read "bar": no such variable}
+    p
+} 1
 test incr-2.14 {incr command (not compiled): simple local name, >255 locals} {
    proc 260locals {} {
         set z incr
@@ -467,12 +463,10 @@
 
 
 test incr-2.26 {incr command (not compiled): runtime error, bad variable name} {
+    unset -nocomplain {"foo}
     set z incr
-    list [catch {$z {"foo}} msg] $msg $errorInfo
-} {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable
-    (reading value of variable to increment)
-    invoked from within
-"$z {"foo}"}}
+    $z {"foo}
+} 1
 test incr-2.27 {incr command (not compiled): runtime error, bad variable name} -body {
     set z incr
     list [catch {$z [set]} msg] $msg $errorInfo
Index: tests/set.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/set.test,v
retrieving revision 1.9
diff -u -r1.9 set.test
--- tests/set.test	3 Nov 2004 17:16:05 -0000	1.9
+++ tests/set.test	9 Feb 2006 17:23:58 -0000
@@ -233,6 +233,7 @@
 {b c} foo 51}]; # " just a matching end quote
 
 test set-2.1 {set command: runtime error, bad variable name} {
+    unset -nocomplain {"foo}
     list [catch {set {"foo}} msg] $msg $errorInfo
 } {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable
     while executing
@@ -476,6 +477,7 @@
 } {wrong # args: should be "set varName ?newValue?"}
 
 test set-4.1 {uncompiled set command: runtime error, bad variable name} {
+    unset -nocomplain {"foo}
     set z set
     list [catch {$z {"foo}} msg] $msg $errorInfo
 } {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable