From 98fc2e08c445e88c982282eba4b2f7da09a583e9 Mon Sep 17 00:00:00 2001
From: "jan.nijtmans" <nijtmans@users.sourceforge.net>
Date: Fri, 12 Apr 2013 11:08:18 +0000
Subject: Implement Tcl_Pkg* functions as macro's around Tcl_Pkg*Ex. This saves
 stack space, is (marginally) faster, while still being fully up/down
 compatible. It makes pkgb.so loadable in "novem" without the need to change
 the Tcl_PkgProvide() call to Tcl_PkgProvideEx().

---
 generic/tclDecls.h | 10 ++++++++++
 generic/tclPkg.c   | 11 +++++++----
 unix/dltest/pkgb.c |  4 ++--
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 618536d..a94cb0e 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -4516,6 +4516,16 @@ extern TclStubs *tclStubsPtr;
 
 #undef TclUnusedStubEntry
 
+#undef Tcl_PkgPresent
+#define Tcl_PkgPresent(interp, name, version, exact) \
+	Tcl_PkgPresentEx(interp, name, version, exact, NULL)
+#undef Tcl_PkgProvide
+#define Tcl_PkgProvide(interp, name, version) \
+	Tcl_PkgProvideEx(interp, name, version, NULL)
+#undef Tcl_PkgRequire
+#define Tcl_PkgRequire(interp, name, version, exact) \
+	Tcl_PkgRequireEx(interp, name, version, exact, NULL)
+
 /*
  * Deprecated Tcl procedures:
  */
diff --git a/generic/tclPkg.c b/generic/tclPkg.c
index 940d011..6ab1b33 100644
--- a/generic/tclPkg.c
+++ b/generic/tclPkg.c
@@ -119,6 +119,7 @@ static CONST char *	PkgRequireCore(Tcl_Interp *interp, CONST char *name,
  *----------------------------------------------------------------------
  */
 
+#undef Tcl_PkgProvide
 int
 Tcl_PkgProvide(interp, name, version)
      Tcl_Interp *interp;	/* Interpreter in which package is now
@@ -223,6 +224,7 @@ Tcl_PkgRequireProc(interp,name,reqc,reqv,clientDataPtr)
 }
 #endif
 
+#undef Tcl_PkgRequire
 CONST char *
 Tcl_PkgRequire(interp, name, version, exact)
     Tcl_Interp *interp;	        /* Interpreter in which package is now
@@ -827,6 +829,7 @@ PkgRequireCore(
  *----------------------------------------------------------------------
  */
 
+#undef Tcl_PkgPresent
 CONST char *
 Tcl_PkgPresent(interp, name, version, exact)
      Tcl_Interp *interp;	/* Interpreter in which package is now
@@ -1127,7 +1130,7 @@ Tcl_PackageObjCmd(dummy, interp, objc, objv)
 	    }
 	}
 #endif
-	Tcl_PkgPresent(interp, name, version, exact);
+	Tcl_PkgPresentEx(interp, name, version, exact, NULL);
 	return TCL_ERROR;
 	break;
     }
@@ -1155,7 +1158,7 @@ Tcl_PackageObjCmd(dummy, interp, objc, objv)
 #endif
 	    return TCL_ERROR;
 	}
-	return Tcl_PkgProvide(interp, argv2, argv3);
+	return Tcl_PkgProvideEx(interp, argv2, argv3, NULL);
     }
     case PKG_REQUIRE: {
     require:
@@ -1187,9 +1190,9 @@ Tcl_PackageObjCmd(dummy, interp, objc, objv)
 	}
 	if (exact) {
 	    argv3 =  Tcl_GetString(objv[3]);
-	    version = Tcl_PkgRequire(interp, argv3, version, exact);
+	    version = Tcl_PkgRequireEx(interp, argv3, version, exact, NULL);
 	} else {
-	    version = Tcl_PkgRequire(interp, argv2, version, exact);
+	    version = Tcl_PkgRequireEx(interp, argv2, version, exact, NULL);
 	}
 	if (version == NULL) {
 	    return TCL_ERROR;
diff --git a/unix/dltest/pkgb.c b/unix/dltest/pkgb.c
index 99f189f..51aaad8 100644
--- a/unix/dltest/pkgb.c
+++ b/unix/dltest/pkgb.c
@@ -124,7 +124,7 @@ Pkgb_Init(interp)
 	}
 	Tcl_ResetResult(interp);
     }
-    code = Tcl_PkgProvideEx(interp, "Pkgb", "2.3", NULL);
+    code = Tcl_PkgProvide(interp, "Pkgb", "2.3");
     if (code != TCL_OK) {
 	return code;
     }
@@ -165,7 +165,7 @@ Pkgb_SafeInit(interp)
 	}
 	Tcl_ResetResult(interp);
     }
-    code = Tcl_PkgProvideEx(interp, "Pkgb", "2.3", NULL);
+    code = Tcl_PkgProvide(interp, "Pkgb", "2.3");
     if (code != TCL_OK) {
 	return code;
     }
-- 
cgit v0.12

