summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--generic/tcl.h2
-rw-r--r--generic/tclBasic.c11
-rw-r--r--tests/coroutine.test24
-rwxr-xr-xunix/configure5
-rw-r--r--unix/tcl.m47
-rwxr-xr-xwin/configure66
-rw-r--r--win/configure.in15
-rw-r--r--win/tclWinPort.h3
9 files changed, 144 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 6c5a31c..2b7012f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2011-04-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * tests/coroutine.test: insure that 'coroutine eval' runs the initial
+ command in the proper context, [Bug 3282869]
+
+2011-04-11 Jan Nijtmans <nijtmans@users.sf.net>
+ * generic/tcl.h: fix for [Bug 3281728]: Tcl sources from 2011-04-06 do
+ * unix/tcl.m4: not build on GCC9 (RH9)
+ * unix/configure:
+
+2011-04-08 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: fix for [Bug 3280043]: win2k: unresolved DLL imports
+ * win/configure.in
+ * win/configure
+
2011-04-06 Miguel Sofer <msofer@users.sf.net>
* generic/tclExecute.c (TclCompileObj): earlier return if Tip280
diff --git a/generic/tcl.h b/generic/tcl.h
index 3285c3c..ed63f8f 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -193,7 +193,7 @@ extern "C" {
# endif
#else
# define DLLIMPORT
-# if defined(__GNUC__) && !defined(NO_VIZ) && !defined(STATIC_BUILD)
+# if defined(__GNUC__) && __GNUC__ > 3
# define DLLEXPORT __attribute__ ((visibility("default")))
# else
# define DLLEXPORT
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index f00864f..5019c86 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -8866,6 +8866,7 @@ TclNRCoroutineObjCmd(
const char *fullName, *procName;
Namespace *nsPtr, *altNsPtr, *cxtNsPtr;
Tcl_DString ds;
+ Namespace *lookupNsPtr = iPtr->varFramePtr->nsPtr;
if (objc < 3) {
Tcl_WrongNumArgs(interp, 1, objv, "name cmd ?arg ...?");
@@ -8952,7 +8953,7 @@ TclNRCoroutineObjCmd(
}
/*
- * Save the base context.
+ * Create the base context.
*/
corPtr->running.framePtr = iPtr->rootFramePtr;
@@ -8972,13 +8973,19 @@ TclNRCoroutineObjCmd(
corPtr->callerEEPtr = iPtr->execEnvPtr;
corPtr->eePtr->corPtr = corPtr;
+ SAVE_CONTEXT(corPtr->caller);
+ corPtr->callerEEPtr = iPtr->execEnvPtr;
+ RESTORE_CONTEXT(corPtr->running);
iPtr->execEnvPtr = corPtr->eePtr;
TclNRAddCallback(interp, NRCoroutineExitCallback, corPtr,
NULL, NULL, NULL);
- iPtr->lookupNsPtr = iPtr->varFramePtr->nsPtr;
+ iPtr->lookupNsPtr = lookupNsPtr;
Tcl_NREvalObj(interp, Tcl_NewListObj(objc-2, objv+2), 0);
+
+ SAVE_CONTEXT(corPtr->running);
+ RESTORE_CONTEXT(corPtr->caller);
iPtr->execEnvPtr = corPtr->callerEEPtr;
/*
diff --git a/tests/coroutine.test b/tests/coroutine.test
index 4d7e3de..bc72017 100644
--- a/tests/coroutine.test
+++ b/tests/coroutine.test
@@ -435,6 +435,30 @@ test coroutine-4.5 {bug #2724403} -constraints {memory} \
unset i ns start end
} -result 0
+test coroutine-4.6 {compile context, bug #3282869} -setup {
+ unset ::x
+ proc f x {
+ coroutine D eval {yield X$x;yield Y}
+ }
+} -body {
+ f 12
+} -cleanup {
+ rename f {}
+} -returnCodes error -match glob -result {can't read *}
+
+test coroutine-4.7 {compile context, bug #3282869} -setup {
+ proc f x {
+ coroutine D eval {yield X$x;yield Y$x}
+ }
+} -body {
+ set ::x 15
+ set ::x [f 12]
+ D
+} -cleanup {
+ unset ::x
+ rename f {}
+} -result YX15
+
test coroutine-5.1 {right numLevels on coro return} -constraints {testnrelevels} \
-setup {
proc nestedYield {{val {}}} {
diff --git a/unix/configure b/unix/configure
index 4fdddd4..2483e4a 100755
--- a/unix/configure
+++ b/unix/configure
@@ -6479,7 +6479,7 @@ if test "${tcl_cv_cc_visibility_hidden+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test "$GCC" = yes -a "$SHARED_BUILD" = 1; then
+ if test "$SHARED_BUILD" = 1; then
hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fvisibility=hidden -Werror"
cat >conftest.$ac_ext <<_ACEOF
@@ -6492,6 +6492,9 @@ cat >>conftest.$ac_ext <<_ACEOF
int
main ()
{
+#if !defined(__GNUC__) || __GNUC__ < 4
+#error visibility hidden is not supported for this compiler
+#endif
;
return 0;
diff --git a/unix/tcl.m4 b/unix/tcl.m4
index 9a02e4c..5f4012d 100644
--- a/unix/tcl.m4
+++ b/unix/tcl.m4
@@ -1044,9 +1044,12 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
AC_CACHE_CHECK([if compiler supports visibility "hidden"],
tcl_cv_cc_visibility_hidden, [
- AS_IF([test "$GCC" = yes -a "$SHARED_BUILD" = 1], [
+ AS_IF([test "$SHARED_BUILD" = 1], [
hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fvisibility=hidden -Werror"
- AC_TRY_COMPILE(,, tcl_cv_cc_visibility_hidden=yes,
+ AC_TRY_COMPILE(,[#if !defined(__GNUC__) || __GNUC__ < 4
+#error visibility hidden is not supported for this compiler
+#endif
+ ], tcl_cv_cc_visibility_hidden=yes,
tcl_cv_cc_visibility_hidden=no)
CFLAGS=$hold_cflags
], [
diff --git a/win/configure b/win/configure
index d1d50e2..ecfd2ec 100755
--- a/win/configure
+++ b/win/configure
@@ -3700,6 +3700,72 @@ _ACEOF
fi
+# See if the <wspiapi.h> header file is present
+
+echo "$as_me:$LINENO: checking for wspiapi.h" >&5
+echo $ECHO_N "checking for wspiapi.h... $ECHO_C" >&6
+if test "${tcl_have_wspiapi_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <wspiapi.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ tcl_have_wspiapi_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+tcl_have_wspiapi_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $tcl_have_wspiapi_h" >&5
+echo "${ECHO_T}$tcl_have_wspiapi_h" >&6
+if test "$tcl_have_wspiapi_h" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WSPIAPI_H 1
+_ACEOF
+
+fi
+
#--------------------------------------------------------------------
# Determines the correct binary file extension (.o, .obj, .exe etc.)
#--------------------------------------------------------------------
diff --git a/win/configure.in b/win/configure.in
index 4e9f2db..54727f8 100644
--- a/win/configure.in
+++ b/win/configure.in
@@ -291,6 +291,21 @@ if test "$tcl_cv_intrinsics" = "yes"; then
[Defined when the compilers supports intrinsics])
fi
+# See if the <wspiapi.h> header file is present
+
+AC_CACHE_CHECK(for wspiapi.h,
+ tcl_have_wspiapi_h,
+AC_TRY_COMPILE([
+#include <wspiapi.h>
+], [],
+ tcl_have_wspiapi_h=yes,
+ tcl_have_wspiapi_h=no)
+)
+if test "$tcl_have_wspiapi_h" = "yes"; then
+ AC_DEFINE(HAVE_WSPIAPI_H, 1,
+ [Defined when wspiapi.h exists])
+fi
+
#--------------------------------------------------------------------
# Determines the correct binary file extension (.o, .obj, .exe etc.)
#--------------------------------------------------------------------
diff --git a/win/tclWinPort.h b/win/tclWinPort.h
index e60ff2c..f7e16a2 100644
--- a/win/tclWinPort.h
+++ b/win/tclWinPort.h
@@ -37,6 +37,9 @@
#define INCL_WINSOCK_API_TYPEDEFS 1
#include <winsock2.h>
#include <ws2tcpip.h>
+#ifdef HAVE_WSPIAPI_H
+# include <wspiapi.h>
+#endif
#ifdef CHECK_UNICODE_CALLS
# define _UNICODE