summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2013-10-13 16:19:44 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2013-10-13 16:19:44 (GMT)
commita31cc592a4e4c6d1ba5a4f0e12457adcfe668d15 (patch)
treedec7c290e72d083bd4b35a355560b722b53b48b9
parent5ab205e3a03e8c73052ecffe7173cb205398c779 (diff)
downloadtcl-a31cc592a4e4c6d1ba5a4f0e12457adcfe668d15.zip
tcl-a31cc592a4e4c6d1ba5a4f0e12457adcfe668d15.tar.gz
tcl-a31cc592a4e4c6d1ba5a4f0e12457adcfe668d15.tar.bz2
The Tcl 9.0 way of how [dfc08326e3] should be fixed: Real integration of TclOO in Tcl means that calling the function Tcl_OOInitStubs() should be elminated in full. This branch shows how to do that.rfe_dfc08326e3
-rw-r--r--generic/tcl.decls3
-rw-r--r--generic/tclDecls.h1
-rw-r--r--generic/tclOO.h9
-rw-r--r--generic/tclOOStubLib.c71
-rw-r--r--generic/tclStubInit.c10
-rw-r--r--generic/tclStubLib.c13
-rw-r--r--macosx/Tcl.xcode/project.pbxproj4
-rw-r--r--macosx/Tcl.xcodeproj/project.pbxproj4
-rw-r--r--unix/Makefile.in7
-rw-r--r--win/Makefile.in6
-rw-r--r--win/makefile.bc6
-rw-r--r--win/makefile.vc6
-rw-r--r--win/tcl.dsp4
13 files changed, 31 insertions, 113 deletions
diff --git a/generic/tcl.decls b/generic/tcl.decls
index 734aae7..005b513 100644
--- a/generic/tcl.decls
+++ b/generic/tcl.decls
@@ -18,9 +18,10 @@ library tcl
# tclPlat - platform specific public
# tclInt - generic private
# tclPlatInt - platform specific private
+# tclOO - tclOO public
interface tcl
-hooks {tclPlat tclInt tclIntPlat}
+hooks {tclPlat tclInt tclIntPlat tclOO}
scspec TCLAPI
# Declare each of the functions in the public Tcl interface. Note that
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index e38f752..673726b 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -1731,6 +1731,7 @@ typedef struct {
const struct TclPlatStubs *tclPlatStubs;
const struct TclIntStubs *tclIntStubs;
const struct TclIntPlatStubs *tclIntPlatStubs;
+ const struct TclOOStubs *tclOOStubs;
} TclStubHooks;
typedef struct TclStubs {
diff --git a/generic/tclOO.h b/generic/tclOO.h
index a6e8a22..b8aa974 100644
--- a/generic/tclOO.h
+++ b/generic/tclOO.h
@@ -37,13 +37,8 @@
extern "C" {
#endif
-extern const char *TclOOInitializeStubs(
- Tcl_Interp *, const char *version);
-#define Tcl_OOInitStubs(interp) \
- TclOOInitializeStubs((interp), TCLOO_VERSION)
-#ifndef USE_TCL_STUBS
-# define TclOOInitializeStubs(interp, version) (TCLOO_PATCHLEVEL)
-#endif
+#define Tcl_OOInitStubs(interp) (TCLOO_PATCHLEVEL)
+#define TclOOInitializeStubs(interp, version) (TCLOO_PATCHLEVEL)
/*
* These are opaque types.
diff --git a/generic/tclOOStubLib.c b/generic/tclOOStubLib.c
deleted file mode 100644
index a9fa212..0000000
--- a/generic/tclOOStubLib.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * ORIGINAL SOURCE: tk/generic/tkStubLib.c, version 1.9 2004/03/17
- */
-
-#include "tclOOInt.h"
-
-MODULE_SCOPE const TclOOStubs *tclOOStubsPtr;
-MODULE_SCOPE const TclOOIntStubs *tclOOIntStubsPtr;
-
-const TclOOStubs *tclOOStubsPtr = NULL;
-const TclOOIntStubs *tclOOIntStubsPtr = NULL;
-
-/*
- *----------------------------------------------------------------------
- *
- * TclOOInitializeStubs --
- * Load the tclOO package, initialize stub table pointer. Do not call
- * this function directly, use Tcl_OOInitStubs() macro instead.
- *
- * Results:
- * The actual version of the package that satisfies the request, or NULL
- * to indicate that an error occurred.
- *
- * Side effects:
- * Sets the stub table pointers.
- *
- *----------------------------------------------------------------------
- */
-
-#undef TclOOInitializeStubs
-
-MODULE_SCOPE const char *
-TclOOInitializeStubs(
- Tcl_Interp *interp,
- const char *version)
-{
- int exact = 0;
- const char *packageName = "TclOO";
- const char *errMsg = NULL;
- TclOOStubs *stubsPtr = NULL;
- const char *actualVersion = tclStubsPtr->tcl_PkgRequireEx(interp,
- packageName, version, exact, &stubsPtr);
-
- if (actualVersion == NULL) {
- return NULL;
- }
- if (stubsPtr == NULL) {
- errMsg = "missing stub table pointer";
- } else {
- tclOOStubsPtr = stubsPtr;
- if (stubsPtr->hooks) {
- tclOOIntStubsPtr = stubsPtr->hooks->tclOOIntStubs;
- } else {
- tclOOIntStubsPtr = NULL;
- }
- return actualVersion;
- }
- tclStubsPtr->tcl_ResetResult(interp);
- tclStubsPtr->tcl_AppendResult(interp, "Error loading ", packageName,
- " (requested version ", version, ", actual version ",
- actualVersion, "): ", errMsg, NULL);
- return NULL;
-}
-
-/*
- * Local Variables:
- * mode: c
- * c-basic-offset: 4
- * fill-column: 78
- * End:
- */
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index 5fb501a..1ec155a 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -10,8 +10,15 @@
*/
#include "tclInt.h"
+#include "tclOOInt.h"
#include "tommath.h"
+/*
+ * The actual definition of the variable holding the TclOO stub table.
+ */
+
+MODULE_SCOPE const TclOOStubs tclOOStubs;
+
#ifdef __GNUC__
#pragma GCC dependency "tcl.decls"
#pragma GCC dependency "tclInt.decls"
@@ -694,7 +701,8 @@ const TclTomMathStubs tclTomMathStubs = {
static const TclStubHooks tclStubHooks = {
&tclPlatStubs,
&tclIntStubs,
- &tclIntPlatStubs
+ &tclIntPlatStubs,
+ &tclOOStubs
};
const TclStubs tclStubs = {
diff --git a/generic/tclStubLib.c b/generic/tclStubLib.c
index 3e4a5ae..6487ebb 100644
--- a/generic/tclStubLib.c
+++ b/generic/tclStubLib.c
@@ -12,16 +12,21 @@
*/
#include "tclInt.h"
+#include "tclOOInt.h"
MODULE_SCOPE const TclStubs *tclStubsPtr;
MODULE_SCOPE const TclPlatStubs *tclPlatStubsPtr;
MODULE_SCOPE const TclIntStubs *tclIntStubsPtr;
MODULE_SCOPE const TclIntPlatStubs *tclIntPlatStubsPtr;
+MODULE_SCOPE const TclOOStubs *tclOOStubsPtr;
+MODULE_SCOPE const TclOOIntStubs *tclOOIntStubsPtr;
const TclStubs *tclStubsPtr = NULL;
const TclPlatStubs *tclPlatStubsPtr = NULL;
const TclIntStubs *tclIntStubsPtr = NULL;
const TclIntPlatStubs *tclIntPlatStubsPtr = NULL;
+const TclOOStubs *tclOOStubsPtr = NULL;
+const TclOOIntStubs *tclOOIntStubsPtr = NULL;
/*
* Use our own ISDIGIT to avoid linking to libc on windows
@@ -113,10 +118,18 @@ Tcl_InitStubs(
tclPlatStubsPtr = stubsPtr->hooks->tclPlatStubs;
tclIntStubsPtr = stubsPtr->hooks->tclIntStubs;
tclIntPlatStubsPtr = stubsPtr->hooks->tclIntPlatStubs;
+ tclOOStubsPtr = stubsPtr->hooks->tclOOStubs;
+ if (tclOOStubsPtr && tclOOStubsPtr->hooks) {
+ tclOOIntStubsPtr = tclOOStubsPtr->hooks->tclOOIntStubs;
+ } else {
+ tclOOIntStubsPtr = NULL;
+ }
} else {
tclPlatStubsPtr = NULL;
tclIntStubsPtr = NULL;
tclIntPlatStubsPtr = NULL;
+ tclOOStubsPtr = NULL;
+ tclOOIntStubsPtr = NULL;
}
return actualVersion;
diff --git a/macosx/Tcl.xcode/project.pbxproj b/macosx/Tcl.xcode/project.pbxproj
index a2a703b..7fb918e 100644
--- a/macosx/Tcl.xcode/project.pbxproj
+++ b/macosx/Tcl.xcode/project.pbxproj
@@ -15,7 +15,6 @@
F93599BE0DF1F77400E04F67 /* tclOOInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599BD0DF1F77400E04F67 /* tclOOInfo.c */; };
F93599C20DF1F78300E04F67 /* tclOOMethod.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599C10DF1F78300E04F67 /* tclOOMethod.c */; };
F93599C40DF1F78800E04F67 /* tclOOStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599C30DF1F78800E04F67 /* tclOOStubInit.c */; };
- F93599C60DF1F78D00E04F67 /* tclOOStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599C50DF1F78D00E04F67 /* tclOOStubLib.c */; };
F95D77EA0DFD820D00A8BF6F /* tclIORTrans.c in Sources */ = {isa = PBXBuildFile; fileRef = F95D77E90DFD820D00A8BF6F /* tclIORTrans.c */; };
F96437CA0EF0D4B2003F468E /* tclZlib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96437C90EF0D4B2003F468E /* tclZlib.c */; };
F96437E70EF0D652003F468E /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F96437E60EF0D652003F468E /* libz.dylib */; };
@@ -209,7 +208,6 @@
F93599C00DF1F77D00E04F67 /* tclOOIntDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclOOIntDecls.h; sourceTree = "<group>"; };
F93599C10DF1F78300E04F67 /* tclOOMethod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclOOMethod.c; sourceTree = "<group>"; };
F93599C30DF1F78800E04F67 /* tclOOStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclOOStubInit.c; sourceTree = "<group>"; };
- F93599C50DF1F78D00E04F67 /* tclOOStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclOOStubLib.c; sourceTree = "<group>"; };
F93599C80DF1F81900E04F67 /* oo.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = oo.test; sourceTree = "<group>"; };
F93599CF0DF1F87F00E04F67 /* Class.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Class.3; sourceTree = "<group>"; };
F93599D00DF1F89E00E04F67 /* class.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = class.n; sourceTree = "<group>"; };
@@ -1289,7 +1287,6 @@
F93599C00DF1F77D00E04F67 /* tclOOIntDecls.h */,
F93599C10DF1F78300E04F67 /* tclOOMethod.c */,
F93599C30DF1F78800E04F67 /* tclOOStubInit.c */,
- F93599C50DF1F78D00E04F67 /* tclOOStubLib.c */,
F96D3F0E08F272A7004A47F5 /* tclPanic.c */,
F96D3F0F08F272A7004A47F5 /* tclParse.c */,
F96D3F1108F272A7004A47F5 /* tclPathObj.c */,
@@ -2023,7 +2020,6 @@
F93599BE0DF1F77400E04F67 /* tclOOInfo.c in Sources */,
F93599C20DF1F78300E04F67 /* tclOOMethod.c in Sources */,
F93599C40DF1F78800E04F67 /* tclOOStubInit.c in Sources */,
- F93599C60DF1F78D00E04F67 /* tclOOStubLib.c in Sources */,
F96D45AD08F272BC004A47F5 /* tclPanic.c in Sources */,
F96D45AE08F272BC004A47F5 /* tclParse.c in Sources */,
F96D45B008F272BC004A47F5 /* tclPathObj.c in Sources */,
diff --git a/macosx/Tcl.xcodeproj/project.pbxproj b/macosx/Tcl.xcodeproj/project.pbxproj
index 9c18ac0..ddd5e3b 100644
--- a/macosx/Tcl.xcodeproj/project.pbxproj
+++ b/macosx/Tcl.xcodeproj/project.pbxproj
@@ -15,7 +15,6 @@
F93599BE0DF1F77400E04F67 /* tclOOInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599BD0DF1F77400E04F67 /* tclOOInfo.c */; };
F93599C20DF1F78300E04F67 /* tclOOMethod.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599C10DF1F78300E04F67 /* tclOOMethod.c */; };
F93599C40DF1F78800E04F67 /* tclOOStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599C30DF1F78800E04F67 /* tclOOStubInit.c */; };
- F93599C60DF1F78D00E04F67 /* tclOOStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F93599C50DF1F78D00E04F67 /* tclOOStubLib.c */; };
F95D77EA0DFD820D00A8BF6F /* tclIORTrans.c in Sources */ = {isa = PBXBuildFile; fileRef = F95D77E90DFD820D00A8BF6F /* tclIORTrans.c */; };
F96437CA0EF0D4B2003F468E /* tclZlib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96437C90EF0D4B2003F468E /* tclZlib.c */; };
F96437E70EF0D652003F468E /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F96437E60EF0D652003F468E /* libz.dylib */; };
@@ -209,7 +208,6 @@
F93599C00DF1F77D00E04F67 /* tclOOIntDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclOOIntDecls.h; sourceTree = "<group>"; };
F93599C10DF1F78300E04F67 /* tclOOMethod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclOOMethod.c; sourceTree = "<group>"; };
F93599C30DF1F78800E04F67 /* tclOOStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclOOStubInit.c; sourceTree = "<group>"; };
- F93599C50DF1F78D00E04F67 /* tclOOStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclOOStubLib.c; sourceTree = "<group>"; };
F93599C80DF1F81900E04F67 /* oo.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = oo.test; sourceTree = "<group>"; };
F93599CF0DF1F87F00E04F67 /* Class.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Class.3; sourceTree = "<group>"; };
F93599D00DF1F89E00E04F67 /* class.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = class.n; sourceTree = "<group>"; };
@@ -1289,7 +1287,6 @@
F93599C00DF1F77D00E04F67 /* tclOOIntDecls.h */,
F93599C10DF1F78300E04F67 /* tclOOMethod.c */,
F93599C30DF1F78800E04F67 /* tclOOStubInit.c */,
- F93599C50DF1F78D00E04F67 /* tclOOStubLib.c */,
F96D3F0E08F272A7004A47F5 /* tclPanic.c */,
F96D3F0F08F272A7004A47F5 /* tclParse.c */,
F96D3F1108F272A7004A47F5 /* tclPathObj.c */,
@@ -2023,7 +2020,6 @@
F93599BE0DF1F77400E04F67 /* tclOOInfo.c in Sources */,
F93599C20DF1F78300E04F67 /* tclOOMethod.c in Sources */,
F93599C40DF1F78800E04F67 /* tclOOStubInit.c in Sources */,
- F93599C60DF1F78D00E04F67 /* tclOOStubLib.c in Sources */,
F96D45AD08F272BC004A47F5 /* tclPanic.c in Sources */,
F96D45AE08F272BC004A47F5 /* tclParse.c in Sources */,
F96D45B008F272BC004A47F5 /* tclPathObj.c in Sources */,
diff --git a/unix/Makefile.in b/unix/Makefile.in
index 309e229..67bbd49 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -337,7 +337,6 @@ TOMMATH_OBJS = bncore.o bn_reverse.o bn_fast_s_mp_mul_digs.o \
STUB_LIB_OBJS = tclStubLib.o \
tclTomMathStubLib.o \
- tclOOStubLib.o \
${COMPAT_OBJS}
UNIX_OBJS = tclUnixChan.o tclUnixEvent.o tclUnixFCmd.o \
@@ -475,8 +474,7 @@ OO_SRCS = \
STUB_SRCS = \
$(GENERIC_DIR)/tclStubLib.c \
- $(GENERIC_DIR)/tclTomMathStubLib.c \
- $(GENERIC_DIR)/tclOOStubLib.c
+ $(GENERIC_DIR)/tclTomMathStubLib.c
TOMMATH_SRCS = \
$(TOMMATH_DIR)/bncore.c \
@@ -1696,9 +1694,6 @@ tclStubLib.o: $(GENERIC_DIR)/tclStubLib.c
tclTomMathStubLib.o: $(GENERIC_DIR)/tclTomMathStubLib.c
$(CC) -c $(STUB_CC_SWITCHES) $(GENERIC_DIR)/tclTomMathStubLib.c
-tclOOStubLib.o: $(GENERIC_DIR)/tclOOStubLib.c
- $(CC) -c $(STUB_CC_SWITCHES) $(GENERIC_DIR)/tclOOStubLib.c
-
.c.o:
$(CC) -c $(CC_SWITCHES) $<
diff --git a/win/Makefile.in b/win/Makefile.in
index be82d73..6f27856 100644
--- a/win/Makefile.in
+++ b/win/Makefile.in
@@ -385,8 +385,7 @@ REG_OBJS = tclWinReg.$(OBJEXT)
STUB_OBJS = \
tclStubLib.$(OBJEXT) \
- tclTomMathStubLib.$(OBJEXT) \
- tclOOStubLib.$(OBJEXT)
+ tclTomMathStubLib.$(OBJEXT)
TCLSH_OBJS = tclAppInit.$(OBJEXT)
@@ -518,9 +517,6 @@ tclStubLib.${OBJEXT}: tclStubLib.c
tclTomMathStubLib.${OBJEXT}: tclTomMathStubLib.c
$(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME)
-tclOOStubLib.${OBJEXT}: tclOOStubLib.c
- $(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME)
-
# Implicit rule for all object files that will end up in the Tcl library
%.${OBJEXT}: %.c
diff --git a/win/makefile.bc b/win/makefile.bc
index f6e32f9..73fbc19 100644
--- a/win/makefile.bc
+++ b/win/makefile.bc
@@ -279,8 +279,7 @@ TCLOBJS = \
TCLSTUBOBJS = \
$(TMPDIR)\tclStubLib.obj \
- $(TMPDIR)\tclTomMathStubLib.obj \
- $(TMPDIR)\tclOOStubLib.obj
+ $(TMPDIR)\tclTomMathStubLib.obj
WINDIR = $(ROOT)\win
GENERICDIR = $(ROOT)\generic
@@ -531,9 +530,6 @@ $(TMPDIR)\tclStubLib.obj : $(GENERICDIR)\tclStubLib.c
$(TMPDIR)\tclTomMathStubLib.obj : $(GENERICDIR)\tclTomMathStubLib.c
$(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -o$(TMPDIR)\$@ $?
-$(TMPDIR)\tclOOStubLib.obj : $(GENERICDIR)\tclOOStubLib.c
- $(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -o$(TMPDIR)\$@ $?
-
# Dedependency rules
diff --git a/win/makefile.vc b/win/makefile.vc
index b76a939..e3851c9 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -450,8 +450,7 @@ TCLOBJS = $(COREOBJS) $(ZLIBOBJS) $(TOMMATHOBJS) $(PLATFORMOBJS)
TCLSTUBOBJS = \
$(TMP_DIR)\tclStubLib.obj \
- $(TMP_DIR)\tclTomMathStubLib.obj \
- $(TMP_DIR)\tclOOStubLib.obj
+ $(TMP_DIR)\tclTomMathStubLib.obj
### The following paths CANNOT have spaces in them.
COMPATDIR = $(ROOT)\compat
@@ -982,9 +981,6 @@ $(TMP_DIR)\tclStubLib.obj: $(GENERICDIR)\tclStubLib.c
$(TMP_DIR)\tclTomMathStubLib.obj: $(GENERICDIR)\tclTomMathStubLib.c
$(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?
-$(TMP_DIR)\tclOOStubLib.obj: $(GENERICDIR)\tclOOStubLib.c
- $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?
-
#---------------------------------------------------------------------
# Generate the source dependencies. Having dependency rules will
# improve incremental build accuracy without having to resort to a
diff --git a/win/tcl.dsp b/win/tcl.dsp
index 57ec6bf..96152b8 100644
--- a/win/tcl.dsp
+++ b/win/tcl.dsp
@@ -1300,10 +1300,6 @@ SOURCE=..\generic\tclStubLib.c
# End Source File
# Begin Source File
-SOURCE=..\generic\tclOOStubLib.c
-# End Source File
-# Begin Source File
-
SOURCE=..\generic\tclTomMathStubLib.c
# End Source File
# Begin Source File