File indexing completed on 2026-01-07 10:27:03
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifdef HAVE_UNISTD_H
0014 #include <unistd.h>
0015 #endif
0016 #ifdef HAVE_STDINT_H
0017 #include <stdint.h>
0018 #endif
0019 #include <stddef.h>
0020
0021
0022
0023
0024
0025
0026 #ifndef MODULE_SCOPE
0027 # ifdef __cplusplus
0028 # define MODULE_SCOPE extern "C"
0029 # else
0030 # define MODULE_SCOPE extern
0031 # endif
0032 #endif
0033
0034 #include <string.h>
0035 #include <ctype.h>
0036 #include <tclOO.h>
0037 #include "itcl.h"
0038 #include "itclMigrate2TclCore.h"
0039 #include "itclTclIntStubsFcn.h"
0040
0041
0042
0043
0044
0045
0046 #ifndef STRINGIFY
0047 # define STRINGIFY(x) STRINGIFY1(x)
0048 # define STRINGIFY1(x) #x
0049 #endif
0050
0051
0052
0053
0054
0055
0056 #if defined(_MSC_VER)
0057 # pragma warning(disable:4244)
0058 # if _MSC_VER >= 1400
0059 # pragma warning(disable:4267)
0060 # pragma warning(disable:4996)
0061 # endif
0062 #endif
0063
0064 #ifndef TCL_INDEX_NONE
0065 # define TCL_INDEX_NONE (-1)
0066 #endif
0067
0068 #ifndef JOIN
0069 # define JOIN(a,b) JOIN1(a,b)
0070 # define JOIN1(a,b) a##b
0071 #endif
0072
0073 #ifndef TCL_UNUSED
0074 # if defined(__cplusplus)
0075 # define TCL_UNUSED(T) T
0076 # elif defined(__GNUC__) && (__GNUC__ > 2)
0077 # define TCL_UNUSED(T) T JOIN(dummy, __LINE__) __attribute__((unused))
0078 # else
0079 # define TCL_UNUSED(T) T JOIN(dummy, __LINE__)
0080 # endif
0081 #endif
0082
0083 #if TCL_MAJOR_VERSION == 8 && defined(TCL_MINOR_VERSION) && TCL_MINOR_VERSION < 7
0084 # define TCL_SIZE_MODIFIER ""
0085 #endif
0086
0087
0088
0089
0090
0091
0092
0093 #undef assert
0094 #if defined(NDEBUG) && !defined(DEBUG)
0095 #define assert(EX) ((void)0)
0096 #else
0097 #define assert(EX) (void)((EX) || (Itcl_Assert(STRINGIFY(EX), __FILE__, __LINE__), 0))
0098 #endif
0099
0100 #define ITCL_INTERP_DATA "itcl_data"
0101 #define ITCL_TK_VERSION "8.6"
0102
0103
0104
0105
0106
0107
0108
0109
0110 #define FOREACH_HASH_DECLS \
0111 Tcl_HashEntry *hPtr;Tcl_HashSearch search
0112 #define FOREACH_HASH(key,val,tablePtr) \
0113 for(hPtr=Tcl_FirstHashEntry((tablePtr),&search); hPtr!=NULL ? \
0114 (*(void **)&(key)=Tcl_GetHashKey((tablePtr),hPtr),\
0115 *(void **)&(val)=Tcl_GetHashValue(hPtr),1):0; hPtr=Tcl_NextHashEntry(&search))
0116 #define FOREACH_HASH_VALUE(val,tablePtr) \
0117 for(hPtr=Tcl_FirstHashEntry((tablePtr),&search); hPtr!=NULL ? \
0118 (*(void **)&(val)=Tcl_GetHashValue(hPtr),1):0;hPtr=Tcl_NextHashEntry(&search))
0119
0120
0121
0122
0123
0124 #define ALLOC_CHUNK 8
0125
0126 #define ITCL_INT_NAMESPACE ITCL_NAMESPACE"::internal"
0127 #define ITCL_INTDICTS_NAMESPACE ITCL_INT_NAMESPACE"::dicts"
0128 #define ITCL_VARIABLES_NAMESPACE ITCL_INT_NAMESPACE"::variables"
0129 #define ITCL_COMMANDS_NAMESPACE ITCL_INT_NAMESPACE"::commands"
0130
0131 typedef struct ItclFoundation {
0132 Itcl_Stack methodCallStack;
0133 Tcl_Command dispatchCommand;
0134 } ItclFoundation;
0135
0136 typedef struct ItclArgList {
0137 struct ItclArgList *nextPtr;
0138 Tcl_Obj *namePtr;
0139 Tcl_Obj *defaultValuePtr;
0140 } ItclArgList;
0141
0142
0143
0144
0145
0146
0147
0148 struct ItclClass;
0149 struct ItclObject;
0150 struct ItclMemberFunc;
0151 struct EnsembleInfo;
0152 struct ItclDelegatedOption;
0153 struct ItclDelegatedFunction;
0154
0155 typedef struct ItclObjectInfo {
0156 Tcl_Interp *interp;
0157 Tcl_HashTable objects;
0158
0159 Tcl_HashTable objectCmds;
0160 Tcl_HashTable unused5;
0161 Tcl_HashTable classes;
0162
0163 Tcl_HashTable nameClasses;
0164 Tcl_HashTable namespaceClasses;
0165 Tcl_HashTable procMethods;
0166 Tcl_HashTable instances;
0167 Tcl_HashTable unused8;
0168 Tcl_HashTable frameContext;
0169 Tcl_HashTable classTypes;
0170
0171 int protection;
0172 int useOldResolvers;
0173
0174 Itcl_Stack clsStack;
0175
0176 Itcl_Stack unused;
0177 Itcl_Stack unused6;
0178 struct ItclObject *currIoPtr;
0179
0180
0181 Tcl_ObjectMetadataType *class_meta_type;
0182
0183
0184 const Tcl_ObjectMetadataType *object_meta_type;
0185
0186
0187 Tcl_Object clazzObjectPtr;
0188 Tcl_Class clazzClassPtr;
0189 struct EnsembleInfo *ensembleInfo;
0190 struct ItclClass *currContextIclsPtr;
0191
0192
0193 int currClassFlags;
0194 int buildingWidget;
0195 Tcl_Size unparsedObjc;
0196
0197 Tcl_Obj **unparsedObjv;
0198
0199 int functionFlags;
0200 int unused7;
0201 struct ItclDelegatedOption *currIdoPtr;
0202
0203 int inOptionHandling;
0204
0205
0206
0207
0208 int itclWidgetInitted;
0209
0210
0211 int itclHullCmdsInitted;
0212
0213
0214 Tcl_Obj *unused2;
0215 Tcl_Obj *unused3;
0216 Tcl_Obj *unused4;
0217 Tcl_Obj *infoVarsPtr;
0218 Tcl_Obj *unused9;
0219 Tcl_Obj *infoVars4Ptr;
0220 Tcl_Obj *typeDestructorArgumentPtr;
0221 struct ItclObject *lastIoPtr;
0222 Tcl_Command infoCmd;
0223 } ItclObjectInfo;
0224
0225 typedef struct EnsembleInfo {
0226 Tcl_HashTable ensembles;
0227 Tcl_HashTable subEnsembles;
0228 Tcl_Size numEnsembles;
0229 Tcl_Namespace *ensembleNsPtr;
0230 } EnsembleInfo;
0231
0232
0233
0234 #define ITCL_CLASS 0x1
0235 #define ITCL_TYPE 0x2
0236 #define ITCL_WIDGET 0x4
0237 #define ITCL_WIDGETADAPTOR 0x8
0238 #define ITCL_ECLASS 0x10
0239 #define ITCL_NWIDGET 0x20
0240 #define ITCL_WIDGET_FRAME 0x40
0241 #define ITCL_WIDGET_LABEL_FRAME 0x80
0242 #define ITCL_WIDGET_TOPLEVEL 0x100
0243 #define ITCL_WIDGET_TTK_FRAME 0x200
0244 #define ITCL_WIDGET_TTK_LABEL_FRAME 0x400
0245 #define ITCL_WIDGET_TTK_TOPLEVEL 0x800
0246 #define ITCL_CLASS_IS_DELETED 0x1000
0247 #define ITCL_CLASS_IS_DESTROYED 0x2000
0248 #define ITCL_CLASS_NS_IS_DESTROYED 0x4000
0249 #define ITCL_CLASS_IS_RENAMED 0x8000
0250 #define ITCL_CLASS_IS_FREED 0x10000
0251 #define ITCL_CLASS_DERIVED_RELEASED 0x20000
0252 #define ITCL_CLASS_NS_TEARDOWN 0x40000
0253 #define ITCL_CLASS_NO_VARNS_DELETE 0x80000
0254 #define ITCL_CLASS_SHOULD_VARNS_DELETE 0x100000
0255 #define ITCL_CLASS_DESTRUCTOR_CALLED 0x400000
0256
0257
0258 typedef struct ItclClass {
0259 Tcl_Obj *namePtr;
0260 Tcl_Obj *fullNamePtr;
0261 Tcl_Interp *interp;
0262 Tcl_Namespace *nsPtr;
0263 Tcl_Command accessCmd;
0264 Tcl_Command thisCmd;
0265
0266 struct ItclObjectInfo *infoPtr;
0267
0268
0269 Itcl_List bases;
0270 Itcl_List derived;
0271 Tcl_HashTable heritage;
0272
0273
0274
0275 Tcl_Obj *initCode;
0276 Tcl_HashTable variables;
0277
0278
0279 Tcl_HashTable options;
0280
0281
0282 Tcl_HashTable components;
0283
0284
0285 Tcl_HashTable functions;
0286
0287
0288 Tcl_HashTable delegatedOptions;
0289
0290
0291
0292 Tcl_HashTable delegatedFunctions;
0293
0294
0295
0296 Tcl_HashTable methodVariables;
0297
0298
0299
0300 Tcl_Size numInstanceVars;
0301
0302 Tcl_HashTable classCommons;
0303
0304 Tcl_HashTable resolveVars;
0305
0306 Tcl_HashTable resolveCmds;
0307
0308 Tcl_HashTable contextCache;
0309 struct ItclMemberFunc *unused2;
0310
0311 struct ItclMemberFunc *unused3;
0312
0313 struct ItclMemberFunc *unused1;
0314 Tcl_Resolve *resolvePtr;
0315 Tcl_Obj *widgetClassPtr;
0316
0317 Tcl_Obj *hullTypePtr;
0318
0319 Tcl_Object oPtr;
0320 Tcl_Class clsPtr;
0321 Tcl_Size numCommons;
0322 Tcl_Size numVariables;
0323 Tcl_Size numOptions;
0324 Tcl_Size unique;
0325 int flags;
0326 Tcl_Size callRefCount;
0327 Tcl_Obj *typeConstructorPtr;
0328 int destructorHasBeenCalled;
0329 Tcl_Size refCount;
0330 } ItclClass;
0331
0332 typedef struct ItclHierIter {
0333 ItclClass *current;
0334 Itcl_Stack stack;
0335 } ItclHierIter;
0336
0337 #define ITCL_OBJECT_IS_DELETED 0x01
0338 #define ITCL_OBJECT_IS_DESTRUCTED 0x02
0339 #define ITCL_OBJECT_IS_DESTROYED 0x04
0340 #define ITCL_OBJECT_IS_RENAMED 0x08
0341 #define ITCL_OBJECT_CLASS_DESTRUCTED 0x10
0342 #define ITCL_TCLOO_OBJECT_IS_DELETED 0x20
0343 #define ITCL_OBJECT_DESTRUCT_ERROR 0x40
0344 #define ITCL_OBJECT_SHOULD_VARNS_DELETE 0x80
0345 #define ITCL_OBJECT_ROOT_METHOD 0x8000
0346
0347
0348
0349
0350 typedef struct ItclObject {
0351 ItclClass *iclsPtr;
0352 Tcl_Command accessCmd;
0353
0354 Tcl_HashTable *constructed;
0355 Tcl_HashTable *destructed;
0356 Tcl_HashTable objectVariables;
0357
0358
0359
0360 Tcl_HashTable objectOptions;
0361
0362
0363 Tcl_HashTable objectComponents;
0364
0365
0366 Tcl_HashTable objectMethodVariables;
0367
0368
0369
0370
0371 Tcl_HashTable objectDelegatedOptions;
0372
0373
0374
0375
0376 Tcl_HashTable objectDelegatedFunctions;
0377
0378
0379
0380
0381 Tcl_HashTable contextCache;
0382 Tcl_Obj *namePtr;
0383 Tcl_Obj *origNamePtr;
0384 Tcl_Obj *createNamePtr;
0385
0386
0387
0388 Tcl_Interp *interp;
0389 ItclObjectInfo *infoPtr;
0390 Tcl_Obj *varNsNamePtr;
0391 Tcl_Object oPtr;
0392 Tcl_Resolve *resolvePtr;
0393 int flags;
0394 Tcl_Size callRefCount;
0395 Tcl_Obj *hullWindowNamePtr;
0396
0397 int destructorHasBeenCalled;
0398
0399 int noComponentTrace;
0400
0401 int hadConstructorError;
0402 } ItclObject;
0403
0404 #define ITCL_IGNORE_ERRS 0x002
0405
0406 typedef struct ItclResolveInfo {
0407 int flags;
0408 ItclClass *iclsPtr;
0409 ItclObject *ioPtr;
0410 } ItclResolveInfo;
0411
0412 #define ITCL_RESOLVE_CLASS 0x01
0413 #define ITCL_RESOLVE_OBJECT 0x02
0414
0415
0416
0417
0418 typedef struct ItclMemberCode {
0419 int flags;
0420 Tcl_Size argcount;
0421 Tcl_Size maxargcount;
0422 Tcl_Obj *usagePtr;
0423 Tcl_Obj *argumentPtr;
0424 Tcl_Obj *bodyPtr;
0425 ItclArgList *argListPtr;
0426 union {
0427 Tcl_CmdProc *argCmd;
0428 Tcl_ObjCmdProc *objCmd;
0429 } cfunc;
0430 void *clientData;
0431 } ItclMemberCode;
0432
0433
0434
0435
0436 #define ITCL_IMPLEMENT_NONE 0x001
0437 #define ITCL_IMPLEMENT_TCL 0x002
0438 #define ITCL_IMPLEMENT_ARGCMD 0x004
0439 #define ITCL_IMPLEMENT_OBJCMD 0x008
0440 #define ITCL_IMPLEMENT_C 0x00c
0441
0442 #define Itcl_IsMemberCodeImplemented(mcode) \
0443 (((mcode)->flags & ITCL_IMPLEMENT_NONE) == 0)
0444
0445
0446
0447
0448 #define ITCL_COMMON 0x010
0449
0450
0451
0452
0453
0454 #define ITCL_CONSTRUCTOR 0x020
0455 #define ITCL_DESTRUCTOR 0x040
0456 #define ITCL_ARG_SPEC 0x080
0457 #define ITCL_BODY_SPEC 0x100
0458 #define ITCL_BUILTIN 0x400
0459 #define ITCL_COMPONENT 0x800
0460 #define ITCL_TYPE_METHOD 0x1000
0461 #define ITCL_METHOD 0x2000
0462
0463
0464
0465
0466 #define ITCL_THIS_VAR 0x20
0467 #define ITCL_OPTIONS_VAR 0x40
0468
0469 #define ITCL_TYPE_VAR 0x80
0470
0471 #define ITCL_SELF_VAR 0x100
0472 #define ITCL_SELFNS_VAR 0x200
0473
0474 #define ITCL_WIN_VAR 0x400
0475 #define ITCL_COMPONENT_VAR 0x800
0476 #define ITCL_HULL_VAR 0x1000
0477
0478 #define ITCL_OPTION_READONLY 0x2000
0479 #define ITCL_VARIABLE 0x4000
0480 #define ITCL_TYPE_VARIABLE 0x8000
0481 #define ITCL_OPTION_INITTED 0x10000
0482 #define ITCL_OPTION_COMP_VAR 0x20000
0483
0484
0485
0486
0487 struct ItclVariable;
0488 typedef struct ItclComponent {
0489 Tcl_Obj *namePtr;
0490 struct ItclVariable *ivPtr;
0491 int flags;
0492 int haveKeptOptions;
0493 Tcl_HashTable keptOptions;
0494 } ItclComponent;
0495
0496 #define ITCL_COMPONENT_INHERIT 0x01
0497 #define ITCL_COMPONENT_PUBLIC 0x02
0498
0499 typedef struct ItclDelegatedFunction {
0500 Tcl_Obj *namePtr;
0501 ItclComponent *icPtr;
0502 Tcl_Obj *asPtr;
0503 Tcl_Obj *usingPtr;
0504 Tcl_HashTable exceptions;
0505 int flags;
0506 } ItclDelegatedFunction;
0507
0508
0509
0510
0511 typedef struct ItclMemberFunc {
0512 Tcl_Obj* namePtr;
0513 Tcl_Obj* fullNamePtr;
0514 ItclClass* iclsPtr;
0515 int protection;
0516 int flags;
0517 ItclObjectInfo *infoPtr;
0518 ItclMemberCode *codePtr;
0519 Tcl_Command accessCmd;
0520 Tcl_Size argcount;
0521 Tcl_Size maxargcount;
0522 Tcl_Obj *usagePtr;
0523 Tcl_Obj *argumentPtr;
0524 Tcl_Obj *builtinArgumentPtr;
0525 Tcl_Obj *origArgsPtr;
0526 Tcl_Obj *bodyPtr;
0527 ItclArgList *argListPtr;
0528 ItclClass *declaringClassPtr;
0529 void *tmPtr;
0530 ItclDelegatedFunction *idmPtr;
0531
0532 } ItclMemberFunc;
0533
0534
0535
0536
0537 typedef struct ItclVariable {
0538 Tcl_Obj *namePtr;
0539 Tcl_Obj *fullNamePtr;
0540 ItclClass *iclsPtr;
0541 ItclObjectInfo *infoPtr;
0542 ItclMemberCode *codePtr;
0543 Tcl_Obj *init;
0544 Tcl_Obj *arrayInitPtr;
0545 int protection;
0546 int flags;
0547 int initted;
0548
0549
0550 } ItclVariable;
0551
0552
0553 struct ItclOption;
0554
0555 typedef struct ItclDelegatedOption {
0556 Tcl_Obj *namePtr;
0557 Tcl_Obj *resourceNamePtr;
0558 Tcl_Obj *classNamePtr;
0559 struct ItclOption *ioptPtr;
0560 ItclComponent *icPtr;
0561
0562 Tcl_Obj *asPtr;
0563 Tcl_HashTable exceptions;
0564 } ItclDelegatedOption;
0565
0566
0567
0568
0569 typedef struct ItclOption {
0570
0571
0572 Tcl_Obj *namePtr;
0573 Tcl_Obj *fullNamePtr;
0574 Tcl_Obj *resourceNamePtr;
0575 Tcl_Obj *classNamePtr;
0576 ItclClass *iclsPtr;
0577 int protection;
0578 int flags;
0579 ItclMemberCode *codePtr;
0580 Tcl_Obj *defaultValuePtr;
0581 Tcl_Obj *cgetMethodPtr;
0582 Tcl_Obj *cgetMethodVarPtr;
0583 Tcl_Obj *configureMethodPtr;
0584 Tcl_Obj *configureMethodVarPtr;
0585 Tcl_Obj *validateMethodPtr;
0586 Tcl_Obj *validateMethodVarPtr;
0587 ItclDelegatedOption *idoPtr;
0588
0589 } ItclOption;
0590
0591
0592
0593
0594 typedef struct ItclMethodVariable {
0595 Tcl_Obj *namePtr;
0596 Tcl_Obj *fullNamePtr;
0597 ItclClass *iclsPtr;
0598 int protection;
0599 int flags;
0600 Tcl_Obj *defaultValuePtr;
0601 Tcl_Obj *callbackPtr;
0602 } ItclMethodVariable;
0603
0604 #define VAR_TYPE_VARIABLE 1
0605 #define VAR_TYPE_COMMON 2
0606
0607 #define CMD_TYPE_METHOD 1
0608 #define CMD_TYPE_PROC 2
0609
0610 typedef struct ItclClassCmdInfo {
0611 int type;
0612 int protection;
0613 #if TCL_MAJOR_VERSION == 8
0614 int cmdNum;
0615 #endif
0616 Tcl_Namespace *nsPtr;
0617 Tcl_Namespace *declaringNsPtr;
0618 } ItclClassCmdInfo;
0619
0620
0621
0622
0623 typedef struct ItclVarLookup {
0624 ItclVariable* ivPtr;
0625 int usage;
0626 int accessible;
0627
0628 char *leastQualName;
0629
0630
0631
0632 Tcl_Size varNum;
0633 Tcl_Var varPtr;
0634 } ItclVarLookup;
0635
0636
0637
0638
0639 typedef struct ItclCmdLookup {
0640 ItclMemberFunc* imPtr;
0641 #if TCL_MAJOR_VERSION == 8
0642 int cmdNum;
0643 #endif
0644 ItclClassCmdInfo *classCmdInfoPtr;
0645 Tcl_Command cmdPtr;
0646 } ItclCmdLookup;
0647
0648 typedef struct ItclCallContext {
0649 int objectFlags;
0650 Tcl_Namespace *nsPtr;
0651 ItclObject *ioPtr;
0652 ItclMemberFunc *imPtr;
0653 Tcl_Size refCount;
0654 } ItclCallContext;
0655
0656
0657
0658
0659
0660
0661
0662 #define UCHAR(c) ((unsigned char) (c))
0663
0664
0665
0666
0667
0668
0669 #if !defined(INT2PTR)
0670 # define INT2PTR(p) ((void *)(ptrdiff_t)(p))
0671 #endif
0672 #if !defined(PTR2INT)
0673 # define PTR2INT(p) ((ptrdiff_t)(p))
0674 #endif
0675
0676 #ifdef ITCL_DEBUG
0677 MODULE_SCOPE int _itcl_debug_level;
0678 MODULE_SCOPE void ItclShowArgs(int level, const char *str, size_t objc,
0679 Tcl_Obj *const *objv);
0680 #else
0681 #define ItclShowArgs(a,b,c,d) do {(void)(c);(void)(d);} while(0)
0682 #endif
0683
0684 MODULE_SCOPE Tcl_ObjCmdProc ItclCallCCommand;
0685 MODULE_SCOPE Tcl_ObjCmdProc ItclObjectUnknownCommand;
0686 MODULE_SCOPE int ItclCheckCallProc(void *clientData, Tcl_Interp *interp,
0687 Tcl_ObjectContext contextPtr, Tcl_CallFrame *framePtr, int *isFinished);
0688
0689 MODULE_SCOPE void ItclPreserveClass(ItclClass *iclsPtr);
0690 MODULE_SCOPE void ItclReleaseClass(void *iclsPtr);
0691
0692 MODULE_SCOPE ItclFoundation *ItclGetFoundation(Tcl_Interp *interp);
0693 MODULE_SCOPE Tcl_ObjCmdProc ItclClassCommandDispatcher;
0694 MODULE_SCOPE Tcl_Command Itcl_CmdAliasProc(Tcl_Interp *interp,
0695 Tcl_Namespace *nsPtr, const char *cmdName, void *clientData);
0696 MODULE_SCOPE Tcl_Var Itcl_VarAliasProc(Tcl_Interp *interp,
0697 Tcl_Namespace *nsPtr, const char *VarName, void *clientData);
0698 MODULE_SCOPE int ItclIsClass(Tcl_Interp *interp, Tcl_Command cmd);
0699 MODULE_SCOPE int ItclCheckCallMethod(void *clientData, Tcl_Interp *interp,
0700 Tcl_ObjectContext contextPtr, Tcl_CallFrame *framePtr, int *isFinished);
0701 MODULE_SCOPE int ItclAfterCallMethod(void *clientData, Tcl_Interp *interp,
0702 Tcl_ObjectContext contextPtr, Tcl_Namespace *nsPtr, int result);
0703 MODULE_SCOPE void ItclReportObjectUsage(Tcl_Interp *interp,
0704 ItclObject *contextIoPtr, Tcl_Namespace *callerNsPtr,
0705 Tcl_Namespace *contextNsPtr);
0706 MODULE_SCOPE int ItclMapMethodNameProc(Tcl_Interp *interp, Tcl_Object oPtr,
0707 Tcl_Class *startClsPtr, Tcl_Obj *methodObj);
0708 MODULE_SCOPE int ItclCreateArgList(Tcl_Interp *interp, const char *str,
0709 Tcl_Size *argcPtr, Tcl_Size *maxArgcPtr, Tcl_Obj **usagePtr,
0710 ItclArgList **arglistPtrPtr, ItclMemberFunc *imPtr,
0711 const char *commandName);
0712 MODULE_SCOPE int ItclObjectCmd(void *clientData, Tcl_Interp *interp,
0713 Tcl_Object oPtr, Tcl_Class clsPtr, size_t objc, Tcl_Obj *const *objv);
0714 MODULE_SCOPE int ItclCreateObject (Tcl_Interp *interp, const char* name,
0715 ItclClass *iclsPtr, size_t objc, Tcl_Obj *const objv[]);
0716 MODULE_SCOPE void ItclDeleteObjectVariablesNamespace(Tcl_Interp *interp,
0717 ItclObject *ioPtr);
0718 MODULE_SCOPE void ItclDeleteClassVariablesNamespace(Tcl_Interp *interp,
0719 ItclClass *iclsPtr);
0720 MODULE_SCOPE int ItclInfoInit(Tcl_Interp *interp, ItclObjectInfo *infoPtr);
0721
0722 MODULE_SCOPE Tcl_HashEntry *ItclResolveVarEntry(
0723 ItclClass* iclsPtr, const char *varName);
0724
0725 struct Tcl_ResolvedVarInfo;
0726 MODULE_SCOPE int Itcl_ClassCmdResolver(Tcl_Interp *interp, const char* name,
0727 Tcl_Namespace *nsPtr, int flags, Tcl_Command *rPtr);
0728 MODULE_SCOPE int Itcl_ClassVarResolver(Tcl_Interp *interp, const char* name,
0729 Tcl_Namespace *nsPtr, int flags, Tcl_Var *rPtr);
0730 MODULE_SCOPE int Itcl_ClassCompiledVarResolver(Tcl_Interp *interp,
0731 const char* name, Tcl_Size length, Tcl_Namespace *nsPtr,
0732 struct Tcl_ResolvedVarInfo **rPtr);
0733 MODULE_SCOPE int Itcl_ClassCmdResolver2(Tcl_Interp *interp, const char* name,
0734 Tcl_Namespace *nsPtr, int flags, Tcl_Command *rPtr);
0735 MODULE_SCOPE int Itcl_ClassVarResolver2(Tcl_Interp *interp, const char* name,
0736 Tcl_Namespace *nsPtr, int flags, Tcl_Var *rPtr);
0737 MODULE_SCOPE int ItclSetParserResolver(Tcl_Namespace *nsPtr);
0738 MODULE_SCOPE void ItclProcErrorProc(Tcl_Interp *interp, Tcl_Obj *procNameObj);
0739 MODULE_SCOPE int Itcl_CreateOption (Tcl_Interp *interp, ItclClass *iclsPtr,
0740 ItclOption *ioptPtr);
0741 MODULE_SCOPE int ItclCreateMethodVariable(Tcl_Interp *interp,
0742 ItclVariable *ivPtr, Tcl_Obj* defaultPtr, Tcl_Obj* callbackPtr,
0743 ItclMethodVariable** imvPtrPtr);
0744 MODULE_SCOPE int DelegationInstall(Tcl_Interp *interp, ItclObject *ioPtr,
0745 ItclClass *iclsPtr);
0746 MODULE_SCOPE ItclClass *ItclNamespace2Class(Tcl_Namespace *nsPtr);
0747 MODULE_SCOPE const char* ItclGetCommonInstanceVar(Tcl_Interp *interp,
0748 const char *name, const char *name2, ItclObject *contextIoPtr,
0749 ItclClass *contextIclsPtr);
0750 MODULE_SCOPE int ItclCreateMethod(Tcl_Interp* interp, ItclClass *iclsPtr,
0751 Tcl_Obj *namePtr, const char* arglist, const char* body,
0752 ItclMemberFunc **imPtrPtr);
0753 MODULE_SCOPE int Itcl_WidgetParseInit(Tcl_Interp *interp,
0754 ItclObjectInfo *infoPtr);
0755 MODULE_SCOPE void ItclDeleteObjectMetadata(void *clientData);
0756 MODULE_SCOPE void ItclDeleteClassMetadata(void *clientData);
0757 MODULE_SCOPE void ItclDeleteArgList(ItclArgList *arglistPtr);
0758 MODULE_SCOPE int Itcl_ClassOptionCmd(void *clientData, Tcl_Interp *interp,
0759 int objc, Tcl_Obj *const objv[]);
0760 MODULE_SCOPE int DelegatedOptionsInstall(Tcl_Interp *interp,
0761 ItclClass *iclsPtr);
0762 MODULE_SCOPE int Itcl_HandleDelegateOptionCmd(Tcl_Interp *interp,
0763 ItclObject *ioPtr, ItclClass *iclsPtr, ItclDelegatedOption **idoPtrPtr,
0764 Tcl_Size objc, Tcl_Obj *const objv[]);
0765 MODULE_SCOPE int Itcl_HandleDelegateMethodCmd(Tcl_Interp *interp,
0766 ItclObject *ioPtr, ItclClass *iclsPtr,
0767 ItclDelegatedFunction **idmPtrPtr, Tcl_Size objc, Tcl_Obj *const objv[]);
0768 MODULE_SCOPE int DelegateFunction(Tcl_Interp *interp, ItclObject *ioPtr,
0769 ItclClass *iclsPtr, Tcl_Obj *componentNamePtr,
0770 ItclDelegatedFunction *idmPtr);
0771 MODULE_SCOPE int ItclInitObjectMethodVariables(Tcl_Interp *interp,
0772 ItclObject *ioPtr, ItclClass *iclsPtr, const char *name);
0773 MODULE_SCOPE int InitTclOOFunctionPointers(Tcl_Interp *interp);
0774 MODULE_SCOPE ItclOption* ItclNewOption(Tcl_Interp *interp, ItclObject *ioPtr,
0775 ItclClass *iclsPtr, Tcl_Obj *namePtr, const char *resourceName,
0776 const char *className, char *init, ItclMemberCode *mCodePtr);
0777 MODULE_SCOPE int ItclParseOption(ItclObjectInfo *infoPtr, Tcl_Interp *interp,
0778 size_t objc, Tcl_Obj *const objv[], ItclClass *iclsPtr,
0779 ItclObject *ioPtr, ItclOption **ioptPtrPtr);
0780 MODULE_SCOPE void ItclDestroyClassNamesp(void *cdata);
0781 MODULE_SCOPE int ExpandDelegateAs(Tcl_Interp *interp, ItclObject *ioPtr,
0782 ItclClass *iclsPtr, ItclDelegatedFunction *idmPtr,
0783 const char *funcName, Tcl_Obj *listPtr);
0784 MODULE_SCOPE int ItclCheckForInitializedComponents(Tcl_Interp *interp,
0785 ItclClass *iclsPtr, ItclObject *ioPtr);
0786 MODULE_SCOPE int ItclCreateDelegatedFunction(Tcl_Interp *interp,
0787 ItclClass *iclsPtr, Tcl_Obj *methodNamePtr, ItclComponent *icPtr,
0788 Tcl_Obj *targetPtr, Tcl_Obj *usingPtr, Tcl_Obj *exceptionsPtr,
0789 ItclDelegatedFunction **idmPtrPtr);
0790 MODULE_SCOPE void ItclDeleteDelegatedOption(char *cdata);
0791 MODULE_SCOPE void ItclDeleteDelegatedFunction(ItclDelegatedFunction *idmPtr);
0792 MODULE_SCOPE void ItclFinishEnsemble(ItclObjectInfo *infoPtr);
0793 MODULE_SCOPE int Itcl_EnsembleDeleteCmd(void *clientData,
0794 Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
0795 MODULE_SCOPE int ItclAddClassesDictInfo(Tcl_Interp *interp, ItclClass *iclsPtr);
0796 MODULE_SCOPE int ItclDeleteClassesDictInfo(Tcl_Interp *interp,
0797 ItclClass *iclsPtr);
0798 MODULE_SCOPE int ItclAddObjectsDictInfo(Tcl_Interp *interp, ItclObject *ioPtr);
0799 MODULE_SCOPE int ItclDeleteObjectsDictInfo(Tcl_Interp *interp,
0800 ItclObject *ioPtr);
0801 MODULE_SCOPE int ItclAddOptionDictInfo(Tcl_Interp *interp, ItclClass *iclsPtr,
0802 ItclOption *ioptPtr);
0803 MODULE_SCOPE int ItclAddDelegatedOptionDictInfo(Tcl_Interp *interp,
0804 ItclClass *iclsPtr, ItclDelegatedOption *idoPtr);
0805 MODULE_SCOPE int ItclAddClassComponentDictInfo(Tcl_Interp *interp,
0806 ItclClass *iclsPtr, ItclComponent *icPtr);
0807 MODULE_SCOPE int ItclAddClassVariableDictInfo(Tcl_Interp *interp,
0808 ItclClass *iclsPtr, ItclVariable *ivPtr);
0809 MODULE_SCOPE int ItclAddClassFunctionDictInfo(Tcl_Interp *interp,
0810 ItclClass *iclsPtr, ItclMemberFunc *imPtr);
0811 MODULE_SCOPE int ItclAddClassDelegatedFunctionDictInfo(Tcl_Interp *interp,
0812 ItclClass *iclsPtr, ItclDelegatedFunction *idmPtr);
0813 MODULE_SCOPE int ItclClassCreateObject(void *clientData, Tcl_Interp *interp,
0814 Tcl_Size objc, Tcl_Obj *const objv[]);
0815
0816 MODULE_SCOPE void ItclRestoreInfoVars(void *clientData);
0817
0818 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiMyProcCmd;
0819 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiInstallComponentCmd;
0820 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiCallInstanceCmd;
0821 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiGetInstanceVarCmd;
0822 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiMyTypeMethodCmd;
0823 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiMyMethodCmd;
0824 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiMyTypeVarCmd;
0825 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiMyVarCmd;
0826 MODULE_SCOPE Tcl_ObjCmdProc Itcl_BiItclHullCmd;
0827 MODULE_SCOPE Tcl_ObjCmdProc Itcl_ThisCmd;
0828 MODULE_SCOPE Tcl_ObjCmdProc Itcl_ExtendedClassCmd;
0829 MODULE_SCOPE Tcl_ObjCmdProc Itcl_TypeClassCmd;
0830 MODULE_SCOPE Tcl_ObjCmdProc Itcl_AddObjectOptionCmd;
0831 MODULE_SCOPE Tcl_ObjCmdProc Itcl_AddDelegatedOptionCmd;
0832 MODULE_SCOPE Tcl_ObjCmdProc Itcl_AddDelegatedFunctionCmd;
0833 MODULE_SCOPE Tcl_ObjCmdProc Itcl_SetComponentCmd;
0834 MODULE_SCOPE Tcl_ObjCmdProc Itcl_ClassHullTypeCmd;
0835 MODULE_SCOPE Tcl_ObjCmdProc Itcl_ClassWidgetClassCmd;
0836
0837 typedef int (ItclRootMethodProc)(ItclObject *ioPtr, Tcl_Interp *interp,
0838 int objc, Tcl_Obj *const objv[]);
0839
0840 MODULE_SCOPE const Tcl_MethodType itclRootMethodType;
0841 MODULE_SCOPE ItclRootMethodProc ItclUnknownGuts;
0842 MODULE_SCOPE ItclRootMethodProc ItclConstructGuts;
0843 MODULE_SCOPE ItclRootMethodProc ItclInfoGuts;
0844
0845 #include "itcl2TclOO.h"
0846
0847
0848
0849
0850
0851 #include "itclIntDecls.h"