From 1f81e5eb51a6f1fea57a23736af10772fc6abfae Mon Sep 17 00:00:00 2001 From: dgp Date: Sat, 21 Dec 2019 14:19:08 +0000 Subject: Tests demonstrating the number parsing overflow bugs. --- tests/expr.test | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/expr.test b/tests/expr.test index 3a69407..948195b 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -6836,6 +6836,56 @@ test expr-41.2 {exponent underflow} { expr 1.0e-2147483630 } 0.0 +test expr-41.3 {exponent overflow} { + expr 1e2147483647 +} Inf +test expr-41.4 {exponent overflow} { + expr 1e2147483648 +} Inf +test expr-41.5 {exponent overflow} { + expr 100e2147483645 +} Inf +test expr-41.6 {exponent overflow} { + expr 100e2147483646 +} Inf +test expr-41.7 {exponent overflow} { + expr 1.0e2147483647 +} Inf +test expr-41.8 {exponent overflow} { + expr 1.0e2147483648 +} Inf +test expr-41.9 {exponent overflow} { + expr 1.2e2147483647 +} Inf +test expr-41.10 {exponent overflow} { + expr 1.2e2147483648 +} Inf + +test expr-41.11 {exponent overflow} { + expr 1e-2147483648 +} 0.0 +test expr-41.12 {exponent overflow} { + expr 1e-2147483649 +} 0.0 +test expr-41.13 {exponent overflow} { + expr 100e-2147483650 +} 0.0 +test expr-41.14 {exponent overflow} { + expr 100e-2147483651 +} 0.0 +test expr-41.15 {exponent overflow} { + expr 1.0e-2147483648 +} 0.0 +test expr-41.16 {exponent overflow} { + expr 1.0e-2147483649 +} 0.0 +test expr-41.17 {exponent overflow} { + expr 1.23e-2147483646 +} 0.0 +test expr-41.18 {exponent overflow} { + expr 1.23e-2147483647 +} 0.0 + test expr-42.1 {denormals} ieeeFloatingPoint { expr 7e-324 } 5e-324 -- cgit v0.12 From e52a22ff57e01e8754a81d91e63d00815a68f206 Mon Sep 17 00:00:00 2001 From: dgp Date: Sun, 22 Dec 2019 18:44:45 +0000 Subject: Tests for another parsing bug. --- tests/expr.test | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/expr.test b/tests/expr.test index 948195b..ae86473 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -6886,6 +6886,13 @@ test expr-41.18 {exponent overflow} { expr 1.23e-2147483647 } 0.0 +test expr-41.19 {numSigDigs == 0} { + expr 0e309 +} 0.0 +test expr-41.19 {numSigDigs == 0} { + expr 0e310 +} 0.0 + test expr-42.1 {denormals} ieeeFloatingPoint { expr 7e-324 } 5e-324 -- cgit v0.12 From 38d92076278cb27c34225e14c8240efe720ca431 Mon Sep 17 00:00:00 2001 From: dgp Date: Sun, 22 Dec 2019 23:48:00 +0000 Subject: Assign a double literal to a double variable. No point in requiring conversion. --- generic/tclStrToD.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index a93c81b..e8cd416 100644 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -1650,7 +1650,7 @@ MakeHighPrecisionDouble( goto returnValue; } if (numSigDigs+exponent-1 < minDigits) { - retval = 0; + retval = 0.0; goto returnValue; } -- cgit v0.12 From 63253bc07d07f87120a7414708edc4dee2e46884 Mon Sep 17 00:00:00 2001 From: dgp Date: Mon, 23 Dec 2019 00:54:44 +0000 Subject: Fix parsing bug when (numSigDigs == 0). --- generic/tclStrToD.c | 8 ++++---- tests/expr.test | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index e8cd416..bb83885 100644 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -1645,12 +1645,12 @@ MakeHighPrecisionDouble( * Quick checks for over/underflow. */ - if (numSigDigs+exponent-1 > maxDigits) { - retval = HUGE_VAL; + if ((numSigDigs == 0) || (numSigDigs-1+exponent < minDigits)) { + retval = 0.0; goto returnValue; } - if (numSigDigs+exponent-1 < minDigits) { - retval = 0.0; + if (numSigDigs-1+exponent > maxDigits) { + retval = HUGE_VAL; goto returnValue; } diff --git a/tests/expr.test b/tests/expr.test index ae86473..a15398f 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -6889,7 +6889,7 @@ test expr-41.18 {exponent overflow} { test expr-41.19 {numSigDigs == 0} { expr 0e309 } 0.0 -test expr-41.19 {numSigDigs == 0} { +test expr-41.20 {numSigDigs == 0} { expr 0e310 } 0.0 -- cgit v0.12 From 032451725b0fa15246376ee6831e52cd9bbe4a9e Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 24 Dec 2019 15:04:57 +0000 Subject: Add FALLTHRU markers, eliminating gcc warning using -Wextra --- generic/tclOOCall.c | 2 ++ generic/tclStrToD.c | 1 + 2 files changed, 3 insertions(+) diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index f3474b6..423a41e 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -1677,6 +1677,7 @@ AddPrivatesFromClassChainToCallContext( return 1; } } + /* FALLTHRU */ case 0: return 0; } @@ -1768,6 +1769,7 @@ AddSimpleClassChainToCallContext( privateDanger |= AddSimpleClassChainToCallContext(superPtr, methodNameObj, cbPtr, doneFilters, flags, filterDecl); } + /* FALLTHRU */ case 0: return privateDanger; } diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index 9e4e2c9..eb71276 100644 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -847,6 +847,7 @@ TclParseNumber( acceptState = state; acceptPoint = p; acceptLen = len; + /* FALLTHRU */ case ZERO_B: zerob: if (c == '0') { -- cgit v0.12 From ba0a3a3dd2b77bffb9947f43a7b38f8e27e20868 Mon Sep 17 00:00:00 2001 From: Kevin B Kenny Date: Thu, 26 Dec 2019 23:54:03 +0000 Subject: Add test cases that used to cause floating point overflow in computing the correction term in floating point input conversion. Fix exponent overflow in floating point input conversion, and floating-point overflow in the significand in input conversion. --- generic/tclStrToD.c | 132 ++++++++++++++++++++++++++++++++++++++++------------ tests/expr.test | 9 ++++ 2 files changed, 110 insertions(+), 31 deletions(-) diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index bb83885..a535aed 100644 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -266,10 +266,10 @@ static const Tcl_WideUInt wuipow5[27] = { static int AccumulateDecimalDigit(unsigned, int, Tcl_WideUInt *, mp_int *, int); static double MakeHighPrecisionDouble(int signum, - mp_int *significand, int nSigDigs, int exponent); + mp_int *significand, int nSigDigs, long exponent); static double MakeLowPrecisionDouble(int signum, Tcl_WideUInt significand, int nSigDigs, - int exponent); + long exponent); static double MakeNaN(int signum, Tcl_WideUInt tag); static double RefineApproximation(double approx, mp_int *exactSignificand, int exponent); @@ -1298,16 +1298,45 @@ TclParseNumber( objPtr->typePtr = &tclDoubleType; if (exponentSignum) { + /* + * At this point exponent>=0, so the following calculation + * cannot underflow. + */ exponent = - exponent; } + + /* + * Adjust the exponent for the number of trailing zeros that + * have not been accumulated, and the number of digits after + * the decimal point. Pin any overflow to LONG_MAX/LONG_MIN + * respectively. + */ + + if (exponent >= 0) { + if (exponent - numDigitsAfterDp > LONG_MAX - numTrailZeros) { + exponent = LONG_MAX; + } else { + exponent = exponent - numDigitsAfterDp + numTrailZeros; + } + } else { + if (exponent + numTrailZeros < LONG_MIN + numDigitsAfterDp) { + exponent = LONG_MIN; + } else { + exponent = exponent + numTrailZeros - numDigitsAfterDp; + } + } + + /* + * The desired number is now significandWide * 10**exponent + * or significandBig * 10**exponent, depending on whether + * the significand has overflowed a wide int. + */ if (!significandOverflow) { objPtr->internalRep.doubleValue = MakeLowPrecisionDouble( - signum, significandWide, numSigDigs, - (numTrailZeros + exponent - numDigitsAfterDp)); + signum, significandWide, numSigDigs, exponent); } else { objPtr->internalRep.doubleValue = MakeHighPrecisionDouble( - signum, &significandBig, numSigDigs, - (numTrailZeros + exponent - numDigitsAfterDp)); + signum, &significandBig, numSigDigs, exponent); } break; @@ -1494,7 +1523,7 @@ MakeLowPrecisionDouble( int signum, /* 1 if the number is negative, 0 otherwise */ Tcl_WideUInt significand, /* Significand of the number */ int numSigDigs, /* Number of digits in the significand */ - int exponent) /* Power of ten */ + long exponent) /* Power of ten */ { double retval; /* Value of the number */ mp_int significandBig; /* Significand expressed as a bignum */ @@ -1521,6 +1550,9 @@ MakeLowPrecisionDouble( * Test for the easy cases. */ + if (significand == 0) { + return copysign(0.0, -signum); + } if (numSigDigs <= QUICK_MAX) { if (exponent >= 0) { if (exponent <= mmaxpow) { @@ -1618,7 +1650,7 @@ MakeHighPrecisionDouble( int signum, /* 1=negative, 0=nonnegative */ mp_int *significand, /* Exact significand of the number */ int numSigDigs, /* Number of significant digits */ - int exponent) /* Power of 10 by which to multiply */ + long exponent) /* Power of 10 by which to multiply */ { double retval; int machexp; /* Machine exponent of a power of 10 */ @@ -1642,16 +1674,19 @@ MakeHighPrecisionDouble( #endif /* - * Quick checks for over/underflow. + * Quick checks for zero, and over/underflow. Be careful to avoid + * integer overflow when calculating with 'exponent'. */ - if ((numSigDigs == 0) || (numSigDigs-1+exponent < minDigits)) { - retval = 0.0; - goto returnValue; + if (mp_iszero(significand)) { + return copysign(0.0, -signum); } - if (numSigDigs-1+exponent > maxDigits) { + if (exponent >= 0 && exponent-1 > maxDigits-numSigDigs) { retval = HUGE_VAL; goto returnValue; + } else if (exponent < 0 && numSigDigs+exponent < minDigits+1) { + retval = 0.0; + goto returnValue; } /* @@ -1789,6 +1824,9 @@ RefineApproximation( * "round to even" functionality */ double rteSignificand; /* Significand of the round-to-even result */ int rteExponent; /* Exponent of the round-to-even result */ + int shift; /* Shift count for converting numerator + * and denominator of corrector to floating + * point */ Tcl_WideInt rteSigWide; /* Wide integer version of the significand * for testing evenness */ int i; @@ -1801,13 +1839,22 @@ RefineApproximation( if (approxResult == HUGE_VAL) { return approxResult; } + significand = frexp(approxResult, &binExponent); /* - * Find a common denominator for the decimal and binary fractions. The - * common denominator will be 2**M2 + 5**M5. + * We are trying to compute a corrector term that, when added to the + * approximate result, will yield close to the exact result. + * The exact result is exactSignificand * 10**exponent. + * The approximate result is significand * 2**binExponent + * If exponent<0, we need to multiply the exact value by 10**-exponent + * to make it an integer, plus another factor of 2 to decide on rounding. + * Similarly if binExponent 0) { + mp_div_2d(&twoMv, shift, &twoMv, NULL); + mp_div_2d(&twoMd, shift, &twoMd, NULL); + } + /* * Convert the numerator and denominator of the corrector term accurately * to floating point numbers. diff --git a/tests/expr.test b/tests/expr.test index a15398f..7493663 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -6892,6 +6892,15 @@ test expr-41.19 {numSigDigs == 0} { test expr-41.20 {numSigDigs == 0} { expr 0e310 } 0.0 +test expr-41.21 {negative zero, large exponent} { + expr -0e309 +} -0.0 +test expr-41.22 {negative zero, large exponent} { + expr -0e310 +} -0.0 +test expr-41.23 {floating point overflow on significand (Bug 1de6b0629e)} { + expr 123[string repeat 0 309]1e-310 +} 123.0 test expr-42.1 {denormals} ieeeFloatingPoint { expr 7e-324 -- cgit v0.12 From 30d15963daa3545b3a2b09e6cd1f340f68723020 Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 30 Dec 2019 16:24:29 +0000 Subject: Fixed index line --- doc/coroutine.n | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/coroutine.n b/doc/coroutine.n index a032d2e..11f9069 100644 --- a/doc/coroutine.n +++ b/doc/coroutine.n @@ -9,7 +9,7 @@ .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME -coroutine, yield, yieldto \- Create and produce values from coroutines +coroutine, yield, yieldto, coroinject, coroprobe \- Create and produce values from coroutines .SH SYNOPSIS .nf \fBcoroutine \fIname command\fR ?\fIarg...\fR? -- cgit v0.12 From 158c112e03dcd064327688576f00d1d8150d2932 Mon Sep 17 00:00:00 2001 From: fvogel Date: Thu, 2 Jan 2020 20:56:20 +0000 Subject: Restore the build by providing a copysign replacement for old MSVC versions. --- generic/tclStrToD.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index a535aed..60429c4 100644 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -21,6 +21,18 @@ #include /* + * Older MSVC has no copysign function, but it's available at least since + * MSVC++ 12.0 (that is Visual Studio 2013). + */ + +#if (defined(_MSC_VER) && (_MSC_VER < 1800)) +inline static double +copysign(double a, double b) { + return _copysign(a, b); +} +#endif + +/* * Define KILL_OCTAL to suppress interpretation of numbers with leading zero * as octal. (Ceterum censeo: numeros octonarios delendos esse.) */ -- cgit v0.12 From b873f56401bf2806428c2360bc49c62c8e98552e Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sat, 4 Jan 2020 14:34:36 +0000 Subject: Fix issue [9128866ec8448752] by adding Line Feed character to tis-620.enc. --- library/encoding/tis-620.enc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/encoding/tis-620.enc b/library/encoding/tis-620.enc index c233be5..2e9142a 100644 --- a/library/encoding/tis-620.enc +++ b/library/encoding/tis-620.enc @@ -17,4 +17,4 @@ S 0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F 0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F 0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F -0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 \ No newline at end of file +0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 -- cgit v0.12 From ac2be8e353082ec64280e2c2f429ace57f674d37 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sat, 4 Jan 2020 17:21:53 +0000 Subject: Add a test for issue [9128866ec8], encoding fails to load --- tests/encoding.test | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/encoding.test b/tests/encoding.test index 1c7ee11..21edf79 100644 --- a/tests/encoding.test +++ b/tests/encoding.test @@ -707,6 +707,21 @@ test encoding-27.2 {encoding dirs basic behavior} -returnCodes error -body { } -result "expected directory list but got \"\{not a list\"" } + + +test encoding-28.0 {all encodings load} -body { + set string hello + foreach name [encoding names] { + incr count + encoding convertto $name $string + + # discard the cached internal representation of Tcl_Encoding + # Unfortunately, without this, encoding 2-1 fails. + llength $name + } + return $count +} -result 81 + runtests } -- cgit v0.12 From a75f6ac8ce9148d70852d4a6b749a42af19c6562 Mon Sep 17 00:00:00 2001 From: dgp Date: Sun, 5 Jan 2020 19:03:12 +0000 Subject: Fix documentation, comments, and argument names of Tcl_TransferResult(). --- doc/SetResult.3 | 24 +++++++++++++----------- generic/tcl.decls | 2 +- generic/tclDecls.h | 4 ++-- generic/tclResult.c | 32 +++++++++++++------------------- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/doc/SetResult.3 b/doc/SetResult.3 index e5b81d7..ef6cceb 100644 --- a/doc/SetResult.3 +++ b/doc/SetResult.3 @@ -31,7 +31,7 @@ const char * \fBTcl_ResetResult\fR(\fIinterp\fR) .sp .VS 8.6 -\fBTcl_TransferResult\fR(\fIsourceInterp, result, targetInterp\fR) +\fBTcl_TransferResult\fR(\fIsourceInterp, code, targetInterp\fR) .VE 8.6 .sp \fBTcl_AppendElement\fR(\fIinterp, element\fR) @@ -58,16 +58,15 @@ An argument list which must have been initialized using \fBva_start\fR, and cleared using \fBva_end\fR. .AP Tcl_Interp *sourceInterp in .VS 8.6 -Interpreter that the result and error information should be copied from. +Interpreter that the result and return options should be transferred from. .VE 8.6 .AP Tcl_Interp *targetInterp in .VS 8.6 -Interpreter that the result and error information should be copied to. +Interpreter that the result and return options should be transferred to. .VE 8.6 -.AP int result in +.AP int code in .VS 8.6 -If \fBTCL_OK\fR, only copy the result. If \fBTCL_ERROR\fR, copy the error -information as well. +Return code value that controls transfer of return options. .VE 8.6 .BE .SH DESCRIPTION @@ -156,10 +155,12 @@ call; the last argument in the list must be a NULL pointer. instead of taking a variable number of arguments it takes an argument list. .PP .VS 8.6 -\fBTcl_TransferResult\fR moves a result from one interpreter to another, -optionally (dependent on the \fIresult\fR parameter) including the error -information dictionary as well. The interpreters must be in the same thread. -The source interpreter will have its result reset by this operation. +If \fIsourceInterp\fR and \fItargetInterp\fR are the same, this is a no-op. +Otherwise, \fBTcl_TransferResult\fR moves the result from \fIsourceInterp\fR +to \fItargetInterp\fR, and resets the result in \fIsourceInterp\fR. It +also moves the return options dictionary as controlled by the return code +value \fIcode\fR in the same manner as \fBTcl_GetReturnOptions\fR. The two +interpreters must have been created in the same thread. .VE 8.6 .SH "DEPRECATED INTERFACES" .SS "OLD STRING PROCEDURES" @@ -250,6 +251,7 @@ typedef void \fBTcl_FreeProc\fR( When \fIfreeProc\fR is called, its \fIblockPtr\fR will be set to the value of \fIresult\fR passed to \fBTcl_SetResult\fR. .SH "SEE ALSO" -Tcl_AddErrorInfo, Tcl_CreateObjCommand, Tcl_SetErrorCode, Tcl_Interp +Tcl_AddErrorInfo, Tcl_CreateObjCommand, Tcl_SetErrorCode, Tcl_Interp, +Tcl_GetReturnOptions .SH KEYWORDS append, command, element, list, value, result, return value, interpreter diff --git a/generic/tcl.decls b/generic/tcl.decls index c2a9c89..f37c0f6 100644 --- a/generic/tcl.decls +++ b/generic/tcl.decls @@ -2223,7 +2223,7 @@ declare 606 { # TIP#307 (move results between interpreters) dkf declare 607 { - void Tcl_TransferResult(Tcl_Interp *sourceInterp, int result, + void Tcl_TransferResult(Tcl_Interp *sourceInterp, int code, Tcl_Interp *targetInterp) } diff --git a/generic/tclDecls.h b/generic/tclDecls.h index 719cdf3..a49121a 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -1749,7 +1749,7 @@ EXTERN int Tcl_GetErrorLine(Tcl_Interp *interp); EXTERN void Tcl_SetErrorLine(Tcl_Interp *interp, int lineNum); /* 607 */ EXTERN void Tcl_TransferResult(Tcl_Interp *sourceInterp, - int result, Tcl_Interp *targetInterp); + int code, Tcl_Interp *targetInterp); /* 608 */ EXTERN int Tcl_InterpActive(Tcl_Interp *interp); /* 609 */ @@ -2477,7 +2477,7 @@ typedef struct TclStubs { int (*tcl_ParseArgsObjv) (Tcl_Interp *interp, const Tcl_ArgvInfo *argTable, int *objcPtr, Tcl_Obj *const *objv, Tcl_Obj ***remObjv); /* 604 */ int (*tcl_GetErrorLine) (Tcl_Interp *interp); /* 605 */ void (*tcl_SetErrorLine) (Tcl_Interp *interp, int lineNum); /* 606 */ - void (*tcl_TransferResult) (Tcl_Interp *sourceInterp, int result, Tcl_Interp *targetInterp); /* 607 */ + void (*tcl_TransferResult) (Tcl_Interp *sourceInterp, int code, Tcl_Interp *targetInterp); /* 607 */ int (*tcl_InterpActive) (Tcl_Interp *interp); /* 608 */ void (*tcl_BackgroundException) (Tcl_Interp *interp, int code); /* 609 */ int (*tcl_ZlibDeflate) (Tcl_Interp *interp, int format, Tcl_Obj *data, int level, Tcl_Obj *gzipHeaderDictObj); /* 610 */ diff --git a/generic/tclResult.c b/generic/tclResult.c index 9d0714c..bdb3912 100644 --- a/generic/tclResult.c +++ b/generic/tclResult.c @@ -1682,22 +1682,14 @@ Tcl_SetReturnOptions( * * Tcl_TransferResult -- * - * Copy the result (and error information) from one interp to another. + * Transfer the result (and error information) from one interp to another. * Used when one interp has caused another interp to evaluate a script * and then wants to transfer the results back to itself. * - * This routine copies the string reps of the result and error - * information. It does not simply increment the refcounts of the result - * and error information objects themselves. It is not legal to exchange - * objects between interps, because an object may be kept alive by one - * interp, but have an internal rep that is only valid while some other - * interp is alive. - * * Results: - * The target interp's result is set to a copy of the source interp's - * result. The source's errorInfo field may be transferred to the - * target's errorInfo field, and the source's errorCode field may be - * transferred to the target's errorCode field. + * The result of targetInterp is set to the result read from sourceInterp. + * The return options dictionary of sourceInterp is transferred to + * targetInterp as appropriate for the return code value code. * * Side effects: * None. @@ -1707,14 +1699,16 @@ Tcl_SetReturnOptions( void Tcl_TransferResult( - Tcl_Interp *sourceInterp, /* Interp whose result and error information + Tcl_Interp *sourceInterp, /* Interp whose result and return options * should be moved to the target interp. * After moving result, this interp's result * is reset. */ - int result, /* TCL_OK if just the result should be copied, - * TCL_ERROR if both the result and error - * information should be copied. */ - Tcl_Interp *targetInterp) /* Interp where result and error information + int code, /* The return code value active in + * sourceInterp. Controls how the return options + * dictionary is retrieved from sourceInterp, + * same as in Tcl_GetReturnOptions, to then be + * transferred to targetInterp. */ + Tcl_Interp *targetInterp) /* Interp where result and return options * should be stored. If source and target are * the same, nothing is done. */ { @@ -1725,7 +1719,7 @@ Tcl_TransferResult( return; } - if (result == TCL_OK && siPtr->returnOpts == NULL) { + if (code == TCL_OK && siPtr->returnOpts == NULL) { /* * Special optimization for the common case of normal command return * code and no explicit return options. @@ -1737,7 +1731,7 @@ Tcl_TransferResult( } } else { Tcl_SetReturnOptions(targetInterp, - Tcl_GetReturnOptions(sourceInterp, result)); + Tcl_GetReturnOptions(sourceInterp, code)); tiPtr->flags &= ~(ERR_ALREADY_LOGGED); } Tcl_SetObjResult(targetInterp, Tcl_GetObjResult(sourceInterp)); -- cgit v0.12 From 5f46a6c4a74189937ea3ffee44c7d022a75edf4c Mon Sep 17 00:00:00 2001 From: dgp Date: Sun, 5 Jan 2020 19:16:33 +0000 Subject: Rewrite: lead paragraph with name of documented routine. --- doc/SetResult.3 | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/SetResult.3 b/doc/SetResult.3 index ef6cceb..6cd17ca 100644 --- a/doc/SetResult.3 +++ b/doc/SetResult.3 @@ -155,12 +155,14 @@ call; the last argument in the list must be a NULL pointer. instead of taking a variable number of arguments it takes an argument list. .PP .VS 8.6 -If \fIsourceInterp\fR and \fItargetInterp\fR are the same, this is a no-op. -Otherwise, \fBTcl_TransferResult\fR moves the result from \fIsourceInterp\fR -to \fItargetInterp\fR, and resets the result in \fIsourceInterp\fR. It -also moves the return options dictionary as controlled by the return code -value \fIcode\fR in the same manner as \fBTcl_GetReturnOptions\fR. The two -interpreters must have been created in the same thread. +\fBTcl_TransferResult\fR transfers interpreter state from \fIsourceInterp\fR +to \fItargetInterp\R. The two interpreters must have been created in the +same thread. If \fIsourceInterp\fR and \fItargetInterp\fR are the same, +this is a no-op. Otherwise, \fBTcl_TransferResult\fR moves the result +from \fIsourceInterp\fR to \fItargetInterp\fR, and resets the result +in \fIsourceInterp\fR. It also moves the return options dictionary as +controlled by the return code value \fIcode\fR in the same manner +as \fBTcl_GetReturnOptions\fR. .VE 8.6 .SH "DEPRECATED INTERFACES" .SS "OLD STRING PROCEDURES" -- cgit v0.12 From 3dae54c810e66b88879e0f30a7374e5327815901 Mon Sep 17 00:00:00 2001 From: dgp Date: Sun, 5 Jan 2020 19:18:30 +0000 Subject: formatting typo and rewrite --- doc/SetResult.3 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/SetResult.3 b/doc/SetResult.3 index 6cd17ca..7ced0be 100644 --- a/doc/SetResult.3 +++ b/doc/SetResult.3 @@ -156,9 +156,9 @@ instead of taking a variable number of arguments it takes an argument list. .PP .VS 8.6 \fBTcl_TransferResult\fR transfers interpreter state from \fIsourceInterp\fR -to \fItargetInterp\R. The two interpreters must have been created in the +to \fItargetInterp\fR. The two interpreters must have been created in the same thread. If \fIsourceInterp\fR and \fItargetInterp\fR are the same, -this is a no-op. Otherwise, \fBTcl_TransferResult\fR moves the result +nothing is done. Otherwise, \fBTcl_TransferResult\fR moves the result from \fIsourceInterp\fR to \fItargetInterp\fR, and resets the result in \fIsourceInterp\fR. It also moves the return options dictionary as controlled by the return code value \fIcode\fR in the same manner -- cgit v0.12 From b60f173c379f120a700b92671e10dc780b64acf1 Mon Sep 17 00:00:00 2001 From: dgp Date: Sun, 5 Jan 2020 19:41:04 +0000 Subject: Tcl_TransferResult was new in 8.6, so mark the man page with that version. --- doc/SetResult.3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/SetResult.3 b/doc/SetResult.3 index 7ced0be..e50650e 100644 --- a/doc/SetResult.3 +++ b/doc/SetResult.3 @@ -5,7 +5,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -.TH Tcl_SetResult 3 8.0 Tcl "Tcl Library Procedures" +.TH Tcl_SetResult 3 8.6 Tcl "Tcl Library Procedures" .so man.macros .BS .SH NAME -- cgit v0.12 From 1ccdd5f18672bc47517b020a1c65d861351fcfdd Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 6 Jan 2020 10:28:28 +0000 Subject: Don't assume/set LDFLAGS being "", it could be set on the "configure" command-line. Remove "test-packages" test-target (which doesn't exist), but add "test-tcl" being the same as "test". --- unix/Makefile.in | 21 ++++++++++++++++++++- unix/configure | 1 - unix/tcl.m4 | 4 +--- win/Makefile.in | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/unix/Makefile.in b/unix/Makefile.in index ea89d11..f314862 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -601,7 +601,9 @@ tcltest-real: # tcltest, ie: # % make test TESTFLAGS="-verbose bps -file fileName.test" -test: tcltest@EXEEXT@ +test: test-tcl + +test-tcl: tcltest@EXEEXT@ @LD_LIBRARY_PATH_VAR@="`pwd`:$${@LD_LIBRARY_PATH_VAR@}"; export @LD_LIBRARY_PATH_VAR@; \ TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \ ./tcltest@EXEEXT@ $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) @@ -1862,4 +1864,21 @@ package-generate: rm -rf $(PACKAGE) #-------------------------------------------------------------------------- +# The list of all the targets that do not correspond to real files. This stops +# 'make' from getting confused when someone makes an error in a rule. +#-------------------------------------------------------------------------- + +.PHONY: all binaries libraries objs doc html html-tcl html-tk test runtest +.PHONY: install install-strip install-binaries install-libraries +.PHONY: install-headers install-private-headers install-doc +.PHONY: clean distclean depend genstubs checkstubs checkexports checkuchar +.PHONY: shell gdb valgrind valgrindshell dist alldist rpm +.PHONY: tclLibObjs tcltest-real test-tcl gdb-test ro-test trace-test xttest +.PHONY: topDirName gendate gentommath_h trace-shell checkdoc +.PHONY: install-tzdata install-msgs +.PHONY: packages configure-packages test-packages clean-packages +.PHONY: dist-packages distclean-packages install-packages +.PHONY: install-libraries-zipfs-shared install-libraries-zipfs-static tclzipfile + +#-------------------------------------------------------------------------- # DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/unix/configure b/unix/configure index 3cfc79f..a84226f 100755 --- a/unix/configure +++ b/unix/configure @@ -7657,7 +7657,6 @@ fi SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" - LDFLAGS="" if test $doRpath = yes; then CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' diff --git a/unix/tcl.m4 b/unix/tcl.m4 index 932b0ad..75608b5 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 @@ -1507,7 +1507,6 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ # Step 4 will set the necessary variables DL_OBJS="" SHLIB_LD_LIBS="" - LDFLAGS="" ;; *) case "$arch" in @@ -1526,7 +1525,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' - LDFLAGS="-Wl,-export-dynamic" + LDFLAGS="$LDFLAGS -Wl,-export-dynamic" ;; esac case "$arch" in @@ -1576,7 +1575,6 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" - LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) diff --git a/win/Makefile.in b/win/Makefile.in index 768711a..47a754d 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -716,7 +716,7 @@ install-private-headers: libraries # tcltest, i.e.: # % make test TESTFLAGS="-verbose bps -file fileName.test" -test: test-tcl test-packages +test: test-tcl test-tcl: tcltest TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \ -- cgit v0.12