summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tcl.h37
-rwxr-xr-xgeneric/tclArithSeries.c3
-rw-r--r--generic/tclDictObj.c1
-rw-r--r--generic/tclListObj.c1
-rw-r--r--generic/tclObj.c7
-rw-r--r--generic/tclUtil.c1
6 files changed, 34 insertions, 16 deletions
diff --git a/generic/tcl.h b/generic/tcl.h
index fec2880..c86b24e 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -612,24 +612,26 @@ typedef void (Tcl_FinalizeNotifierProc) (void *clientData);
typedef void (Tcl_MainLoopProc) (void);
/* Abstract List functions */
-typedef Tcl_Size (Tcl_ALLengthProc) (struct Tcl_Obj *listPtr);
-typedef int (Tcl_ALIndexProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
- Tcl_Size index, struct Tcl_Obj** elemObj);
-typedef int (Tcl_ALSliceProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
- Tcl_Size fromIdx, Tcl_Size toIdx,
- struct Tcl_Obj **newObjPtr);
+typedef Tcl_Size (Tcl_ALLengthProc) (struct Tcl_Obj *listPtr);
+typedef int (Tcl_ALIndexProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
+ Tcl_Size index, struct Tcl_Obj** elemObj);
+typedef int (Tcl_ALSliceProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
+ Tcl_Size fromIdx, Tcl_Size toIdx,
+ struct Tcl_Obj **newObjPtr);
typedef int (Tcl_ALReverseProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
struct Tcl_Obj **newObjPtr);
typedef int (Tcl_ALGetElements) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
Tcl_Size *objcptr, struct Tcl_Obj ***objvptr);
-typedef struct Tcl_Obj* (Tcl_ALSetElement) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
- Tcl_Size indexCount,
- struct Tcl_Obj *const indexArray[],
- struct Tcl_Obj *valueObj);
+typedef struct Tcl_Obj* (Tcl_ALSetElement) (Tcl_Interp *interp, struct Tcl_Obj *listPtr,
+ Tcl_Size indexCount,
+ struct Tcl_Obj *const indexArray[],
+ struct Tcl_Obj *valueObj);
typedef int (Tcl_ALReplaceProc) (Tcl_Interp *interp, struct Tcl_Obj *listObj,
- Tcl_Size first, Tcl_Size numToDelete,
- Tcl_Size numToInsert,
- struct Tcl_Obj *const insertObjs[]);
+ Tcl_Size first, Tcl_Size numToDelete,
+ Tcl_Size numToInsert,
+ struct Tcl_Obj *const insertObjs[]);
+typedef int (Tcl_ALGetDblProc) (Tcl_Interp *interp, struct Tcl_Obj *objPtr,
+ double *doublePtr);
#ifndef TCL_NO_DEPRECATED
# define Tcl_PackageInitProc Tcl_LibraryInitProc
@@ -675,6 +677,8 @@ typedef struct Tcl_ObjType {
Tcl_ALSetElement *setElementProc; /* Replace the element at the indicie
** with the given valueObj. */
Tcl_ALReplaceProc *replaceProc; /* Replace subset with subset */
+ Tcl_ALGetDblProc *getDoubleProc; /* GetDouble from internal rep */
+
} Tcl_ObjType;
#define TCL_OBJTYPE_V0 0, /* Pre-Tcl 9 */ \
@@ -684,11 +688,12 @@ typedef struct Tcl_ObjType {
NULL, \
NULL, \
NULL, \
+ NULL, \
NULL
#define TCL_OBJTYPE_CURRENT 1
-#define TCL_OBJTYPE_V1(a,b,c,d,e,f,g) \
+#define TCL_OBJTYPE_V1(a,b,c,d,e,f,g,h) \
TCL_OBJTYPE_CURRENT, \
- a,b,c,d,e,f,g /* Tcl 9 - AbstractLists */
+ a,b,c,d,e,f,g,h /* Tcl 9 - AbstractLists */
/*
* The following structure stores an internal representation (internalrep) for
@@ -763,6 +768,8 @@ typedef struct Tcl_Obj {
(objPtr)->typePtr->setElementProc((interp), (objPtr), (indexCount), (indexArray), (valueObj))
#define Tcl_ObjTypeReplace(interp, objPtr, first, numToDelete, numToInsert, insertObjs) \
(objPtr)->typePtr->replaceProc((interp), (objPtr), (first), (numToDelete), (numToInsert), (insertObjs))
+#define Tcl_ObjTypeGetDouble(interp, objPtr, doublePtr) \
+ (objPtr)->typePtr->getDoubleProc((interp), (objPtr), (doublePtr))
/*
diff --git a/generic/tclArithSeries.c b/generic/tclArithSeries.c
index 8d1841f..e2addf1 100755
--- a/generic/tclArithSeries.c
+++ b/generic/tclArithSeries.c
@@ -83,7 +83,8 @@ static Tcl_ObjType arithSeriesType = {
TclArithSeriesObjReverse,
TclArithSeriesGetElements,
NULL, // SetElement
- NULL) // Replace
+ NULL, // Replace
+ NULL) // GetDouble
};
/*
diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c
index b13bdb5..5ae7224 100644
--- a/generic/tclDictObj.c
+++ b/generic/tclDictObj.c
@@ -159,6 +159,7 @@ const Tcl_ObjType tclDictType = {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 4ae4443..441e06e 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -165,6 +165,7 @@ const Tcl_ObjType tclListType = {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};
diff --git a/generic/tclObj.c b/generic/tclObj.c
index 735dc4f..6bedfea 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -240,6 +240,7 @@ const Tcl_ObjType tclBooleanType= {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};
const Tcl_ObjType tclDoubleType= {
@@ -255,6 +256,7 @@ const Tcl_ObjType tclDoubleType= {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};
const Tcl_ObjType tclIntType = {
@@ -270,6 +272,7 @@ const Tcl_ObjType tclIntType = {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};
const Tcl_ObjType tclBignumType = {
@@ -285,6 +288,7 @@ const Tcl_ObjType tclBignumType = {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};
@@ -2448,6 +2452,9 @@ Tcl_GetDoubleFromObj(
double *dblPtr) /* Place to store resulting double. */
{
do {
+ if (ABSTRACTLIST_PROC(objPtr, getDoubleProc)) {
+ return Tcl_ObjTypeGetDouble(interp, objPtr, dblPtr);
+ }
if (objPtr->typePtr == &tclDoubleType) {
if (isnan(objPtr->internalRep.doubleValue)) {
if (interp != NULL) {
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index eb09e8b..b48537a 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -137,6 +137,7 @@ static const Tcl_ObjType endOffsetType = {
NULL,
NULL,
NULL,
+ NULL,
NULL)
};