File indexing completed on 2024-05-18 08:30:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef _TCLINT
0020 #define _TCLINT
0021
0022
0023
0024
0025
0026 #undef ACCEPT_NAN
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #include "tclPort.h"
0037
0038 #include <stdio.h>
0039
0040 #include <ctype.h>
0041 #ifdef NO_STDLIB_H
0042 # include "../compat/stdlib.h"
0043 #else
0044 # include <stdlib.h>
0045 #endif
0046 #ifdef NO_STRING_H
0047 #include "../compat/string.h"
0048 #else
0049 #include <string.h>
0050 #endif
0051 #if defined(STDC_HEADERS) || defined(__STDC__) || defined(__C99__FUNC__) \
0052 || defined(__cplusplus) || defined(_MSC_VER) || defined(__ICC)
0053 #include <stddef.h>
0054 #else
0055 typedef int ptrdiff_t;
0056 #endif
0057
0058
0059
0060
0061
0062
0063
0064 #ifdef HAVE_SYS_TYPES_H
0065 # include <sys/types.h>
0066 #endif
0067 #ifdef HAVE_SYS_PARAM_H
0068 # include <sys/param.h>
0069 #endif
0070 #ifdef BYTE_ORDER
0071 # ifdef BIG_ENDIAN
0072 # if BYTE_ORDER == BIG_ENDIAN
0073 # undef WORDS_BIGENDIAN
0074 # define WORDS_BIGENDIAN 1
0075 # endif
0076 # endif
0077 # ifdef LITTLE_ENDIAN
0078 # if BYTE_ORDER == LITTLE_ENDIAN
0079 # undef WORDS_BIGENDIAN
0080 # endif
0081 # endif
0082 #endif
0083
0084
0085
0086
0087
0088
0089 #ifndef MODULE_SCOPE
0090 # ifdef __cplusplus
0091 # define MODULE_SCOPE extern "C"
0092 # else
0093 # define MODULE_SCOPE extern
0094 # endif
0095 #endif
0096
0097
0098
0099
0100
0101
0102
0103 #if !defined(INT2PTR) && !defined(PTR2INT)
0104 # if defined(HAVE_INTPTR_T) || defined(intptr_t)
0105 # define INT2PTR(p) ((void *)(intptr_t)(p))
0106 # define PTR2INT(p) ((int)(intptr_t)(p))
0107 # else
0108 # define INT2PTR(p) ((void *)(p))
0109 # define PTR2INT(p) ((int)(p))
0110 # endif
0111 #endif
0112 #if !defined(UINT2PTR) && !defined(PTR2UINT)
0113 # if defined(HAVE_UINTPTR_T) || defined(uintptr_t)
0114 # define UINT2PTR(p) ((void *)(uintptr_t)(p))
0115 # define PTR2UINT(p) ((unsigned int)(uintptr_t)(p))
0116 # else
0117 # define UINT2PTR(p) ((void *)(p))
0118 # define PTR2UINT(p) ((unsigned int)(p))
0119 # endif
0120 #endif
0121
0122 #if defined(_WIN32) && defined(_MSC_VER)
0123 # define vsnprintf _vsnprintf
0124 #endif
0125
0126
0127
0128
0129
0130
0131 struct Tcl_ResolvedVarInfo;
0132
0133 typedef Tcl_Var (Tcl_ResolveRuntimeVarProc)(Tcl_Interp *interp,
0134 struct Tcl_ResolvedVarInfo *vinfoPtr);
0135
0136 typedef void (Tcl_ResolveVarDeleteProc)(struct Tcl_ResolvedVarInfo *vinfoPtr);
0137
0138
0139
0140
0141
0142
0143
0144 typedef struct Tcl_ResolvedVarInfo {
0145 Tcl_ResolveRuntimeVarProc *fetchProc;
0146 Tcl_ResolveVarDeleteProc *deleteProc;
0147 } Tcl_ResolvedVarInfo;
0148
0149 typedef int (Tcl_ResolveCompiledVarProc)(Tcl_Interp *interp,
0150 CONST84 char *name, int length, Tcl_Namespace *context,
0151 Tcl_ResolvedVarInfo **rPtr);
0152
0153 typedef int (Tcl_ResolveVarProc)(Tcl_Interp *interp, CONST84 char *name,
0154 Tcl_Namespace *context, int flags, Tcl_Var *rPtr);
0155
0156 typedef int (Tcl_ResolveCmdProc)(Tcl_Interp *interp, CONST84 char *name,
0157 Tcl_Namespace *context, int flags, Tcl_Command *rPtr);
0158
0159 typedef struct Tcl_ResolverInfo {
0160 Tcl_ResolveCmdProc *cmdResProc;
0161
0162
0163 Tcl_ResolveVarProc *varResProc;
0164
0165
0166
0167 Tcl_ResolveCompiledVarProc *compiledVarResProc;
0168
0169
0170 } Tcl_ResolverInfo;
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185 #define TCL_AVOID_RESOLVERS 0x40000
0186
0187
0188
0189
0190
0191
0192
0193 typedef struct Tcl_Ensemble Tcl_Ensemble;
0194 typedef struct NamespacePathEntry NamespacePathEntry;
0195
0196
0197
0198
0199
0200
0201
0202
0203 typedef struct TclVarHashTable {
0204 Tcl_HashTable table;
0205 struct Namespace *nsPtr;
0206 } TclVarHashTable;
0207
0208
0209
0210
0211
0212 #define TclVarHashFindVar(tablePtr, key) \
0213 TclVarHashCreateVar((tablePtr), (key), NULL)
0214
0215
0216
0217
0218
0219
0220
0221
0222 #undef BREAK_NAMESPACE_COMPAT
0223
0224
0225
0226
0227
0228
0229
0230
0231 typedef struct Namespace {
0232 char *name;
0233
0234
0235
0236 char *fullName;
0237
0238 ClientData clientData;
0239
0240 Tcl_NamespaceDeleteProc *deleteProc;
0241
0242
0243 struct Namespace *parentPtr;
0244
0245
0246 #ifndef BREAK_NAMESPACE_COMPAT
0247 Tcl_HashTable childTable;
0248
0249 #else
0250 Tcl_HashTable *childTablePtr;
0251
0252
0253
0254 #endif
0255 long nsId;
0256 Tcl_Interp *interp;
0257
0258 int flags;
0259
0260 int activationCount;
0261
0262
0263
0264 int refCount;
0265
0266
0267 Tcl_HashTable cmdTable;
0268
0269
0270
0271
0272
0273
0274
0275 TclVarHashTable varTable;
0276
0277
0278 char **exportArrayPtr;
0279
0280
0281
0282
0283
0284
0285 int numExportPatterns;
0286
0287 int maxExportPatterns;
0288
0289 int cmdRefEpoch;
0290
0291
0292
0293
0294 int resolverEpoch;
0295
0296
0297
0298
0299
0300
0301 Tcl_ResolveCmdProc *cmdResProc;
0302
0303
0304
0305
0306
0307 Tcl_ResolveVarProc *varResProc;
0308
0309
0310
0311
0312
0313
0314 Tcl_ResolveCompiledVarProc *compiledVarResProc;
0315
0316
0317
0318
0319
0320
0321 int exportLookupEpoch;
0322
0323
0324
0325
0326 Tcl_Ensemble *ensembles;
0327
0328
0329 Tcl_Obj *unknownHandlerPtr;
0330
0331
0332 int commandPathLength;
0333 NamespacePathEntry *commandPathArray;
0334
0335
0336 NamespacePathEntry *commandPathSourceList;
0337
0338
0339 Tcl_NamespaceDeleteProc *earlyDeleteProc;
0340
0341
0342
0343
0344
0345 } Namespace;
0346
0347
0348
0349
0350
0351 struct NamespacePathEntry {
0352 Namespace *nsPtr;
0353
0354
0355 Namespace *creatorNsPtr;
0356
0357
0358
0359
0360 NamespacePathEntry *prevPtr, *nextPtr;
0361
0362
0363
0364 };
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390 #define NS_DYING 0x01
0391 #define NS_DEAD 0x02
0392 #define NS_KILLED 0x04
0393 #define NS_SUPPRESS_COMPILATION 0x08
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404 #define TCL_CREATE_NS_IF_UNKNOWN 0x800
0405 #define TCL_FIND_ONLY_NS 0x1000
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415 typedef struct EnsembleConfig {
0416 Namespace *nsPtr;
0417 Tcl_Command token;
0418
0419
0420
0421
0422 int epoch;
0423
0424 char **subcommandArrayPtr;
0425
0426
0427
0428 Tcl_HashTable subcommandTable;
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441 struct EnsembleConfig *next;
0442
0443
0444
0445
0446
0447
0448 int flags;
0449
0450
0451
0452
0453 Tcl_Obj *subcommandDict;
0454
0455
0456
0457
0458 Tcl_Obj *subcmdList;
0459
0460
0461
0462
0463
0464
0465 Tcl_Obj *unknownHandler;
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478 Tcl_Obj *parameterList;
0479 int numParameters;
0480
0481
0482
0483 } EnsembleConfig;
0484
0485
0486
0487
0488
0489 #define ENSEMBLE_DEAD 0x1
0490
0491 #define ENSEMBLE_COMPILE 0x4
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506 typedef struct VarTrace {
0507 Tcl_VarTraceProc *traceProc;
0508
0509 ClientData clientData;
0510 int flags;
0511
0512
0513
0514 struct VarTrace *nextPtr;
0515
0516 } VarTrace;
0517
0518
0519
0520
0521
0522
0523
0524 typedef struct CommandTrace {
0525 Tcl_CommandTraceProc *traceProc;
0526
0527
0528 ClientData clientData;
0529 int flags;
0530
0531
0532 struct CommandTrace *nextPtr;
0533
0534
0535 int refCount;
0536
0537
0538
0539 } CommandTrace;
0540
0541
0542
0543
0544
0545
0546
0547
0548 typedef struct ActiveCommandTrace {
0549 struct Command *cmdPtr;
0550 struct ActiveCommandTrace *nextPtr;
0551
0552
0553 CommandTrace *nextTracePtr;
0554
0555
0556
0557 int reverseScan;
0558
0559 } ActiveCommandTrace;
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569 typedef struct ActiveVarTrace {
0570 struct Var *varPtr;
0571 struct ActiveVarTrace *nextPtr;
0572
0573
0574 VarTrace *nextTracePtr;
0575
0576
0577
0578 } ActiveVarTrace;
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589 typedef struct Var {
0590 int flags;
0591
0592 union {
0593 Tcl_Obj *objPtr;
0594
0595 TclVarHashTable *tablePtr;
0596
0597
0598
0599 struct Var *linkPtr;
0600
0601
0602
0603 } value;
0604 } Var;
0605
0606 typedef struct VarInHash {
0607 Var var;
0608 int refCount;
0609
0610
0611
0612
0613
0614
0615
0616 Tcl_HashEntry entry;
0617
0618
0619
0620
0621 } VarInHash;
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701 #define VAR_ARRAY 0x1
0702 #define VAR_LINK 0x2
0703
0704
0705 #define VAR_IN_HASHTABLE 0x4
0706 #define VAR_DEAD_HASH 0x8
0707 #define VAR_ARRAY_ELEMENT 0x1000
0708 #define VAR_NAMESPACE_VAR 0x80
0709
0710 #define VAR_ALL_HASH \
0711 (VAR_IN_HASHTABLE|VAR_DEAD_HASH|VAR_NAMESPACE_VAR|VAR_ARRAY_ELEMENT)
0712
0713
0714
0715 #define VAR_TRACED_READ 0x10
0716 #define VAR_TRACED_WRITE 0x20
0717 #define VAR_TRACED_UNSET 0x40
0718 #define VAR_TRACED_ARRAY 0x800
0719 #define VAR_TRACE_ACTIVE 0x2000
0720 #define VAR_SEARCH_ACTIVE 0x4000
0721 #define VAR_ALL_TRACES \
0722 (VAR_TRACED_READ|VAR_TRACED_WRITE|VAR_TRACED_ARRAY|VAR_TRACED_UNSET)
0723
0724
0725 #define VAR_ARGUMENT 0x100
0726 #define VAR_TEMPORARY 0x200
0727 #define VAR_IS_ARGS 0x400
0728 #define VAR_RESOLVED 0x8000
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742 #define TclSetVarScalar(varPtr) \
0743 (varPtr)->flags &= ~(VAR_ARRAY|VAR_LINK)
0744
0745 #define TclSetVarArray(varPtr) \
0746 (varPtr)->flags = ((varPtr)->flags & ~VAR_LINK) | VAR_ARRAY
0747
0748 #define TclSetVarLink(varPtr) \
0749 (varPtr)->flags = ((varPtr)->flags & ~VAR_ARRAY) | VAR_LINK
0750
0751 #define TclSetVarArrayElement(varPtr) \
0752 (varPtr)->flags = ((varPtr)->flags & ~VAR_ARRAY) | VAR_ARRAY_ELEMENT
0753
0754 #define TclSetVarUndefined(varPtr) \
0755 (varPtr)->flags &= ~(VAR_ARRAY|VAR_LINK);\
0756 (varPtr)->value.objPtr = NULL
0757
0758 #define TclClearVarUndefined(varPtr)
0759
0760 #define TclSetVarTraceActive(varPtr) \
0761 (varPtr)->flags |= VAR_TRACE_ACTIVE
0762
0763 #define TclClearVarTraceActive(varPtr) \
0764 (varPtr)->flags &= ~VAR_TRACE_ACTIVE
0765
0766 #define TclSetVarNamespaceVar(varPtr) \
0767 if (!TclIsVarNamespaceVar(varPtr)) {\
0768 (varPtr)->flags |= VAR_NAMESPACE_VAR;\
0769 if (TclIsVarInHash(varPtr)) {\
0770 ((VarInHash *)(varPtr))->refCount++;\
0771 }\
0772 }
0773
0774 #define TclClearVarNamespaceVar(varPtr) \
0775 if (TclIsVarNamespaceVar(varPtr)) {\
0776 (varPtr)->flags &= ~VAR_NAMESPACE_VAR;\
0777 if (TclIsVarInHash(varPtr)) {\
0778 ((VarInHash *)(varPtr))->refCount--;\
0779 }\
0780 }
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796 #define TclIsVarScalar(varPtr) \
0797 !((varPtr)->flags & (VAR_ARRAY|VAR_LINK))
0798
0799 #define TclIsVarLink(varPtr) \
0800 ((varPtr)->flags & VAR_LINK)
0801
0802 #define TclIsVarArray(varPtr) \
0803 ((varPtr)->flags & VAR_ARRAY)
0804
0805 #define TclIsVarUndefined(varPtr) \
0806 ((varPtr)->value.objPtr == NULL)
0807
0808 #define TclIsVarArrayElement(varPtr) \
0809 ((varPtr)->flags & VAR_ARRAY_ELEMENT)
0810
0811 #define TclIsVarNamespaceVar(varPtr) \
0812 ((varPtr)->flags & VAR_NAMESPACE_VAR)
0813
0814 #define TclIsVarTemporary(varPtr) \
0815 ((varPtr)->flags & VAR_TEMPORARY)
0816
0817 #define TclIsVarArgument(varPtr) \
0818 ((varPtr)->flags & VAR_ARGUMENT)
0819
0820 #define TclIsVarResolved(varPtr) \
0821 ((varPtr)->flags & VAR_RESOLVED)
0822
0823 #define TclIsVarTraceActive(varPtr) \
0824 ((varPtr)->flags & VAR_TRACE_ACTIVE)
0825
0826 #define TclIsVarTraced(varPtr) \
0827 ((varPtr)->flags & VAR_ALL_TRACES)
0828
0829 #define TclIsVarInHash(varPtr) \
0830 ((varPtr)->flags & VAR_IN_HASHTABLE)
0831
0832 #define TclIsVarDeadHash(varPtr) \
0833 ((varPtr)->flags & VAR_DEAD_HASH)
0834
0835 #define TclGetVarNsPtr(varPtr) \
0836 (TclIsVarInHash(varPtr) \
0837 ? ((TclVarHashTable *) ((((VarInHash *) (varPtr))->entry.tablePtr)))->nsPtr \
0838 : NULL)
0839
0840 #define VarHashRefCount(varPtr) \
0841 ((VarInHash *) (varPtr))->refCount
0842
0843
0844
0845
0846
0847 #define TclIsVarDirectReadable(varPtr) \
0848 ( !((varPtr)->flags & (VAR_ARRAY|VAR_LINK|VAR_TRACED_READ)) \
0849 && (varPtr)->value.objPtr)
0850
0851 #define TclIsVarDirectWritable(varPtr) \
0852 !((varPtr)->flags & (VAR_ARRAY|VAR_LINK|VAR_TRACED_WRITE|VAR_DEAD_HASH))
0853
0854 #define TclIsVarDirectUnsettable(varPtr) \
0855 !((varPtr)->flags & (VAR_ARRAY|VAR_LINK|VAR_TRACED_READ|VAR_TRACED_WRITE|VAR_TRACED_UNSET|VAR_DEAD_HASH))
0856
0857 #define TclIsVarDirectModifyable(varPtr) \
0858 ( !((varPtr)->flags & (VAR_ARRAY|VAR_LINK|VAR_TRACED_READ|VAR_TRACED_WRITE)) \
0859 && (varPtr)->value.objPtr)
0860
0861 #define TclIsVarDirectReadable2(varPtr, arrayPtr) \
0862 (TclIsVarDirectReadable(varPtr) &&\
0863 (!(arrayPtr) || !((arrayPtr)->flags & VAR_TRACED_READ)))
0864
0865 #define TclIsVarDirectWritable2(varPtr, arrayPtr) \
0866 (TclIsVarDirectWritable(varPtr) &&\
0867 (!(arrayPtr) || !((arrayPtr)->flags & VAR_TRACED_WRITE)))
0868
0869 #define TclIsVarDirectModifyable2(varPtr, arrayPtr) \
0870 (TclIsVarDirectModifyable(varPtr) &&\
0871 (!(arrayPtr) || !((arrayPtr)->flags & (VAR_TRACED_READ|VAR_TRACED_WRITE))))
0872
0873
0874
0875
0876
0877
0878
0879
0880 #if defined(__GNUC__) && (__GNUC__ > 2)
0881 # define TCLFLEXARRAY 0
0882 #else
0883 # define TCLFLEXARRAY 1
0884 #endif
0885
0886
0887
0888
0889
0890
0891 struct Command;
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906 typedef struct CompiledLocal {
0907 struct CompiledLocal *nextPtr;
0908
0909
0910
0911 int nameLength;
0912
0913 int frameIndex;
0914
0915 int flags;
0916
0917
0918
0919 Tcl_Obj *defValuePtr;
0920
0921
0922 Tcl_ResolvedVarInfo *resolveInfo;
0923
0924
0925
0926
0927
0928
0929 char name[TCLFLEXARRAY];
0930
0931
0932
0933
0934 } CompiledLocal;
0935
0936
0937
0938
0939
0940
0941
0942 typedef struct Proc {
0943 struct Interp *iPtr;
0944
0945 int refCount;
0946
0947
0948
0949
0950 struct Command *cmdPtr;
0951
0952
0953
0954 Tcl_Obj *bodyPtr;
0955
0956 int numArgs;
0957 int numCompiledLocals;
0958
0959
0960 CompiledLocal *firstLocalPtr;
0961
0962
0963
0964
0965
0966 CompiledLocal *lastLocalPtr;
0967
0968
0969 } Proc;
0970
0971
0972
0973
0974
0975
0976 typedef void (ProcErrorProc)(Tcl_Interp *interp, Tcl_Obj *procNameObj);
0977
0978
0979
0980
0981
0982
0983 typedef struct Trace {
0984 int level;
0985
0986 Tcl_CmdObjTraceProc *proc;
0987 ClientData clientData;
0988 struct Trace *nextPtr;
0989 int flags;
0990
0991 Tcl_CmdObjTraceDeleteProc *delProc;
0992
0993 } Trace;
0994
0995
0996
0997
0998
0999
1000
1001
1002
1003 typedef struct ActiveInterpTrace {
1004 struct ActiveInterpTrace *nextPtr;
1005
1006
1007 Trace *nextTracePtr;
1008
1009
1010
1011 int reverseScan;
1012
1013 } ActiveInterpTrace;
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027 #define TCL_TRACE_ENTER_EXEC 1
1028 #define TCL_TRACE_LEAVE_EXEC 2
1029
1030
1031
1032
1033
1034
1035
1036
1037 typedef struct AssocData {
1038 Tcl_InterpDeleteProc *proc;
1039 ClientData clientData;
1040 } AssocData;
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061 typedef struct LocalCache {
1062 int refCount;
1063 int numVars;
1064 Tcl_Obj *varName0;
1065 } LocalCache;
1066
1067 #define localName(framePtr, i) \
1068 ((&((framePtr)->localCachePtr->varName0))[(i)])
1069
1070 MODULE_SCOPE void TclFreeLocalCache(Tcl_Interp *interp,
1071 LocalCache *localCachePtr);
1072
1073 typedef struct CallFrame {
1074 Namespace *nsPtr;
1075
1076 int isProcCallFrame;
1077
1078
1079
1080
1081
1082
1083 int objc;
1084
1085 Tcl_Obj *const *objv;
1086 struct CallFrame *callerPtr;
1087
1088
1089
1090 struct CallFrame *callerVarPtr;
1091
1092
1093
1094
1095
1096
1097 int level;
1098
1099
1100
1101 Proc *procPtr;
1102
1103
1104
1105
1106 TclVarHashTable *varTablePtr;
1107
1108
1109
1110
1111 int numCompiledLocals;
1112
1113 Var *compiledLocals;
1114
1115
1116
1117 ClientData clientData;
1118
1119
1120
1121
1122
1123
1124
1125
1126 LocalCache *localCachePtr;
1127 Tcl_Obj *tailcallPtr;
1128
1129 } CallFrame;
1130
1131 #define FRAME_IS_PROC 0x1
1132 #define FRAME_IS_LAMBDA 0x2
1133 #define FRAME_IS_METHOD 0x4
1134
1135
1136 #define FRAME_IS_OO_DEFINE 0x8
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160 typedef struct CmdFrame {
1161
1162
1163
1164
1165 int type;
1166 int level;
1167
1168 int *line;
1169 int nline;
1170 CallFrame *framePtr;
1171
1172 struct CmdFrame *nextPtr;
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201 union {
1202 struct {
1203 Tcl_Obj *path;
1204
1205 } eval;
1206 struct {
1207 const void *codePtr;
1208 const char *pc;
1209 } tebc;
1210 } data;
1211 Tcl_Obj *cmdObj;
1212 const char *cmd;
1213 int len;
1214 const struct CFWordBC *litarg;
1215
1216
1217
1218
1219 } CmdFrame;
1220
1221 typedef struct CFWord {
1222 CmdFrame *framePtr;
1223 int word;
1224 int refCount;
1225
1226 } CFWord;
1227
1228 typedef struct CFWordBC {
1229 CmdFrame *framePtr;
1230 int pc;
1231
1232 int word;
1233
1234 struct CFWordBC *prevPtr;
1235 struct CFWordBC *nextPtr;
1236
1237 Tcl_Obj *obj;
1238 } CFWordBC;
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258 #define CLL_END (-1)
1259
1260 typedef struct ContLineLoc {
1261 int num;
1262
1263 int loc[TCLFLEXARRAY];
1264
1265
1266
1267
1268
1269 } ContLineLoc;
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287 #define TCL_LOCATION_EVAL (0)
1288 #define TCL_LOCATION_BC (2)
1289 #define TCL_LOCATION_PREBC (3)
1290
1291 #define TCL_LOCATION_SOURCE (4)
1292 #define TCL_LOCATION_PROC (5)
1293 #define TCL_LOCATION_LAST (6)
1294
1295
1296
1297
1298
1299
1300
1301 typedef Tcl_Obj * (GetFrameInfoValueProc)(ClientData clientData);
1302 typedef struct {
1303 const char *name;
1304 GetFrameInfoValueProc *proc;
1305
1306
1307 ClientData clientData;
1308
1309 } ExtraFrameInfoField;
1310 typedef struct {
1311 int length;
1312 ExtraFrameInfoField fields[2];
1313
1314
1315 } ExtraFrameInfo;
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325 typedef void **TclHandle;
1326
1327
1328
1329
1330
1331
1332
1333
1334 #define TCL_REG_BOSONLY 002000
1335
1336
1337
1338
1339
1340
1341
1342
1343 MODULE_SCOPE void * TclThreadDataKeyGet(Tcl_ThreadDataKey *keyPtr);
1344 MODULE_SCOPE void TclThreadDataKeySet(Tcl_ThreadDataKey *keyPtr,
1345 void *data);
1346
1347
1348
1349
1350
1351 #define TCL_TSD_INIT(keyPtr) \
1352 (ThreadSpecificData *)Tcl_GetThreadData((keyPtr), sizeof(ThreadSpecificData))
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367 struct CompileEnv;
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389 #define TCL_OUT_LINE_COMPILE TCL_ERROR
1390
1391 typedef int (CompileProc)(Tcl_Interp *interp, Tcl_Parse *parsePtr,
1392 struct Command *cmdPtr, struct CompileEnv *compEnvPtr);
1393
1394
1395
1396
1397
1398
1399 typedef int (CompileHookProc)(Tcl_Interp *interp,
1400 struct CompileEnv *compEnvPtr, ClientData clientData);
1401
1402
1403
1404
1405
1406 typedef struct ExecStack {
1407 struct ExecStack *prevPtr;
1408 struct ExecStack *nextPtr;
1409 Tcl_Obj **markerPtr;
1410 Tcl_Obj **endPtr;
1411 Tcl_Obj **tosPtr;
1412 Tcl_Obj *stackWords[TCLFLEXARRAY];
1413 } ExecStack;
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423 typedef struct CorContext {
1424 struct CallFrame *framePtr;
1425 struct CallFrame *varFramePtr;
1426 struct CmdFrame *cmdFramePtr;
1427 Tcl_HashTable *lineLABCPtr;
1428 } CorContext;
1429
1430 typedef struct CoroutineData {
1431 struct Command *cmdPtr;
1432 struct ExecEnv *eePtr;
1433
1434 struct ExecEnv *callerEEPtr;
1435
1436
1437
1438 CorContext caller;
1439 CorContext running;
1440 Tcl_HashTable *lineLABCPtr;
1441 void *stackLevel;
1442 int auxNumLevels;
1443
1444
1445
1446 int nargs;
1447
1448
1449 } CoroutineData;
1450
1451 typedef struct ExecEnv {
1452 ExecStack *execStackPtr;
1453
1454 Tcl_Obj *constants[2];
1455 struct Tcl_Interp *interp;
1456 struct NRE_callback *callbackPtr;
1457
1458 struct CoroutineData *corPtr;
1459 int rewind;
1460 } ExecEnv;
1461
1462 #define COR_IS_SUSPENDED(corPtr) \
1463 ((corPtr)->stackLevel == NULL)
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481 typedef struct LiteralEntry {
1482 struct LiteralEntry *nextPtr;
1483
1484
1485 Tcl_Obj *objPtr;
1486
1487 int refCount;
1488
1489
1490
1491
1492 Namespace *nsPtr;
1493
1494
1495
1496 } LiteralEntry;
1497
1498 typedef struct LiteralTable {
1499 LiteralEntry **buckets;
1500
1501
1502 LiteralEntry *staticBuckets[TCL_SMALL_HASH_TABLE];
1503
1504
1505 int numBuckets;
1506
1507 int numEntries;
1508
1509 int rebuildSize;
1510
1511 int mask;
1512 } LiteralTable;
1513
1514
1515
1516
1517
1518
1519
1520 #ifdef TCL_COMPILE_STATS
1521 typedef struct ByteCodeStats {
1522 long numExecutions;
1523 long numCompilations;
1524 long numByteCodesFreed;
1525 long instructionCount[256];
1526
1527
1528 double totalSrcBytes;
1529 double totalByteCodeBytes;
1530 double currentSrcBytes;
1531 double currentByteCodeBytes;
1532
1533 long srcCount[32];
1534
1535 long byteCodeCount[32];
1536 long lifetimeCount[32];
1537
1538 double currentInstBytes;
1539 double currentLitBytes;
1540 double currentExceptBytes;
1541 double currentAuxBytes;
1542 double currentCmdMapBytes;
1543
1544 long numLiteralsCreated;
1545 double totalLitStringBytes;
1546 double currentLitStringBytes;
1547
1548 long literalCount[32];
1549 } ByteCodeStats;
1550 #endif
1551
1552
1553
1554
1555
1556
1557
1558 typedef struct {
1559 const char *name;
1560 Tcl_ObjCmdProc *proc;
1561 CompileProc *compileProc;
1562 Tcl_ObjCmdProc *nreProc;
1563 ClientData clientData;
1564 int unsafe;
1565
1566 } EnsembleImplMap;
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583 typedef struct ImportRef {
1584 struct Command *importedCmdPtr;
1585
1586
1587
1588
1589 struct ImportRef *nextPtr;
1590
1591
1592
1593
1594 } ImportRef;
1595
1596
1597
1598
1599
1600
1601
1602 typedef struct ImportedCmdData {
1603 struct Command *realCmdPtr;
1604
1605 struct Command *selfPtr;
1606
1607
1608
1609 } ImportedCmdData;
1610
1611
1612
1613
1614
1615
1616 typedef struct Command {
1617 Tcl_HashEntry *hPtr;
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627 Namespace *nsPtr;
1628
1629 int refCount;
1630
1631
1632
1633
1634 int cmdEpoch;
1635
1636
1637 CompileProc *compileProc;
1638
1639 Tcl_ObjCmdProc *objProc;
1640 ClientData objClientData;
1641 Tcl_CmdProc *proc;
1642 ClientData clientData;
1643 Tcl_CmdDeleteProc *deleteProc;
1644
1645
1646 ClientData deleteData;
1647 int flags;
1648
1649 ImportRef *importRefPtr;
1650
1651
1652
1653
1654
1655
1656 CommandTrace *tracePtr;
1657
1658 Tcl_ObjCmdProc *nreProc;
1659 } Command;
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685 #define CMD_IS_DELETED 0x01
1686 #define CMD_TRACE_ACTIVE 0x02
1687 #define CMD_HAS_EXEC_TRACES 0x04
1688 #define CMD_COMPILES_EXPANDED 0x08
1689 #define CMD_REDEF_IN_PROGRESS 0x10
1690 #define CMD_VIA_RESOLVER 0x20
1691 #define CMD_DEAD 0x40
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708 typedef struct ResolverScheme {
1709 char *name;
1710 Tcl_ResolveCmdProc *cmdResProc;
1711
1712
1713 Tcl_ResolveVarProc *varResProc;
1714
1715
1716
1717 Tcl_ResolveCompiledVarProc *compiledVarResProc;
1718
1719
1720
1721 struct ResolverScheme *nextPtr;
1722
1723 } ResolverScheme;
1724
1725
1726
1727
1728
1729 typedef struct LimitHandler LimitHandler;
1730
1731
1732
1733
1734
1735
1736 enum PkgPreferOptions {
1737 PKG_PREFER_LATEST, PKG_PREFER_STABLE
1738 };
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751 typedef struct AllocCache {
1752 struct Cache *nextPtr;
1753 Tcl_ThreadId owner;
1754 Tcl_Obj *firstObjPtr;
1755 int numObjects;
1756 } AllocCache;
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767 typedef struct Interp {
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784 char *result;
1785
1786
1787 Tcl_FreeProc *freeProc;
1788
1789
1790
1791
1792
1793
1794 int errorLine;
1795
1796
1797 const struct TclStubs *stubTable;
1798
1799
1800
1801
1802
1803
1804
1805 TclHandle handle;
1806
1807
1808 Namespace *globalNsPtr;
1809 Tcl_HashTable *hiddenCmdTablePtr;
1810
1811
1812
1813 ClientData interpInfo;
1814
1815
1816 union {
1817 void (*optimizer)(void *envPtr);
1818 Tcl_HashTable unused2;
1819
1820
1821
1822
1823 } extra;
1824
1825
1826
1827
1828
1829
1830 int numLevels;
1831
1832
1833
1834
1835 int maxNestingDepth;
1836
1837
1838 CallFrame *framePtr;
1839
1840 CallFrame *varFramePtr;
1841
1842
1843
1844 ActiveVarTrace *activeVarTracePtr;
1845
1846
1847 int returnCode;
1848 CallFrame *rootFramePtr;
1849
1850 Namespace *lookupNsPtr;
1851
1852
1853
1854
1855
1856
1857
1858 char *appendResult;
1859
1860
1861 int appendAvl;
1862
1863 int appendUsed;
1864
1865
1866
1867
1868
1869
1870 Tcl_HashTable packageTable;
1871
1872
1873
1874 char *packageUnknown;
1875
1876
1877
1878
1879
1880
1881
1882 int cmdCount;
1883
1884 int evalFlags;
1885
1886
1887
1888 int unused1;
1889 LiteralTable literalTable;
1890
1891
1892
1893
1894 int compileEpoch;
1895
1896
1897
1898
1899 Proc *compiledProcPtr;
1900
1901
1902
1903
1904 ResolverScheme *resolverPtr;
1905
1906
1907
1908
1909
1910 Tcl_Obj *scriptFile;
1911
1912
1913 int flags;
1914 long randSeed;
1915 Trace *tracePtr;
1916 Tcl_HashTable *assocData;
1917
1918
1919 struct ExecEnv *execEnvPtr;
1920
1921
1922 Tcl_Obj *emptyObjPtr;
1923
1924
1925
1926 char resultSpace[TCL_RESULT_SIZE+1];
1927
1928 Tcl_Obj *objResultPtr;
1929
1930
1931 Tcl_ThreadId threadId;
1932
1933 ActiveCommandTrace *activeCmdTracePtr;
1934
1935
1936 ActiveInterpTrace *activeInterpTracePtr;
1937
1938
1939
1940 int tracesForbiddingInline;
1941
1942
1943
1944
1945
1946
1947
1948 Tcl_Obj *returnOpts;
1949
1950
1951 Tcl_Obj *errorInfo;
1952 Tcl_Obj *eiVar;
1953 Tcl_Obj *errorCode;
1954 Tcl_Obj *ecVar;
1955 int returnLevel;
1956
1957
1958
1959
1960
1961 struct {
1962 int active;
1963
1964 int granularityTicker;
1965
1966 int exceeded;
1967
1968
1969
1970 int cmdCount;
1971
1972 LimitHandler *cmdHandlers;
1973
1974
1975 int cmdGranularity;
1976
1977
1978 Tcl_Time time;
1979
1980 LimitHandler *timeHandlers;
1981
1982
1983 int timeGranularity;
1984
1985 Tcl_TimerToken timeEvent;
1986
1987
1988
1989 Tcl_HashTable callbacks;
1990
1991
1992
1993 } limit;
1994
1995
1996
1997
1998
1999
2000 struct {
2001 Tcl_Obj *const *sourceObjs;
2002
2003
2004
2005
2006 int numRemovedObjs;
2007
2008 int numInsertedObjs;
2009
2010 } ensembleRewrite;
2011
2012
2013
2014
2015
2016 Tcl_Obj *chanMsg;
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026 CmdFrame *cmdFramePtr;
2027
2028
2029 const CmdFrame *invokeCmdFramePtr;
2030
2031
2032
2033
2034 int invokeWord;
2035
2036 Tcl_HashTable *linePBodyPtr;
2037
2038
2039
2040
2041 Tcl_HashTable *lineBCPtr;
2042
2043
2044
2045
2046
2047 Tcl_HashTable *lineLABCPtr;
2048 Tcl_HashTable *lineLAPtr;
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061 ContLineLoc *scriptCLLocPtr;
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075 int packagePrefer;
2076
2077
2078
2079
2080
2081 Tcl_HashTable varTraces;
2082
2083 Tcl_HashTable varSearches;
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098 AllocCache *allocCache;
2099 void *pendingObjDataPtr;
2100
2101
2102 int *asyncReadyPtr;
2103
2104
2105
2106
2107 void *objectFoundation;
2108
2109
2110
2111
2112
2113 struct NRE_callback *deferredCallbacks;
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124 Tcl_AsyncHandler asyncCancel;
2125
2126 Tcl_Obj *asyncCancelMsg;
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136 Tcl_Obj *errorStack;
2137 Tcl_Obj *upLiteral;
2138 Tcl_Obj *callLiteral;
2139 Tcl_Obj *innerLiteral;
2140 Tcl_Obj *innerContext;
2141 int resetErrorStack;
2142
2143 #ifdef TCL_COMPILE_STATS
2144
2145
2146
2147
2148
2149 ByteCodeStats stats;
2150
2151 #endif
2152 } Interp;
2153
2154
2155
2156
2157
2158 #define TclAsyncReady(iPtr) \
2159 *((iPtr)->asyncReadyPtr)
2160
2161
2162
2163
2164
2165 #define TclCanceled(iPtr) \
2166 (((iPtr)->flags & CANCELED) || ((iPtr)->flags & TCL_CANCEL_UNWIND))
2167
2168 #define TclSetCancelFlags(iPtr, cancelFlags) \
2169 (iPtr)->flags |= CANCELED; \
2170 if ((cancelFlags) & TCL_CANCEL_UNWIND) { \
2171 (iPtr)->flags |= TCL_CANCEL_UNWIND; \
2172 }
2173
2174 #define TclUnsetCancelFlags(iPtr) \
2175 (iPtr)->flags &= (~(CANCELED | TCL_CANCEL_UNWIND))
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187 #define TclSpliceIn(a,b) \
2188 (a)->nextPtr = (b); \
2189 if ((b) != NULL) { \
2190 (b)->prevPtr = (a); \
2191 } \
2192 (a)->prevPtr = NULL, (b) = (a);
2193
2194 #define TclSpliceOut(a,b) \
2195 if ((a)->prevPtr != NULL) { \
2196 (a)->prevPtr->nextPtr = (a)->nextPtr; \
2197 } else { \
2198 (b) = (a)->nextPtr; \
2199 } \
2200 if ((a)->nextPtr != NULL) { \
2201 (a)->nextPtr->prevPtr = (a)->prevPtr; \
2202 }
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212 #define TCL_ALLOW_EXCEPTIONS 0x04
2213 #define TCL_EVAL_FILE 0x02
2214 #define TCL_EVAL_SOURCE_IN_FRAME 0x10
2215 #define TCL_EVAL_NORESOLVE 0x20
2216 #define TCL_EVAL_DISCARD_RESULT 0x40
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265 #define DELETED 1
2266 #define ERR_ALREADY_LOGGED 4
2267 #define INTERP_DEBUG_FRAME 0x10
2268 #define DONT_COMPILE_CMDS_INLINE 0x20
2269 #define RAND_SEED_INITIALIZED 0x40
2270 #define SAFE_INTERP 0x80
2271 #define INTERP_TRACE_IN_PROGRESS 0x200
2272 #define INTERP_ALTERNATE_WRONG_ARGS 0x400
2273 #define ERR_LEGACY_COPY 0x800
2274 #define CANCELED 0x1000
2275
2276
2277
2278
2279
2280
2281 #define MAX_NESTING_DEPTH 1000
2282
2283
2284
2285
2286
2287
2288
2289 #define UCHAR(c) ((unsigned char) (c))
2290
2291
2292
2293
2294
2295
2296 #if defined(__APPLE__)
2297 #define TCL_ALLOCALIGN 16
2298 #else
2299 #define TCL_ALLOCALIGN (2*sizeof(void *))
2300 #endif
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318 #define TCL_ALIGN(x) (((int)(x) + 7) & ~7)
2319
2320
2321
2322
2323
2324
2325 typedef enum {
2326 TCL_PLATFORM_UNIX = 0,
2327 TCL_PLATFORM_WINDOWS = 2
2328 } TclPlatformType;
2329
2330
2331
2332
2333
2334
2335
2336 typedef enum TclEolTranslation {
2337 TCL_TRANSLATE_AUTO,
2338 TCL_TRANSLATE_CR,
2339 TCL_TRANSLATE_LF,
2340 TCL_TRANSLATE_CRLF
2341 } TclEolTranslation;
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358 #define TCL_INVOKE_HIDDEN (1<<0)
2359 #define TCL_INVOKE_NO_UNKNOWN (1<<1)
2360 #define TCL_INVOKE_NO_TRACEBACK (1<<2)
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370 typedef struct List {
2371 int refCount;
2372 int maxElemCount;
2373 int elemCount;
2374 int canonicalFlag;
2375
2376
2377
2378 Tcl_Obj *elements;
2379
2380 } List;
2381
2382 #define LIST_MAX \
2383 (1 + (int)(((size_t)UINT_MAX - sizeof(List))/sizeof(Tcl_Obj *)))
2384 #define LIST_SIZE(numElems) \
2385 (unsigned)(sizeof(List) + (((numElems) - 1) * sizeof(Tcl_Obj *)))
2386
2387
2388
2389
2390
2391 #define ListRepPtr(listPtr) \
2392 ((List *) (listPtr)->internalRep.twoPtrValue.ptr1)
2393
2394
2395 #define ListSetIntRep(objPtr, listRepPtr) \
2396 (objPtr)->internalRep.twoPtrValue.ptr1 = (void *)(listRepPtr), \
2397 (objPtr)->internalRep.twoPtrValue.ptr2 = NULL, \
2398 (listRepPtr)->refCount++, \
2399 (objPtr)->typePtr = &tclListType
2400
2401 #define ListObjGetElements(listPtr, objc, objv) \
2402 ((objv) = &(ListRepPtr(listPtr)->elements), \
2403 (objc) = ListRepPtr(listPtr)->elemCount)
2404
2405 #define ListObjLength(listPtr, len) \
2406 ((len) = ListRepPtr(listPtr)->elemCount)
2407
2408 #define ListObjIsCanonical(listPtr) \
2409 (((listPtr)->bytes == NULL) || ListRepPtr(listPtr)->canonicalFlag)
2410
2411 #define TclListObjGetElements(interp, listPtr, objcPtr, objvPtr) \
2412 (((listPtr)->typePtr == &tclListType) \
2413 ? ((ListObjGetElements((listPtr), *(objcPtr), *(objvPtr))), TCL_OK)\
2414 : Tcl_ListObjGetElements((interp), (listPtr), (objcPtr), (objvPtr)))
2415
2416 #define TclListObjLength(interp, listPtr, lenPtr) \
2417 (((listPtr)->typePtr == &tclListType) \
2418 ? ((ListObjLength((listPtr), *(lenPtr))), TCL_OK)\
2419 : Tcl_ListObjLength((interp), (listPtr), (lenPtr)))
2420
2421 #define TclListObjIsCanonical(listPtr) \
2422 (((listPtr)->typePtr == &tclListType) ? ListObjIsCanonical((listPtr)) : 0)
2423
2424
2425
2426
2427
2428
2429 #define TCL_EACH_KEEP_NONE 0
2430 #define TCL_EACH_COLLECT 1
2431
2432
2433
2434
2435
2436
2437
2438
2439 #define TclGetLongFromObj(interp, objPtr, longPtr) \
2440 (((objPtr)->typePtr == &tclIntType) \
2441 ? ((*(longPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
2442 : Tcl_GetLongFromObj((interp), (objPtr), (longPtr)))
2443
2444 #if (LONG_MAX == INT_MAX)
2445 #define TclGetIntFromObj(interp, objPtr, intPtr) \
2446 (((objPtr)->typePtr == &tclIntType) \
2447 ? ((*(intPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
2448 : Tcl_GetIntFromObj((interp), (objPtr), (intPtr)))
2449 #define TclGetIntForIndexM(interp, objPtr, endValue, idxPtr) \
2450 (((objPtr)->typePtr == &tclIntType) \
2451 ? ((*(idxPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
2452 : TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
2453 #else
2454 #define TclGetIntFromObj(interp, objPtr, intPtr) \
2455 (((objPtr)->typePtr == &tclIntType \
2456 && (objPtr)->internalRep.longValue >= -(Tcl_WideInt)(UINT_MAX) \
2457 && (objPtr)->internalRep.longValue <= (Tcl_WideInt)(UINT_MAX)) \
2458 ? ((*(intPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
2459 : Tcl_GetIntFromObj((interp), (objPtr), (intPtr)))
2460 #define TclGetIntForIndexM(interp, objPtr, endValue, idxPtr) \
2461 (((objPtr)->typePtr == &tclIntType \
2462 && (objPtr)->internalRep.longValue >= INT_MIN \
2463 && (objPtr)->internalRep.longValue <= INT_MAX) \
2464 ? ((*(idxPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
2465 : TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
2466 #endif
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476 #ifdef TCL_WIDE_INT_IS_LONG
2477 #define TclGetWideIntFromObj(interp, objPtr, wideIntPtr) \
2478 (((objPtr)->typePtr == &tclIntType) \
2479 ? (*(wideIntPtr) = (Tcl_WideInt) \
2480 ((objPtr)->internalRep.longValue), TCL_OK) : \
2481 Tcl_GetWideIntFromObj((interp), (objPtr), (wideIntPtr)))
2482 #else
2483 #define TclGetWideIntFromObj(interp, objPtr, wideIntPtr) \
2484 (((objPtr)->typePtr == &tclWideIntType) \
2485 ? (*(wideIntPtr) = (objPtr)->internalRep.wideValue, TCL_OK) : \
2486 ((objPtr)->typePtr == &tclIntType) \
2487 ? (*(wideIntPtr) = (Tcl_WideInt) \
2488 ((objPtr)->internalRep.longValue), TCL_OK) : \
2489 Tcl_GetWideIntFromObj((interp), (objPtr), (wideIntPtr)))
2490 #endif
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511 #define DICT_PATH_READ 0
2512 #define DICT_PATH_UPDATE 1
2513 #define DICT_PATH_EXISTS 2
2514 #define DICT_PATH_CREATE 5
2515
2516 #define DICT_PATH_NON_EXISTENT ((Tcl_Obj *) (void *) 1)
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532 #define TCL_FILESYSTEM_VERSION_2 ((Tcl_FSVersion) 0x2)
2533 typedef ClientData (TclFSGetCwdProc2)(ClientData clientData);
2534 typedef int (Tcl_FSLoadFileProc2) (Tcl_Interp *interp, Tcl_Obj *pathPtr,
2535 Tcl_LoadHandle *handlePtr, Tcl_FSUnloadFileProc **unloadProcPtr, int flags);
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545 typedef int (TclGetFileAttrProc)(Tcl_Interp *interp, int objIndex,
2546 Tcl_Obj *fileName, Tcl_Obj **attrObjPtrPtr);
2547 typedef int (TclSetFileAttrProc)(Tcl_Interp *interp, int objIndex,
2548 Tcl_Obj *fileName, Tcl_Obj *attrObjPtr);
2549
2550 typedef struct TclFileAttrProcs {
2551 TclGetFileAttrProc *getProc;
2552 TclSetFileAttrProc *setProc;
2553 } TclFileAttrProcs;
2554
2555
2556
2557
2558
2559
2560 typedef struct TclFile_ *TclFile;
2561
2562
2563
2564
2565
2566
2567 #define TCL_GLOBMODE_NO_COMPLAIN 1
2568 #define TCL_GLOBMODE_JOIN 2
2569 #define TCL_GLOBMODE_DIR 4
2570 #define TCL_GLOBMODE_TAILS 8
2571
2572 typedef enum Tcl_PathPart {
2573 TCL_PATH_DIRNAME,
2574 TCL_PATH_TAIL,
2575 TCL_PATH_EXTENSION,
2576 TCL_PATH_ROOT
2577 } Tcl_PathPart;
2578
2579
2580
2581
2582
2583
2584
2585 typedef int (TclStatProc_)(const char *path, struct stat *buf);
2586 typedef int (TclAccessProc_)(const char *path, int mode);
2587 typedef Tcl_Channel (TclOpenFileChannelProc_)(Tcl_Interp *interp,
2588 const char *fileName, const char *modeString, int permissions);
2589
2590
2591
2592
2593
2594
2595
2596 typedef Tcl_CmdProc *TclCmdProcType;
2597 typedef Tcl_ObjCmdProc *TclObjCmdProcType;
2598
2599
2600
2601
2602
2603
2604
2605 typedef void (TclInitProcessGlobalValueProc)(char **valuePtr, int *lengthPtr,
2606 Tcl_Encoding *encodingPtr);
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616 typedef struct ProcessGlobalValue {
2617 int epoch;
2618
2619 int numBytes;
2620 char *value;
2621 Tcl_Encoding encoding;
2622
2623 TclInitProcessGlobalValueProc *proc;
2624
2625
2626
2627 Tcl_Mutex mutex;
2628
2629 Tcl_ThreadDataKey key;
2630
2631 } ProcessGlobalValue;
2632
2633
2634
2635
2636
2637
2638
2639 #define TCL_PARSE_DECIMAL_ONLY 1
2640
2641
2642 #define TCL_PARSE_OCTAL_ONLY 2
2643
2644 #define TCL_PARSE_HEXADECIMAL_ONLY 4
2645
2646 #define TCL_PARSE_INTEGER_ONLY 8
2647
2648 #define TCL_PARSE_SCAN_PREFIXES 16
2649
2650
2651 #define TCL_PARSE_NO_WHITESPACE 32
2652
2653 #define TCL_PARSE_BINARY_ONLY 64
2654
2655
2656
2657
2658
2659
2660
2661
2662 #define TCL_NUMBER_LONG 1
2663 #define TCL_NUMBER_WIDE 2
2664 #define TCL_NUMBER_BIG 3
2665 #define TCL_NUMBER_DOUBLE 4
2666 #define TCL_NUMBER_NAN 5
2667
2668
2669
2670
2671
2672
2673
2674 MODULE_SCOPE char *tclNativeExecutableName;
2675 MODULE_SCOPE int tclFindExecutableSearchDone;
2676 MODULE_SCOPE char *tclMemDumpFileName;
2677 MODULE_SCOPE TclPlatformType tclPlatform;
2678 MODULE_SCOPE Tcl_NotifierProcs tclNotifierHooks;
2679
2680 MODULE_SCOPE Tcl_Encoding tclIdentityEncoding;
2681
2682
2683
2684
2685
2686
2687 MODULE_SCOPE Tcl_GetTimeProc *tclGetTimeProcPtr;
2688 MODULE_SCOPE Tcl_ScaleTimeProc *tclScaleTimeProcPtr;
2689 MODULE_SCOPE ClientData tclTimeClientData;
2690
2691
2692
2693
2694
2695 MODULE_SCOPE const Tcl_ObjType tclBignumType;
2696 MODULE_SCOPE const Tcl_ObjType tclBooleanType;
2697 MODULE_SCOPE const Tcl_ObjType tclByteArrayType;
2698 MODULE_SCOPE const Tcl_ObjType tclByteCodeType;
2699 MODULE_SCOPE const Tcl_ObjType tclDoubleType;
2700 MODULE_SCOPE const Tcl_ObjType tclEndOffsetType;
2701 MODULE_SCOPE const Tcl_ObjType tclIntType;
2702 MODULE_SCOPE const Tcl_ObjType tclListType;
2703 MODULE_SCOPE const Tcl_ObjType tclDictType;
2704 MODULE_SCOPE const Tcl_ObjType tclProcBodyType;
2705 MODULE_SCOPE const Tcl_ObjType tclStringType;
2706 MODULE_SCOPE const Tcl_ObjType tclArraySearchType;
2707 MODULE_SCOPE const Tcl_ObjType tclEnsembleCmdType;
2708 #ifndef TCL_WIDE_INT_IS_LONG
2709 MODULE_SCOPE const Tcl_ObjType tclWideIntType;
2710 #endif
2711 MODULE_SCOPE const Tcl_ObjType tclRegexpType;
2712 MODULE_SCOPE Tcl_ObjType tclCmdNameType;
2713
2714
2715
2716
2717
2718 MODULE_SCOPE const Tcl_HashKeyType tclArrayHashKeyType;
2719 MODULE_SCOPE const Tcl_HashKeyType tclOneWordHashKeyType;
2720 MODULE_SCOPE const Tcl_HashKeyType tclStringHashKeyType;
2721 MODULE_SCOPE const Tcl_HashKeyType tclObjHashKeyType;
2722
2723
2724
2725
2726
2727
2728 MODULE_SCOPE Tcl_Obj * tclFreeObjList;
2729
2730 #ifdef TCL_COMPILE_STATS
2731 MODULE_SCOPE long tclObjsAlloced;
2732 MODULE_SCOPE long tclObjsFreed;
2733 #define TCL_MAX_SHARED_OBJ_STATS 5
2734 MODULE_SCOPE long tclObjsShared[TCL_MAX_SHARED_OBJ_STATS];
2735 #endif
2736
2737
2738
2739
2740
2741
2742
2743 MODULE_SCOPE char * tclEmptyStringRep;
2744 MODULE_SCOPE char tclEmptyString;
2745
2746 enum CheckEmptyStringResult {
2747 TCL_EMPTYSTRING_UNKNOWN = -1, TCL_EMPTYSTRING_NO, TCL_EMPTYSTRING_YES
2748 };
2749
2750
2751
2752
2753
2754
2755
2756
2757 MODULE_SCOPE Tcl_ObjCmdProc TclNRApplyObjCmd;
2758 MODULE_SCOPE Tcl_ObjCmdProc TclNREvalObjCmd;
2759 MODULE_SCOPE Tcl_ObjCmdProc TclNRCatchObjCmd;
2760 MODULE_SCOPE Tcl_ObjCmdProc TclNRExprObjCmd;
2761 MODULE_SCOPE Tcl_ObjCmdProc TclNRForObjCmd;
2762 MODULE_SCOPE Tcl_ObjCmdProc TclNRForeachCmd;
2763 MODULE_SCOPE Tcl_ObjCmdProc TclNRIfObjCmd;
2764 MODULE_SCOPE Tcl_ObjCmdProc TclNRLmapCmd;
2765 MODULE_SCOPE Tcl_ObjCmdProc TclNRPackageObjCmd;
2766 MODULE_SCOPE Tcl_ObjCmdProc TclNRSourceObjCmd;
2767 MODULE_SCOPE Tcl_ObjCmdProc TclNRSubstObjCmd;
2768 MODULE_SCOPE Tcl_ObjCmdProc TclNRSwitchObjCmd;
2769 MODULE_SCOPE Tcl_ObjCmdProc TclNRTryObjCmd;
2770 MODULE_SCOPE Tcl_ObjCmdProc TclNRUplevelObjCmd;
2771 MODULE_SCOPE Tcl_ObjCmdProc TclNRWhileObjCmd;
2772
2773 MODULE_SCOPE Tcl_NRPostProc TclNRForIterCallback;
2774 MODULE_SCOPE Tcl_NRPostProc TclNRCoroutineActivateCallback;
2775 MODULE_SCOPE Tcl_ObjCmdProc TclNRTailcallObjCmd;
2776 MODULE_SCOPE Tcl_NRPostProc TclNRTailcallEval;
2777 MODULE_SCOPE Tcl_ObjCmdProc TclNRCoroutineObjCmd;
2778 MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldObjCmd;
2779 MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldmObjCmd;
2780 MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldToObjCmd;
2781 MODULE_SCOPE Tcl_ObjCmdProc TclNRInvoke;
2782 MODULE_SCOPE Tcl_NRPostProc TclNRReleaseValues;
2783
2784 MODULE_SCOPE void TclSetTailcall(Tcl_Interp *interp, Tcl_Obj *tailcallPtr);
2785 MODULE_SCOPE void TclPushTailcallPoint(Tcl_Interp *interp);
2786
2787
2788 MODULE_SCOPE void TclMarkTailcall(Tcl_Interp *interp);
2789 MODULE_SCOPE void TclSkipTailcall(Tcl_Interp *interp);
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801 typedef struct ForIterData {
2802 Tcl_Obj *cond;
2803 Tcl_Obj *body;
2804 Tcl_Obj *next;
2805 const char *msg;
2806 int word;
2807 } ForIterData;
2808
2809
2810
2811
2812
2813 typedef void* TclFindSymbolProc(Tcl_Interp* interp, Tcl_LoadHandle loadHandle,
2814 const char* symbol);
2815 struct Tcl_LoadHandle_ {
2816 ClientData clientData;
2817
2818
2819
2820
2821 TclFindSymbolProc* findSymbolProcPtr;
2822
2823
2824 Tcl_FSUnloadFileProc* unloadFileProcPtr;
2825
2826 };
2827
2828
2829
2830 #define TCL_DD_SHORTEST 0x4
2831
2832 #define TCL_DD_STEELE 0x5
2833
2834 #define TCL_DD_E_FORMAT 0x2
2835
2836
2837 #define TCL_DD_F_FORMAT 0x3
2838
2839
2840
2841 #define TCL_DD_SHORTEN_FLAG 0x4
2842
2843
2844 #define TCL_DD_NO_QUICK 0x8
2845
2846
2847 #define TCL_DD_CONVERSION_TYPE_MASK 0x3
2848
2849 #define TCL_DD_STEELE0 0x1
2850
2851 #define TCL_DD_SHORTEST0 0x0
2852
2853
2854
2855
2856
2857
2858
2859
2860 MODULE_SCOPE void TclAppendBytesToByteArray(Tcl_Obj *objPtr,
2861 const unsigned char *bytes, int len);
2862 MODULE_SCOPE int TclNREvalCmd(Tcl_Interp *interp, Tcl_Obj *objPtr,
2863 int flags);
2864 MODULE_SCOPE void TclAdvanceContinuations(int *line, int **next,
2865 int loc);
2866 MODULE_SCOPE void TclAdvanceLines(int *line, const char *start,
2867 const char *end);
2868 MODULE_SCOPE void TclArgumentEnter(Tcl_Interp *interp,
2869 Tcl_Obj *objv[], int objc, CmdFrame *cf);
2870 MODULE_SCOPE void TclArgumentRelease(Tcl_Interp *interp,
2871 Tcl_Obj *objv[], int objc);
2872 MODULE_SCOPE void TclArgumentBCEnter(Tcl_Interp *interp,
2873 Tcl_Obj *objv[], int objc,
2874 void *codePtr, CmdFrame *cfPtr, int cmd, int pc);
2875 MODULE_SCOPE void TclArgumentBCRelease(Tcl_Interp *interp,
2876 CmdFrame *cfPtr);
2877 MODULE_SCOPE void TclArgumentGet(Tcl_Interp *interp, Tcl_Obj *obj,
2878 CmdFrame **cfPtrPtr, int *wordPtr);
2879 MODULE_SCOPE double TclBignumToDouble(const mp_int *bignum);
2880 MODULE_SCOPE int TclByteArrayMatch(const unsigned char *string,
2881 int strLen, const unsigned char *pattern,
2882 int ptnLen, int flags);
2883 MODULE_SCOPE double TclCeil(const mp_int *a);
2884 MODULE_SCOPE void TclChannelPreserve(Tcl_Channel chan);
2885 MODULE_SCOPE void TclChannelRelease(Tcl_Channel chan);
2886 MODULE_SCOPE int TclCheckArrayTraces(Tcl_Interp *interp, Var *varPtr,
2887 Var *arrayPtr, Tcl_Obj *name, int index);
2888 MODULE_SCOPE int TclCheckBadOctal(Tcl_Interp *interp,
2889 const char *value);
2890 MODULE_SCOPE int TclCheckEmptyString(Tcl_Obj *objPtr);
2891 MODULE_SCOPE int TclChanCaughtErrorBypass(Tcl_Interp *interp,
2892 Tcl_Channel chan);
2893 MODULE_SCOPE Tcl_ObjCmdProc TclChannelNamesCmd;
2894 MODULE_SCOPE Tcl_NRPostProc TclClearRootEnsemble;
2895 MODULE_SCOPE ContLineLoc *TclContinuationsEnter(Tcl_Obj *objPtr, int num,
2896 int *loc);
2897 MODULE_SCOPE void TclContinuationsEnterDerived(Tcl_Obj *objPtr,
2898 int start, int *clNext);
2899 MODULE_SCOPE ContLineLoc *TclContinuationsGet(Tcl_Obj *objPtr);
2900 MODULE_SCOPE void TclContinuationsCopy(Tcl_Obj *objPtr,
2901 Tcl_Obj *originObjPtr);
2902 MODULE_SCOPE int TclConvertElement(const char *src, int length,
2903 char *dst, int flags);
2904 MODULE_SCOPE Tcl_Command TclCreateObjCommandInNs (
2905 Tcl_Interp *interp,
2906 const char *cmdName,
2907 Tcl_Namespace *nsPtr,
2908 Tcl_ObjCmdProc *proc,
2909 ClientData clientData,
2910 Tcl_CmdDeleteProc *deleteProc);
2911 MODULE_SCOPE Tcl_Command TclCreateEnsembleInNs(
2912 Tcl_Interp *interp,
2913 const char *name,
2914 Tcl_Namespace *nameNamespacePtr,
2915 Tcl_Namespace *ensembleNamespacePtr,
2916 int flags);
2917 MODULE_SCOPE void TclDeleteNamespaceVars(Namespace *nsPtr);
2918 MODULE_SCOPE int TclFindDictElement(Tcl_Interp *interp,
2919 const char *dict, int dictLength,
2920 const char **elementPtr, const char **nextPtr,
2921 int *sizePtr, int *literalPtr);
2922
2923 MODULE_SCOPE int TclEvalEx(Tcl_Interp *interp, const char *script,
2924 int numBytes, int flags, int line,
2925 int *clNextOuter, const char *outerScript);
2926 MODULE_SCOPE Tcl_ObjCmdProc TclFileAttrsCmd;
2927 MODULE_SCOPE Tcl_ObjCmdProc TclFileCopyCmd;
2928 MODULE_SCOPE Tcl_ObjCmdProc TclFileDeleteCmd;
2929 MODULE_SCOPE Tcl_ObjCmdProc TclFileLinkCmd;
2930 MODULE_SCOPE Tcl_ObjCmdProc TclFileMakeDirsCmd;
2931 MODULE_SCOPE Tcl_ObjCmdProc TclFileReadLinkCmd;
2932 MODULE_SCOPE Tcl_ObjCmdProc TclFileRenameCmd;
2933 MODULE_SCOPE Tcl_ObjCmdProc TclFileTemporaryCmd;
2934 MODULE_SCOPE void TclCreateLateExitHandler(Tcl_ExitProc *proc,
2935 ClientData clientData);
2936 MODULE_SCOPE void TclDeleteLateExitHandler(Tcl_ExitProc *proc,
2937 ClientData clientData);
2938 MODULE_SCOPE char * TclDStringAppendObj(Tcl_DString *dsPtr,
2939 Tcl_Obj *objPtr);
2940 MODULE_SCOPE char * TclDStringAppendDString(Tcl_DString *dsPtr,
2941 Tcl_DString *toAppendPtr);
2942 MODULE_SCOPE Tcl_Obj * TclDStringToObj(Tcl_DString *dsPtr);
2943 MODULE_SCOPE Tcl_Obj *const * TclFetchEnsembleRoot(Tcl_Interp *interp,
2944 Tcl_Obj *const *objv, int objc, int *objcPtr);
2945 MODULE_SCOPE Tcl_Obj *const *TclEnsembleGetRewriteValues(Tcl_Interp *interp);
2946 MODULE_SCOPE Tcl_Namespace *TclEnsureNamespace(Tcl_Interp *interp,
2947 Tcl_Namespace *namespacePtr);
2948
2949 MODULE_SCOPE void TclFinalizeAllocSubsystem(void);
2950 MODULE_SCOPE void TclFinalizeAsync(void);
2951 MODULE_SCOPE void TclFinalizeDoubleConversion(void);
2952 MODULE_SCOPE void TclFinalizeEncodingSubsystem(void);
2953 MODULE_SCOPE void TclFinalizeEnvironment(void);
2954 MODULE_SCOPE void TclFinalizeEvaluation(void);
2955 MODULE_SCOPE void TclFinalizeExecution(void);
2956 MODULE_SCOPE void TclFinalizeIOSubsystem(void);
2957 MODULE_SCOPE void TclFinalizeFilesystem(void);
2958 MODULE_SCOPE void TclResetFilesystem(void);
2959 MODULE_SCOPE void TclFinalizeLoad(void);
2960 MODULE_SCOPE void TclFinalizeLock(void);
2961 MODULE_SCOPE void TclFinalizeMemorySubsystem(void);
2962 MODULE_SCOPE void TclFinalizeNotifier(void);
2963 MODULE_SCOPE void TclFinalizeObjects(void);
2964 MODULE_SCOPE void TclFinalizePreserve(void);
2965 MODULE_SCOPE void TclFinalizeSynchronization(void);
2966 MODULE_SCOPE void TclFinalizeThreadAlloc(void);
2967 MODULE_SCOPE void TclFinalizeThreadAllocThread(void);
2968 MODULE_SCOPE void TclFinalizeThreadData(int quick);
2969 MODULE_SCOPE void TclFinalizeThreadObjects(void);
2970 MODULE_SCOPE double TclFloor(const mp_int *a);
2971 MODULE_SCOPE void TclFormatNaN(double value, char *buffer);
2972 MODULE_SCOPE int TclFSFileAttrIndex(Tcl_Obj *pathPtr,
2973 const char *attributeName, int *indexPtr);
2974 MODULE_SCOPE Tcl_Command TclNRCreateCommandInNs (
2975 Tcl_Interp *interp,
2976 const char *cmdName,
2977 Tcl_Namespace *nsPtr,
2978 Tcl_ObjCmdProc *proc,
2979 Tcl_ObjCmdProc *nreProc,
2980 ClientData clientData,
2981 Tcl_CmdDeleteProc *deleteProc);
2982
2983 MODULE_SCOPE int TclNREvalFile(Tcl_Interp *interp, Tcl_Obj *pathPtr,
2984 const char *encodingName);
2985 MODULE_SCOPE void TclFSUnloadTempFile(Tcl_LoadHandle loadHandle);
2986 MODULE_SCOPE int * TclGetAsyncReadyPtr(void);
2987 MODULE_SCOPE Tcl_Obj * TclGetBgErrorHandler(Tcl_Interp *interp);
2988 MODULE_SCOPE int TclGetChannelFromObj(Tcl_Interp *interp,
2989 Tcl_Obj *objPtr, Tcl_Channel *chanPtr,
2990 int *modePtr, int flags);
2991 MODULE_SCOPE CmdFrame * TclGetCmdFrameForProcedure(Proc *procPtr);
2992 MODULE_SCOPE int TclGetCompletionCodeFromObj(Tcl_Interp *interp,
2993 Tcl_Obj *value, int *code);
2994 MODULE_SCOPE int TclGetNumberFromObj(Tcl_Interp *interp,
2995 Tcl_Obj *objPtr, ClientData *clientDataPtr,
2996 int *typePtr);
2997 MODULE_SCOPE int TclGetOpenModeEx(Tcl_Interp *interp,
2998 const char *modeString, int *seekFlagPtr,
2999 int *binaryPtr);
3000 MODULE_SCOPE Tcl_Obj * TclGetProcessGlobalValue(ProcessGlobalValue *pgvPtr);
3001 MODULE_SCOPE Tcl_Obj * TclGetSourceFromFrame(CmdFrame *cfPtr, int objc,
3002 Tcl_Obj *const objv[]);
3003 MODULE_SCOPE char * TclGetStringStorage(Tcl_Obj *objPtr,
3004 unsigned int *sizePtr);
3005 MODULE_SCOPE int TclGlob(Tcl_Interp *interp, char *pattern,
3006 Tcl_Obj *unquotedPrefix, int globFlags,
3007 Tcl_GlobTypeData *types);
3008 MODULE_SCOPE int TclIncrObj(Tcl_Interp *interp, Tcl_Obj *valuePtr,
3009 Tcl_Obj *incrPtr);
3010 MODULE_SCOPE Tcl_Obj * TclIncrObjVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr,
3011 Tcl_Obj *part2Ptr, Tcl_Obj *incrPtr, int flags);
3012 MODULE_SCOPE int TclInfoExistsCmd(ClientData dummy, Tcl_Interp *interp,
3013 int objc, Tcl_Obj *const objv[]);
3014 MODULE_SCOPE int TclInfoCoroutineCmd(ClientData dummy, Tcl_Interp *interp,
3015 int objc, Tcl_Obj *const objv[]);
3016 MODULE_SCOPE Tcl_Obj * TclInfoFrame(Tcl_Interp *interp, CmdFrame *framePtr);
3017 MODULE_SCOPE int TclInfoGlobalsCmd(ClientData dummy, Tcl_Interp *interp,
3018 int objc, Tcl_Obj *const objv[]);
3019 MODULE_SCOPE int TclInfoLocalsCmd(ClientData dummy, Tcl_Interp *interp,
3020 int objc, Tcl_Obj *const objv[]);
3021 MODULE_SCOPE int TclInfoVarsCmd(ClientData dummy, Tcl_Interp *interp,
3022 int objc, Tcl_Obj *const objv[]);
3023 MODULE_SCOPE void TclInitAlloc(void);
3024 MODULE_SCOPE void TclInitDbCkalloc(void);
3025 MODULE_SCOPE void TclInitDoubleConversion(void);
3026 MODULE_SCOPE void TclInitEmbeddedConfigurationInformation(
3027 Tcl_Interp *interp);
3028 MODULE_SCOPE void TclInitEncodingSubsystem(void);
3029 MODULE_SCOPE void TclInitIOSubsystem(void);
3030 MODULE_SCOPE void TclInitLimitSupport(Tcl_Interp *interp);
3031 MODULE_SCOPE void TclInitNamespaceSubsystem(void);
3032 MODULE_SCOPE void TclInitNotifier(void);
3033 MODULE_SCOPE void TclInitObjSubsystem(void);
3034 MODULE_SCOPE void TclInitSubsystems(void);
3035 MODULE_SCOPE int TclInterpReady(Tcl_Interp *interp);
3036 MODULE_SCOPE int TclIsBareword(int byte);
3037 MODULE_SCOPE Tcl_Obj * TclJoinPath(int elements, Tcl_Obj * const objv[],
3038 int forceRelative);
3039 MODULE_SCOPE int TclJoinThread(Tcl_ThreadId id, int *result);
3040 MODULE_SCOPE void TclLimitRemoveAllHandlers(Tcl_Interp *interp);
3041 MODULE_SCOPE Tcl_Obj * TclLindexList(Tcl_Interp *interp,
3042 Tcl_Obj *listPtr, Tcl_Obj *argPtr);
3043 MODULE_SCOPE Tcl_Obj * TclLindexFlat(Tcl_Interp *interp, Tcl_Obj *listPtr,
3044 int indexCount, Tcl_Obj *const indexArray[]);
3045
3046 MODULE_SCOPE void TclListLines(Tcl_Obj *listObj, int line, int n,
3047 int *lines, Tcl_Obj *const *elems);
3048 MODULE_SCOPE Tcl_Obj * TclListObjCopy(Tcl_Interp *interp, Tcl_Obj *listPtr);
3049 MODULE_SCOPE Tcl_Obj * TclLsetList(Tcl_Interp *interp, Tcl_Obj *listPtr,
3050 Tcl_Obj *indexPtr, Tcl_Obj *valuePtr);
3051 MODULE_SCOPE Tcl_Obj * TclLsetFlat(Tcl_Interp *interp, Tcl_Obj *listPtr,
3052 int indexCount, Tcl_Obj *const indexArray[],
3053 Tcl_Obj *valuePtr);
3054 MODULE_SCOPE Tcl_Command TclMakeEnsemble(Tcl_Interp *interp, const char *name,
3055 const EnsembleImplMap map[]);
3056 MODULE_SCOPE int TclMaxListLength(const char *bytes, int numBytes,
3057 const char **endPtr);
3058 MODULE_SCOPE int TclMergeReturnOptions(Tcl_Interp *interp, int objc,
3059 Tcl_Obj *const objv[], Tcl_Obj **optionsPtrPtr,
3060 int *codePtr, int *levelPtr);
3061 MODULE_SCOPE Tcl_Obj * TclNoErrorStack(Tcl_Interp *interp, Tcl_Obj *options);
3062 MODULE_SCOPE int TclNokia770Doubles(void);
3063 MODULE_SCOPE void TclNsDecrRefCount(Namespace *nsPtr);
3064 MODULE_SCOPE void TclNsDecrRefCount(Namespace *nsPtr);
3065 MODULE_SCOPE int TclNamespaceDeleted(Namespace *nsPtr);
3066 MODULE_SCOPE void TclObjVarErrMsg(Tcl_Interp *interp, Tcl_Obj *part1Ptr,
3067 Tcl_Obj *part2Ptr, const char *operation,
3068 const char *reason, int index);
3069 MODULE_SCOPE int TclObjInvokeNamespace(Tcl_Interp *interp,
3070 int objc, Tcl_Obj *const objv[],
3071 Tcl_Namespace *nsPtr, int flags);
3072 MODULE_SCOPE int TclObjUnsetVar2(Tcl_Interp *interp,
3073 Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, int flags);
3074 MODULE_SCOPE int TclParseBackslash(const char *src,
3075 int numBytes, int *readPtr, char *dst);
3076 MODULE_SCOPE int TclParseNumber(Tcl_Interp *interp, Tcl_Obj *objPtr,
3077 const char *expected, const char *bytes,
3078 int numBytes, const char **endPtrPtr, int flags);
3079 MODULE_SCOPE void TclParseInit(Tcl_Interp *interp, const char *string,
3080 int numBytes, Tcl_Parse *parsePtr);
3081 MODULE_SCOPE int TclParseAllWhiteSpace(const char *src, int numBytes);
3082 MODULE_SCOPE int TclProcessReturn(Tcl_Interp *interp,
3083 int code, int level, Tcl_Obj *returnOpts);
3084 MODULE_SCOPE int TclpObjLstat(Tcl_Obj *pathPtr, Tcl_StatBuf *buf);
3085 MODULE_SCOPE Tcl_Obj * TclpTempFileName(void);
3086 MODULE_SCOPE Tcl_Obj * TclpTempFileNameForLibrary(Tcl_Interp *interp, Tcl_Obj* pathPtr);
3087 MODULE_SCOPE Tcl_Obj * TclNewFSPathObj(Tcl_Obj *dirPtr, const char *addStrRep,
3088 int len);
3089 MODULE_SCOPE int TclpDeleteFile(const void *path);
3090 MODULE_SCOPE void TclpFinalizeCondition(Tcl_Condition *condPtr);
3091 MODULE_SCOPE void TclpFinalizeMutex(Tcl_Mutex *mutexPtr);
3092 MODULE_SCOPE void TclpFinalizePipes(void);
3093 MODULE_SCOPE void TclpFinalizeSockets(void);
3094 MODULE_SCOPE int TclCreateSocketAddress(Tcl_Interp *interp,
3095 struct addrinfo **addrlist,
3096 const char *host, int port, int willBind,
3097 const char **errorMsgPtr);
3098 MODULE_SCOPE int TclpThreadCreate(Tcl_ThreadId *idPtr,
3099 Tcl_ThreadCreateProc *proc, ClientData clientData,
3100 int stackSize, int flags);
3101 MODULE_SCOPE int TclpFindVariable(const char *name, int *lengthPtr);
3102 MODULE_SCOPE void TclpInitLibraryPath(char **valuePtr,
3103 int *lengthPtr, Tcl_Encoding *encodingPtr);
3104 MODULE_SCOPE void TclpInitLock(void);
3105 MODULE_SCOPE void TclpInitPlatform(void);
3106 MODULE_SCOPE void TclpInitUnlock(void);
3107 MODULE_SCOPE Tcl_Obj * TclpObjListVolumes(void);
3108 MODULE_SCOPE void TclpGlobalLock(void);
3109 MODULE_SCOPE void TclpGlobalUnlock(void);
3110 MODULE_SCOPE int TclpMatchFiles(Tcl_Interp *interp, char *separators,
3111 Tcl_DString *dirPtr, char *pattern, char *tail);
3112 MODULE_SCOPE int TclpObjNormalizePath(Tcl_Interp *interp,
3113 Tcl_Obj *pathPtr, int nextCheckpoint);
3114 MODULE_SCOPE void TclpNativeJoinPath(Tcl_Obj *prefix, const char *joining);
3115 MODULE_SCOPE Tcl_Obj * TclpNativeSplitPath(Tcl_Obj *pathPtr, int *lenPtr);
3116 MODULE_SCOPE Tcl_PathType TclpGetNativePathType(Tcl_Obj *pathPtr,
3117 int *driveNameLengthPtr, Tcl_Obj **driveNameRef);
3118 MODULE_SCOPE int TclCrossFilesystemCopy(Tcl_Interp *interp,
3119 Tcl_Obj *source, Tcl_Obj *target);
3120 MODULE_SCOPE int TclpMatchInDirectory(Tcl_Interp *interp,
3121 Tcl_Obj *resultPtr, Tcl_Obj *pathPtr,
3122 const char *pattern, Tcl_GlobTypeData *types);
3123 MODULE_SCOPE ClientData TclpGetNativeCwd(ClientData clientData);
3124 MODULE_SCOPE Tcl_FSDupInternalRepProc TclNativeDupInternalRep;
3125 MODULE_SCOPE Tcl_Obj * TclpObjLink(Tcl_Obj *pathPtr, Tcl_Obj *toPtr,
3126 int linkType);
3127 MODULE_SCOPE int TclpObjChdir(Tcl_Obj *pathPtr);
3128 MODULE_SCOPE Tcl_Channel TclpOpenTemporaryFile(Tcl_Obj *dirObj,
3129 Tcl_Obj *basenameObj, Tcl_Obj *extensionObj,
3130 Tcl_Obj *resultingNameObj);
3131 MODULE_SCOPE Tcl_Obj * TclPathPart(Tcl_Interp *interp, Tcl_Obj *pathPtr,
3132 Tcl_PathPart portion);
3133 MODULE_SCOPE char * TclpReadlink(const char *fileName,
3134 Tcl_DString *linkPtr);
3135 MODULE_SCOPE void TclpSetVariables(Tcl_Interp *interp);
3136 MODULE_SCOPE void * TclThreadStorageKeyGet(Tcl_ThreadDataKey *keyPtr);
3137 MODULE_SCOPE void TclThreadStorageKeySet(Tcl_ThreadDataKey *keyPtr,
3138 void *data);
3139 MODULE_SCOPE void TclpThreadExit(int status);
3140 MODULE_SCOPE void TclRememberCondition(Tcl_Condition *mutex);
3141 MODULE_SCOPE void TclRememberJoinableThread(Tcl_ThreadId id);
3142 MODULE_SCOPE void TclRememberMutex(Tcl_Mutex *mutex);
3143 MODULE_SCOPE void TclRemoveScriptLimitCallbacks(Tcl_Interp *interp);
3144 MODULE_SCOPE int TclReToGlob(Tcl_Interp *interp, const char *reStr,
3145 int reStrLen, Tcl_DString *dsPtr, int *flagsPtr,
3146 int *quantifiersFoundPtr);
3147 MODULE_SCOPE int TclScanElement(const char *string, int length,
3148 char *flagPtr);
3149 MODULE_SCOPE void TclSetBgErrorHandler(Tcl_Interp *interp,
3150 Tcl_Obj *cmdPrefix);
3151 MODULE_SCOPE void TclSetBignumInternalRep(Tcl_Obj *objPtr,
3152 mp_int *bignumValue);
3153 MODULE_SCOPE int TclSetBooleanFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr);
3154 MODULE_SCOPE void TclSetCmdNameObj(Tcl_Interp *interp, Tcl_Obj *objPtr,
3155 Command *cmdPtr);
3156 MODULE_SCOPE void TclSetDuplicateObj(Tcl_Obj *dupPtr, Tcl_Obj *objPtr);
3157 MODULE_SCOPE void TclSetProcessGlobalValue(ProcessGlobalValue *pgvPtr,
3158 Tcl_Obj *newValue, Tcl_Encoding encoding);
3159 MODULE_SCOPE void TclSignalExitThread(Tcl_ThreadId id, int result);
3160 MODULE_SCOPE void TclSpellFix(Tcl_Interp *interp,
3161 Tcl_Obj *const *objv, int objc, int subIdx,
3162 Tcl_Obj *bad, Tcl_Obj *fix);
3163 MODULE_SCOPE void * TclStackRealloc(Tcl_Interp *interp, void *ptr,
3164 int numBytes);
3165
3166 typedef int (*memCmpFn_t)(const void*, const void*, size_t);
3167 MODULE_SCOPE int TclStringCmp (Tcl_Obj *value1Ptr, Tcl_Obj *value2Ptr,
3168 int checkEq, int nocase, int reqlength);
3169 MODULE_SCOPE int TclStringCmpOpts (Tcl_Interp *interp, int objc, Tcl_Obj *const objv[],
3170 int *nocase, int *reqlength);
3171 MODULE_SCOPE int TclStringMatch(const char *str, int strLen,
3172 const char *pattern, int ptnLen, int flags);
3173 MODULE_SCOPE int TclStringMatchObj(Tcl_Obj *stringObj,
3174 Tcl_Obj *patternObj, int flags);
3175 MODULE_SCOPE Tcl_Obj * TclStringReverse(Tcl_Obj *objPtr);
3176 MODULE_SCOPE void TclSubstCompile(Tcl_Interp *interp, const char *bytes,
3177 int numBytes, int flags, int line,
3178 struct CompileEnv *envPtr);
3179 MODULE_SCOPE int TclSubstOptions(Tcl_Interp *interp, int numOpts,
3180 Tcl_Obj *const opts[], int *flagPtr);
3181 MODULE_SCOPE void TclSubstParse(Tcl_Interp *interp, const char *bytes,
3182 int numBytes, int flags, Tcl_Parse *parsePtr,
3183 Tcl_InterpState *statePtr);
3184 MODULE_SCOPE int TclSubstTokens(Tcl_Interp *interp, Tcl_Token *tokenPtr,
3185 int count, int *tokensLeftPtr, int line,
3186 int *clNextOuter, const char *outerScript);
3187 MODULE_SCOPE int TclTrim(const char *bytes, int numBytes,
3188 const char *trim, int numTrim, int *trimRight);
3189 MODULE_SCOPE int TclTrimLeft(const char *bytes, int numBytes,
3190 const char *trim, int numTrim);
3191 MODULE_SCOPE int TclTrimRight(const char *bytes, int numBytes,
3192 const char *trim, int numTrim);
3193 MODULE_SCOPE int TclUtfCasecmp(const char *cs, const char *ct);
3194 MODULE_SCOPE int TclUtfToUCS4(const char *, int *);
3195 MODULE_SCOPE int TclUCS4ToUtf(int, char *);
3196 MODULE_SCOPE int TclUCS4ToLower(int ch);
3197 #if TCL_UTF_MAX == 4
3198 MODULE_SCOPE int TclGetUCS4(Tcl_Obj *, int);
3199 MODULE_SCOPE int TclUniCharToUCS4(const Tcl_UniChar *, int *);
3200 #else
3201 # define TclGetUCS4 Tcl_GetUniChar
3202 # define TclUniCharToUCS4(src, ptr) (*ptr = *(src),1)
3203 #endif
3204
3205
3206
3207
3208
3209
3210 # define TclUCS4Complete(src, length) (((unsigned)(UCHAR(*(src)) - 0xF0) < 5) \
3211 ? ((length) >= 4) : (UCHAR(*(src)) == 0xED) ? ((length) >= 6) : Tcl_UtfCharComplete((src), (length)))
3212 MODULE_SCOPE Tcl_Obj * TclpNativeToNormalized(ClientData clientData);
3213 MODULE_SCOPE Tcl_Obj * TclpFilesystemPathType(Tcl_Obj *pathPtr);
3214 MODULE_SCOPE int TclpDlopen(Tcl_Interp *interp, Tcl_Obj *pathPtr,
3215 Tcl_LoadHandle *loadHandle,
3216 Tcl_FSUnloadFileProc **unloadProcPtr, int flags);
3217 MODULE_SCOPE int TclpUtime(Tcl_Obj *pathPtr, struct utimbuf *tval);
3218 #ifdef TCL_LOAD_FROM_MEMORY
3219 MODULE_SCOPE void * TclpLoadMemoryGetBuffer(Tcl_Interp *interp, int size);
3220 MODULE_SCOPE int TclpLoadMemory(Tcl_Interp *interp, void *buffer,
3221 int size, int codeSize, Tcl_LoadHandle *loadHandle,
3222 Tcl_FSUnloadFileProc **unloadProcPtr, int flags);
3223 #endif
3224 MODULE_SCOPE void TclInitThreadStorage(void);
3225 MODULE_SCOPE void TclFinalizeThreadDataThread(void);
3226 MODULE_SCOPE void TclFinalizeThreadStorage(void);
3227
3228
3229 #if (!defined(_WIN32) || !defined(_MSC_VER) || (_MSC_VER >= 1400))
3230 # define TclWideMUInt Tcl_WideUInt
3231 #else
3232
3233 # define TclWideMUInt Tcl_WideInt
3234 #endif
3235 #ifdef TCL_WIDE_CLICKS
3236 MODULE_SCOPE Tcl_WideInt TclpGetWideClicks(void);
3237 MODULE_SCOPE double TclpWideClicksToNanoseconds(Tcl_WideInt clicks);
3238 MODULE_SCOPE double TclpWideClickInMicrosec(void);
3239 #else
3240 # ifdef _WIN32
3241 # define TCL_WIDE_CLICKS 1
3242 MODULE_SCOPE Tcl_WideInt TclpGetWideClicks(void);
3243 MODULE_SCOPE double TclpWideClickInMicrosec(void);
3244 # define TclpWideClicksToNanoseconds(clicks) \
3245 ((double)(clicks) * TclpWideClickInMicrosec() * 1000)
3246 # endif
3247 #endif
3248 MODULE_SCOPE Tcl_WideInt TclpGetMicroseconds(void);
3249
3250 MODULE_SCOPE int TclZlibInit(Tcl_Interp *interp);
3251 MODULE_SCOPE void * TclpThreadCreateKey(void);
3252 MODULE_SCOPE void TclpThreadDeleteKey(void *keyPtr);
3253 MODULE_SCOPE void TclpThreadSetGlobalTSD(void *tsdKeyPtr, void *ptr);
3254 MODULE_SCOPE void * TclpThreadGetGlobalTSD(void *tsdKeyPtr);
3255
3256 MODULE_SCOPE void TclErrorStackResetIf(Tcl_Interp *interp, const char *msg, int length);
3257
3258
3259
3260
3261
3262
3263
3264 MODULE_SCOPE int TclIsSpaceProc(int byte);
3265 # define TclIsSpaceProcM(byte) \
3266 (((byte) > 0x20) ? 0 : TclIsSpaceProc(byte))
3267
3268
3269
3270
3271
3272
3273
3274 MODULE_SCOPE int Tcl_AfterObjCmd(ClientData clientData,
3275 Tcl_Interp *interp, int objc,
3276 Tcl_Obj *const objv[]);
3277 MODULE_SCOPE int Tcl_AppendObjCmd(ClientData clientData,
3278 Tcl_Interp *interp, int objc,
3279 Tcl_Obj *const objv[]);
3280 MODULE_SCOPE int Tcl_ApplyObjCmd(ClientData clientData,
3281 Tcl_Interp *interp, int objc,
3282 Tcl_Obj *const objv[]);
3283 MODULE_SCOPE Tcl_Command TclInitArrayCmd(Tcl_Interp *interp);
3284 MODULE_SCOPE Tcl_Command TclInitBinaryCmd(Tcl_Interp *interp);
3285 MODULE_SCOPE int Tcl_BreakObjCmd(ClientData clientData,
3286 Tcl_Interp *interp, int objc,
3287 Tcl_Obj *const objv[]);
3288 MODULE_SCOPE int Tcl_CaseObjCmd(ClientData clientData,
3289 Tcl_Interp *interp, int objc,
3290 Tcl_Obj *const objv[]);
3291 MODULE_SCOPE int Tcl_CatchObjCmd(ClientData clientData,
3292 Tcl_Interp *interp, int objc,
3293 Tcl_Obj *const objv[]);
3294 MODULE_SCOPE int Tcl_CdObjCmd(ClientData clientData,
3295 Tcl_Interp *interp, int objc,
3296 Tcl_Obj *const objv[]);
3297 MODULE_SCOPE Tcl_Command TclInitChanCmd(Tcl_Interp *interp);
3298 MODULE_SCOPE int TclChanCreateObjCmd(ClientData clientData,
3299 Tcl_Interp *interp, int objc,
3300 Tcl_Obj *const objv[]);
3301 MODULE_SCOPE int TclChanPostEventObjCmd(ClientData clientData,
3302 Tcl_Interp *interp, int objc,
3303 Tcl_Obj *const objv[]);
3304 MODULE_SCOPE int TclChanPopObjCmd(ClientData clientData,
3305 Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
3306 MODULE_SCOPE int TclChanPushObjCmd(ClientData clientData,
3307 Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
3308 MODULE_SCOPE void TclClockInit(Tcl_Interp *interp);
3309 MODULE_SCOPE int TclClockOldscanObjCmd(
3310 ClientData clientData, Tcl_Interp *interp,
3311 int objc, Tcl_Obj *const objv[]);
3312 MODULE_SCOPE int Tcl_CloseObjCmd(ClientData clientData,
3313 Tcl_Interp *interp, int objc,
3314 Tcl_Obj *const objv[]);
3315 MODULE_SCOPE int Tcl_ConcatObjCmd(ClientData clientData,
3316 Tcl_Interp *interp, int objc,
3317 Tcl_Obj *const objv[]);
3318 MODULE_SCOPE int Tcl_ContinueObjCmd(ClientData clientData,
3319 Tcl_Interp *interp, int objc,
3320 Tcl_Obj *const objv[]);
3321 MODULE_SCOPE Tcl_TimerToken TclCreateAbsoluteTimerHandler(
3322 Tcl_Time *timePtr, Tcl_TimerProc *proc,
3323 ClientData clientData);
3324 MODULE_SCOPE int TclDefaultBgErrorHandlerObjCmd(
3325 ClientData clientData, Tcl_Interp *interp,
3326 int objc, Tcl_Obj *const objv[]);
3327 MODULE_SCOPE Tcl_Command TclInitDictCmd(Tcl_Interp *interp);
3328 MODULE_SCOPE int TclDictWithFinish(Tcl_Interp *interp, Var *varPtr,
3329 Var *arrayPtr, Tcl_Obj *part1Ptr,
3330 Tcl_Obj *part2Ptr, int index, int pathc,
3331 Tcl_Obj *const pathv[], Tcl_Obj *keysPtr);
3332 MODULE_SCOPE Tcl_Obj * TclDictWithInit(Tcl_Interp *interp, Tcl_Obj *dictPtr,
3333 int pathc, Tcl_Obj *const pathv[]);
3334 MODULE_SCOPE int Tcl_DisassembleObjCmd(ClientData clientData,
3335 Tcl_Interp *interp, int objc,
3336 Tcl_Obj *const objv[]);
3337
3338
3339 MODULE_SCOPE int Tcl_AssembleObjCmd(ClientData clientData,
3340 Tcl_Interp *interp, int objc,
3341 Tcl_Obj *const objv[]);
3342 MODULE_SCOPE int TclNRAssembleObjCmd(ClientData clientData,
3343 Tcl_Interp *interp, int objc,
3344 Tcl_Obj *const objv[]);
3345 MODULE_SCOPE Tcl_Command TclInitEncodingCmd(Tcl_Interp *interp);
3346 MODULE_SCOPE int TclMakeEncodingCommandSafe(Tcl_Interp *interp);
3347 MODULE_SCOPE int Tcl_EofObjCmd(ClientData clientData,
3348 Tcl_Interp *interp, int objc,
3349 Tcl_Obj *const objv[]);
3350 MODULE_SCOPE int Tcl_ErrorObjCmd(ClientData clientData,
3351 Tcl_Interp *interp, int objc,
3352 Tcl_Obj *const objv[]);
3353 MODULE_SCOPE int Tcl_EvalObjCmd(ClientData clientData,
3354 Tcl_Interp *interp, int objc,
3355 Tcl_Obj *const objv[]);
3356 MODULE_SCOPE int Tcl_ExecObjCmd(ClientData clientData,
3357 Tcl_Interp *interp, int objc,
3358 Tcl_Obj *const objv[]);
3359 MODULE_SCOPE int Tcl_ExitObjCmd(ClientData clientData,
3360 Tcl_Interp *interp, int objc,
3361 Tcl_Obj *const objv[]);
3362 MODULE_SCOPE int Tcl_ExprObjCmd(ClientData clientData,
3363 Tcl_Interp *interp, int objc,
3364 Tcl_Obj *const objv[]);
3365 MODULE_SCOPE int Tcl_FblockedObjCmd(ClientData clientData,
3366 Tcl_Interp *interp, int objc,
3367 Tcl_Obj *const objv[]);
3368 MODULE_SCOPE int Tcl_FconfigureObjCmd(
3369 ClientData clientData, Tcl_Interp *interp,
3370 int objc, Tcl_Obj *const objv[]);
3371 MODULE_SCOPE int Tcl_FcopyObjCmd(ClientData dummy,
3372 Tcl_Interp *interp, int objc,
3373 Tcl_Obj *const objv[]);
3374 MODULE_SCOPE Tcl_Command TclInitFileCmd(Tcl_Interp *interp);
3375 MODULE_SCOPE int TclMakeFileCommandSafe(Tcl_Interp *interp);
3376 MODULE_SCOPE int Tcl_FileEventObjCmd(ClientData clientData,
3377 Tcl_Interp *interp, int objc,
3378 Tcl_Obj *const objv[]);
3379 MODULE_SCOPE int Tcl_FlushObjCmd(ClientData clientData,
3380 Tcl_Interp *interp, int objc,
3381 Tcl_Obj *const objv[]);
3382 MODULE_SCOPE int Tcl_ForObjCmd(ClientData clientData,
3383 Tcl_Interp *interp, int objc,
3384 Tcl_Obj *const objv[]);
3385 MODULE_SCOPE int Tcl_ForeachObjCmd(ClientData clientData,
3386 Tcl_Interp *interp, int objc,
3387 Tcl_Obj *const objv[]);
3388 MODULE_SCOPE int Tcl_FormatObjCmd(ClientData dummy,
3389 Tcl_Interp *interp, int objc,
3390 Tcl_Obj *const objv[]);
3391 MODULE_SCOPE int Tcl_GetsObjCmd(ClientData clientData,
3392 Tcl_Interp *interp, int objc,
3393 Tcl_Obj *const objv[]);
3394 MODULE_SCOPE int Tcl_GlobalObjCmd(ClientData clientData,
3395 Tcl_Interp *interp, int objc,
3396 Tcl_Obj *const objv[]);
3397 MODULE_SCOPE int Tcl_GlobObjCmd(ClientData clientData,
3398 Tcl_Interp *interp, int objc,
3399 Tcl_Obj *const objv[]);
3400 MODULE_SCOPE int Tcl_IfObjCmd(ClientData clientData,
3401 Tcl_Interp *interp, int objc,
3402 Tcl_Obj *const objv[]);
3403 MODULE_SCOPE int Tcl_IncrObjCmd(ClientData clientData,
3404 Tcl_Interp *interp, int objc,
3405 Tcl_Obj *const objv[]);
3406 MODULE_SCOPE Tcl_Command TclInitInfoCmd(Tcl_Interp *interp);
3407 MODULE_SCOPE int Tcl_InterpObjCmd(ClientData clientData,
3408 Tcl_Interp *interp, int argc,
3409 Tcl_Obj *const objv[]);
3410 MODULE_SCOPE int Tcl_JoinObjCmd(ClientData clientData,
3411 Tcl_Interp *interp, int objc,
3412 Tcl_Obj *const objv[]);
3413 MODULE_SCOPE int Tcl_LappendObjCmd(ClientData clientData,
3414 Tcl_Interp *interp, int objc,
3415 Tcl_Obj *const objv[]);
3416 MODULE_SCOPE int Tcl_LassignObjCmd(ClientData clientData,
3417 Tcl_Interp *interp, int objc,
3418 Tcl_Obj *const objv[]);
3419 MODULE_SCOPE int Tcl_LindexObjCmd(ClientData clientData,
3420 Tcl_Interp *interp, int objc,
3421 Tcl_Obj *const objv[]);
3422 MODULE_SCOPE int Tcl_LinsertObjCmd(ClientData clientData,
3423 Tcl_Interp *interp, int objc,
3424 Tcl_Obj *const objv[]);
3425 MODULE_SCOPE int Tcl_LlengthObjCmd(ClientData clientData,
3426 Tcl_Interp *interp, int objc,
3427 Tcl_Obj *const objv[]);
3428 MODULE_SCOPE int Tcl_ListObjCmd(ClientData clientData,
3429 Tcl_Interp *interp, int objc,
3430 Tcl_Obj *const objv[]);
3431 MODULE_SCOPE int Tcl_LmapObjCmd(ClientData clientData,
3432 Tcl_Interp *interp, int objc,
3433 Tcl_Obj *const objv[]);
3434 MODULE_SCOPE int Tcl_LoadObjCmd(ClientData clientData,
3435 Tcl_Interp *interp, int objc,
3436 Tcl_Obj *const objv[]);
3437 MODULE_SCOPE int Tcl_LrangeObjCmd(ClientData clientData,
3438 Tcl_Interp *interp, int objc,
3439 Tcl_Obj *const objv[]);
3440 MODULE_SCOPE int Tcl_LrepeatObjCmd(ClientData clientData,
3441 Tcl_Interp *interp, int objc,
3442 Tcl_Obj *const objv[]);
3443 MODULE_SCOPE int Tcl_LreplaceObjCmd(ClientData clientData,
3444 Tcl_Interp *interp, int objc,
3445 Tcl_Obj *const objv[]);
3446 MODULE_SCOPE int Tcl_LreverseObjCmd(ClientData clientData,
3447 Tcl_Interp *interp, int objc,
3448 Tcl_Obj *const objv[]);
3449 MODULE_SCOPE int Tcl_LsearchObjCmd(ClientData clientData,
3450 Tcl_Interp *interp, int objc,
3451 Tcl_Obj *const objv[]);
3452 MODULE_SCOPE int Tcl_LsetObjCmd(ClientData clientData,
3453 Tcl_Interp *interp, int objc,
3454 Tcl_Obj *const objv[]);
3455 MODULE_SCOPE int Tcl_LsortObjCmd(ClientData clientData,
3456 Tcl_Interp *interp, int objc,
3457 Tcl_Obj *const objv[]);
3458 MODULE_SCOPE Tcl_Command TclInitNamespaceCmd(Tcl_Interp *interp);
3459 MODULE_SCOPE int TclNamespaceEnsembleCmd(ClientData dummy,
3460 Tcl_Interp *interp, int objc,
3461 Tcl_Obj *const objv[]);
3462 MODULE_SCOPE int Tcl_OpenObjCmd(ClientData clientData,
3463 Tcl_Interp *interp, int objc,
3464 Tcl_Obj *const objv[]);
3465 MODULE_SCOPE int Tcl_PackageObjCmd(ClientData clientData,
3466 Tcl_Interp *interp, int objc,
3467 Tcl_Obj *const objv[]);
3468 MODULE_SCOPE int Tcl_PidObjCmd(ClientData clientData,
3469 Tcl_Interp *interp, int objc,
3470 Tcl_Obj *const objv[]);
3471 MODULE_SCOPE Tcl_Command TclInitPrefixCmd(Tcl_Interp *interp);
3472 MODULE_SCOPE int Tcl_PutsObjCmd(ClientData clientData,
3473 Tcl_Interp *interp, int objc,
3474 Tcl_Obj *const objv[]);
3475 MODULE_SCOPE int Tcl_PwdObjCmd(ClientData clientData,
3476 Tcl_Interp *interp, int objc,
3477 Tcl_Obj *const objv[]);
3478 MODULE_SCOPE int Tcl_ReadObjCmd(ClientData clientData,
3479 Tcl_Interp *interp, int objc,
3480 Tcl_Obj *const objv[]);
3481 MODULE_SCOPE int Tcl_RegexpObjCmd(ClientData clientData,
3482 Tcl_Interp *interp, int objc,
3483 Tcl_Obj *const objv[]);
3484 MODULE_SCOPE int Tcl_RegsubObjCmd(ClientData clientData,
3485 Tcl_Interp *interp, int objc,
3486 Tcl_Obj *const objv[]);
3487 MODULE_SCOPE int Tcl_RenameObjCmd(ClientData clientData,
3488 Tcl_Interp *interp, int objc,
3489 Tcl_Obj *const objv[]);
3490 MODULE_SCOPE int Tcl_RepresentationCmd(ClientData clientData,
3491 Tcl_Interp *interp, int objc,
3492 Tcl_Obj *const objv[]);
3493 MODULE_SCOPE int Tcl_ReturnObjCmd(ClientData clientData,
3494 Tcl_Interp *interp, int objc,
3495 Tcl_Obj *const objv[]);
3496 MODULE_SCOPE int Tcl_ScanObjCmd(ClientData clientData,
3497 Tcl_Interp *interp, int objc,
3498 Tcl_Obj *const objv[]);
3499 MODULE_SCOPE int Tcl_SeekObjCmd(ClientData clientData,
3500 Tcl_Interp *interp, int objc,
3501 Tcl_Obj *const objv[]);
3502 MODULE_SCOPE int Tcl_SetObjCmd(ClientData clientData,
3503 Tcl_Interp *interp, int objc,
3504 Tcl_Obj *const objv[]);
3505 MODULE_SCOPE int Tcl_SplitObjCmd(ClientData clientData,
3506 Tcl_Interp *interp, int objc,
3507 Tcl_Obj *const objv[]);
3508 MODULE_SCOPE int Tcl_SocketObjCmd(ClientData clientData,
3509 Tcl_Interp *interp, int objc,
3510 Tcl_Obj *const objv[]);
3511 MODULE_SCOPE int Tcl_SourceObjCmd(ClientData clientData,
3512 Tcl_Interp *interp, int objc,
3513 Tcl_Obj *const objv[]);
3514 MODULE_SCOPE Tcl_Command TclInitStringCmd(Tcl_Interp *interp);
3515 MODULE_SCOPE int Tcl_SubstObjCmd(ClientData clientData,
3516 Tcl_Interp *interp, int objc,
3517 Tcl_Obj *const objv[]);
3518 MODULE_SCOPE int Tcl_SwitchObjCmd(ClientData clientData,
3519 Tcl_Interp *interp, int objc,
3520 Tcl_Obj *const objv[]);
3521 MODULE_SCOPE int Tcl_TellObjCmd(ClientData clientData,
3522 Tcl_Interp *interp, int objc,
3523 Tcl_Obj *const objv[]);
3524 MODULE_SCOPE int Tcl_ThrowObjCmd(ClientData dummy, Tcl_Interp *interp,
3525 int objc, Tcl_Obj *const objv[]);
3526 MODULE_SCOPE int Tcl_TimeObjCmd(ClientData clientData,
3527 Tcl_Interp *interp, int objc,
3528 Tcl_Obj *const objv[]);
3529 MODULE_SCOPE int Tcl_TimeRateObjCmd(ClientData clientData,
3530 Tcl_Interp *interp, int objc,
3531 Tcl_Obj *const objv[]);
3532 MODULE_SCOPE int Tcl_TraceObjCmd(ClientData clientData,
3533 Tcl_Interp *interp, int objc,
3534 Tcl_Obj *const objv[]);
3535 MODULE_SCOPE int Tcl_TryObjCmd(ClientData clientData,
3536 Tcl_Interp *interp, int objc,
3537 Tcl_Obj *const objv[]);
3538 MODULE_SCOPE int Tcl_UnloadObjCmd(ClientData clientData,
3539 Tcl_Interp *interp, int objc,
3540 Tcl_Obj *const objv[]);
3541 MODULE_SCOPE int Tcl_UnsetObjCmd(ClientData clientData,
3542 Tcl_Interp *interp, int objc,
3543 Tcl_Obj *const objv[]);
3544 MODULE_SCOPE int Tcl_UpdateObjCmd(ClientData clientData,
3545 Tcl_Interp *interp, int objc,
3546 Tcl_Obj *const objv[]);
3547 MODULE_SCOPE int Tcl_UplevelObjCmd(ClientData clientData,
3548 Tcl_Interp *interp, int objc,
3549 Tcl_Obj *const objv[]);
3550 MODULE_SCOPE int Tcl_UpvarObjCmd(ClientData clientData,
3551 Tcl_Interp *interp, int objc,
3552 Tcl_Obj *const objv[]);
3553 MODULE_SCOPE int Tcl_VariableObjCmd(ClientData clientData,
3554 Tcl_Interp *interp, int objc,
3555 Tcl_Obj *const objv[]);
3556 MODULE_SCOPE int Tcl_VwaitObjCmd(ClientData clientData,
3557 Tcl_Interp *interp, int objc,
3558 Tcl_Obj *const objv[]);
3559 MODULE_SCOPE int Tcl_WhileObjCmd(ClientData clientData,
3560 Tcl_Interp *interp, int objc,
3561 Tcl_Obj *const objv[]);
3562
3563
3564
3565
3566
3567
3568
3569 MODULE_SCOPE int TclCompileAppendCmd(Tcl_Interp *interp,
3570 Tcl_Parse *parsePtr, Command *cmdPtr,
3571 struct CompileEnv *envPtr);
3572 MODULE_SCOPE int TclCompileArrayExistsCmd(Tcl_Interp *interp,
3573 Tcl_Parse *parsePtr, Command *cmdPtr,
3574 struct CompileEnv *envPtr);
3575 MODULE_SCOPE int TclCompileArraySetCmd(Tcl_Interp *interp,
3576 Tcl_Parse *parsePtr, Command *cmdPtr,
3577 struct CompileEnv *envPtr);
3578 MODULE_SCOPE int TclCompileArrayUnsetCmd(Tcl_Interp *interp,
3579 Tcl_Parse *parsePtr, Command *cmdPtr,
3580 struct CompileEnv *envPtr);
3581 MODULE_SCOPE int TclCompileBreakCmd(Tcl_Interp *interp,
3582 Tcl_Parse *parsePtr, Command *cmdPtr,
3583 struct CompileEnv *envPtr);
3584 MODULE_SCOPE int TclCompileCatchCmd(Tcl_Interp *interp,
3585 Tcl_Parse *parsePtr, Command *cmdPtr,
3586 struct CompileEnv *envPtr);
3587 MODULE_SCOPE int TclCompileClockClicksCmd(Tcl_Interp *interp,
3588 Tcl_Parse *parsePtr, Command *cmdPtr,
3589 struct CompileEnv *envPtr);
3590 MODULE_SCOPE int TclCompileClockReadingCmd(Tcl_Interp *interp,
3591 Tcl_Parse *parsePtr, Command *cmdPtr,
3592 struct CompileEnv *envPtr);
3593 MODULE_SCOPE int TclCompileConcatCmd(Tcl_Interp *interp,
3594 Tcl_Parse *parsePtr, Command *cmdPtr,
3595 struct CompileEnv *envPtr);
3596 MODULE_SCOPE int TclCompileContinueCmd(Tcl_Interp *interp,
3597 Tcl_Parse *parsePtr, Command *cmdPtr,
3598 struct CompileEnv *envPtr);
3599 MODULE_SCOPE int TclCompileDictAppendCmd(Tcl_Interp *interp,
3600 Tcl_Parse *parsePtr, Command *cmdPtr,
3601 struct CompileEnv *envPtr);
3602 MODULE_SCOPE int TclCompileDictCreateCmd(Tcl_Interp *interp,
3603 Tcl_Parse *parsePtr, Command *cmdPtr,
3604 struct CompileEnv *envPtr);
3605 MODULE_SCOPE int TclCompileDictExistsCmd(Tcl_Interp *interp,
3606 Tcl_Parse *parsePtr, Command *cmdPtr,
3607 struct CompileEnv *envPtr);
3608 MODULE_SCOPE int TclCompileDictForCmd(Tcl_Interp *interp,
3609 Tcl_Parse *parsePtr, Command *cmdPtr,
3610 struct CompileEnv *envPtr);
3611 MODULE_SCOPE int TclCompileDictGetCmd(Tcl_Interp *interp,
3612 Tcl_Parse *parsePtr, Command *cmdPtr,
3613 struct CompileEnv *envPtr);
3614 MODULE_SCOPE int TclCompileDictIncrCmd(Tcl_Interp *interp,
3615 Tcl_Parse *parsePtr, Command *cmdPtr,
3616 struct CompileEnv *envPtr);
3617 MODULE_SCOPE int TclCompileDictLappendCmd(Tcl_Interp *interp,
3618 Tcl_Parse *parsePtr, Command *cmdPtr,
3619 struct CompileEnv *envPtr);
3620 MODULE_SCOPE int TclCompileDictMapCmd(Tcl_Interp *interp,
3621 Tcl_Parse *parsePtr, Command *cmdPtr,
3622 struct CompileEnv *envPtr);
3623 MODULE_SCOPE int TclCompileDictMergeCmd(Tcl_Interp *interp,
3624 Tcl_Parse *parsePtr, Command *cmdPtr,
3625 struct CompileEnv *envPtr);
3626 MODULE_SCOPE int TclCompileDictSetCmd(Tcl_Interp *interp,
3627 Tcl_Parse *parsePtr, Command *cmdPtr,
3628 struct CompileEnv *envPtr);
3629 MODULE_SCOPE int TclCompileDictUnsetCmd(Tcl_Interp *interp,
3630 Tcl_Parse *parsePtr, Command *cmdPtr,
3631 struct CompileEnv *envPtr);
3632 MODULE_SCOPE int TclCompileDictUpdateCmd(Tcl_Interp *interp,
3633 Tcl_Parse *parsePtr, Command *cmdPtr,
3634 struct CompileEnv *envPtr);
3635 MODULE_SCOPE int TclCompileDictWithCmd(Tcl_Interp *interp,
3636 Tcl_Parse *parsePtr, Command *cmdPtr,
3637 struct CompileEnv *envPtr);
3638 MODULE_SCOPE int TclCompileEnsemble(Tcl_Interp *interp,
3639 Tcl_Parse *parsePtr, Command *cmdPtr,
3640 struct CompileEnv *envPtr);
3641 MODULE_SCOPE int TclCompileErrorCmd(Tcl_Interp *interp,
3642 Tcl_Parse *parsePtr, Command *cmdPtr,
3643 struct CompileEnv *envPtr);
3644 MODULE_SCOPE int TclCompileExprCmd(Tcl_Interp *interp,
3645 Tcl_Parse *parsePtr, Command *cmdPtr,
3646 struct CompileEnv *envPtr);
3647 MODULE_SCOPE int TclCompileForCmd(Tcl_Interp *interp,
3648 Tcl_Parse *parsePtr, Command *cmdPtr,
3649 struct CompileEnv *envPtr);
3650 MODULE_SCOPE int TclCompileForeachCmd(Tcl_Interp *interp,
3651 Tcl_Parse *parsePtr, Command *cmdPtr,
3652 struct CompileEnv *envPtr);
3653 MODULE_SCOPE int TclCompileFormatCmd(Tcl_Interp *interp,
3654 Tcl_Parse *parsePtr, Command *cmdPtr,
3655 struct CompileEnv *envPtr);
3656 MODULE_SCOPE int TclCompileGlobalCmd(Tcl_Interp *interp,
3657 Tcl_Parse *parsePtr, Command *cmdPtr,
3658 struct CompileEnv *envPtr);
3659 MODULE_SCOPE int TclCompileIfCmd(Tcl_Interp *interp,
3660 Tcl_Parse *parsePtr, Command *cmdPtr,
3661 struct CompileEnv *envPtr);
3662 MODULE_SCOPE int TclCompileInfoCommandsCmd(Tcl_Interp *interp,
3663 Tcl_Parse *parsePtr, Command *cmdPtr,
3664 struct CompileEnv *envPtr);
3665 MODULE_SCOPE int TclCompileInfoCoroutineCmd(Tcl_Interp *interp,
3666 Tcl_Parse *parsePtr, Command *cmdPtr,
3667 struct CompileEnv *envPtr);
3668 MODULE_SCOPE int TclCompileInfoExistsCmd(Tcl_Interp *interp,
3669 Tcl_Parse *parsePtr, Command *cmdPtr,
3670 struct CompileEnv *envPtr);
3671 MODULE_SCOPE int TclCompileInfoLevelCmd(Tcl_Interp *interp,
3672 Tcl_Parse *parsePtr, Command *cmdPtr,
3673 struct CompileEnv *envPtr);
3674 MODULE_SCOPE int TclCompileInfoObjectClassCmd(Tcl_Interp *interp,
3675 Tcl_Parse *parsePtr, Command *cmdPtr,
3676 struct CompileEnv *envPtr);
3677 MODULE_SCOPE int TclCompileInfoObjectIsACmd(Tcl_Interp *interp,
3678 Tcl_Parse *parsePtr, Command *cmdPtr,
3679 struct CompileEnv *envPtr);
3680 MODULE_SCOPE int TclCompileInfoObjectNamespaceCmd(Tcl_Interp *interp,
3681 Tcl_Parse *parsePtr, Command *cmdPtr,
3682 struct CompileEnv *envPtr);
3683 MODULE_SCOPE int TclCompileIncrCmd(Tcl_Interp *interp,
3684 Tcl_Parse *parsePtr, Command *cmdPtr,
3685 struct CompileEnv *envPtr);
3686 MODULE_SCOPE int TclCompileLappendCmd(Tcl_Interp *interp,
3687 Tcl_Parse *parsePtr, Command *cmdPtr,
3688 struct CompileEnv *envPtr);
3689 MODULE_SCOPE int TclCompileLassignCmd(Tcl_Interp *interp,
3690 Tcl_Parse *parsePtr, Command *cmdPtr,
3691 struct CompileEnv *envPtr);
3692 MODULE_SCOPE int TclCompileLindexCmd(Tcl_Interp *interp,
3693 Tcl_Parse *parsePtr, Command *cmdPtr,
3694 struct CompileEnv *envPtr);
3695 MODULE_SCOPE int TclCompileLinsertCmd(Tcl_Interp *interp,
3696 Tcl_Parse *parsePtr, Command *cmdPtr,
3697 struct CompileEnv *envPtr);
3698 MODULE_SCOPE int TclCompileListCmd(Tcl_Interp *interp,
3699 Tcl_Parse *parsePtr, Command *cmdPtr,
3700 struct CompileEnv *envPtr);
3701 MODULE_SCOPE int TclCompileLlengthCmd(Tcl_Interp *interp,
3702 Tcl_Parse *parsePtr, Command *cmdPtr,
3703 struct CompileEnv *envPtr);
3704 MODULE_SCOPE int TclCompileLmapCmd(Tcl_Interp *interp,
3705 Tcl_Parse *parsePtr, Command *cmdPtr,
3706 struct CompileEnv *envPtr);
3707 MODULE_SCOPE int TclCompileLrangeCmd(Tcl_Interp *interp,
3708 Tcl_Parse *parsePtr, Command *cmdPtr,
3709 struct CompileEnv *envPtr);
3710 MODULE_SCOPE int TclCompileLreplaceCmd(Tcl_Interp *interp,
3711 Tcl_Parse *parsePtr, Command *cmdPtr,
3712 struct CompileEnv *envPtr);
3713 MODULE_SCOPE int TclCompileLsetCmd(Tcl_Interp *interp,
3714 Tcl_Parse *parsePtr, Command *cmdPtr,
3715 struct CompileEnv *envPtr);
3716 MODULE_SCOPE int TclCompileNamespaceCodeCmd(Tcl_Interp *interp,
3717 Tcl_Parse *parsePtr, Command *cmdPtr,
3718 struct CompileEnv *envPtr);
3719 MODULE_SCOPE int TclCompileNamespaceCurrentCmd(Tcl_Interp *interp,
3720 Tcl_Parse *parsePtr, Command *cmdPtr,
3721 struct CompileEnv *envPtr);
3722 MODULE_SCOPE int TclCompileNamespaceOriginCmd(Tcl_Interp *interp,
3723 Tcl_Parse *parsePtr, Command *cmdPtr,
3724 struct CompileEnv *envPtr);
3725 MODULE_SCOPE int TclCompileNamespaceQualifiersCmd(Tcl_Interp *interp,
3726 Tcl_Parse *parsePtr, Command *cmdPtr,
3727 struct CompileEnv *envPtr);
3728 MODULE_SCOPE int TclCompileNamespaceTailCmd(Tcl_Interp *interp,
3729 Tcl_Parse *parsePtr, Command *cmdPtr,
3730 struct CompileEnv *envPtr);
3731 MODULE_SCOPE int TclCompileNamespaceUpvarCmd(Tcl_Interp *interp,
3732 Tcl_Parse *parsePtr, Command *cmdPtr,
3733 struct CompileEnv *envPtr);
3734 MODULE_SCOPE int TclCompileNamespaceWhichCmd(Tcl_Interp *interp,
3735 Tcl_Parse *parsePtr, Command *cmdPtr,
3736 struct CompileEnv *envPtr);
3737 MODULE_SCOPE int TclCompileNoOp(Tcl_Interp *interp,
3738 Tcl_Parse *parsePtr, Command *cmdPtr,
3739 struct CompileEnv *envPtr);
3740 MODULE_SCOPE int TclCompileObjectNextCmd(Tcl_Interp *interp,
3741 Tcl_Parse *parsePtr, Command *cmdPtr,
3742 struct CompileEnv *envPtr);
3743 MODULE_SCOPE int TclCompileObjectNextToCmd(Tcl_Interp *interp,
3744 Tcl_Parse *parsePtr, Command *cmdPtr,
3745 struct CompileEnv *envPtr);
3746 MODULE_SCOPE int TclCompileObjectSelfCmd(Tcl_Interp *interp,
3747 Tcl_Parse *parsePtr, Command *cmdPtr,
3748 struct CompileEnv *envPtr);
3749 MODULE_SCOPE int TclCompileRegexpCmd(Tcl_Interp *interp,
3750 Tcl_Parse *parsePtr, Command *cmdPtr,
3751 struct CompileEnv *envPtr);
3752 MODULE_SCOPE int TclCompileRegsubCmd(Tcl_Interp *interp,
3753 Tcl_Parse *parsePtr, Command *cmdPtr,
3754 struct CompileEnv *envPtr);
3755 MODULE_SCOPE int TclCompileReturnCmd(Tcl_Interp *interp,
3756 Tcl_Parse *parsePtr, Command *cmdPtr,
3757 struct CompileEnv *envPtr);
3758 MODULE_SCOPE int TclCompileSetCmd(Tcl_Interp *interp,
3759 Tcl_Parse *parsePtr, Command *cmdPtr,
3760 struct CompileEnv *envPtr);
3761 MODULE_SCOPE int TclCompileStringCatCmd(Tcl_Interp *interp,
3762 Tcl_Parse *parsePtr, Command *cmdPtr,
3763 struct CompileEnv *envPtr);
3764 MODULE_SCOPE int TclCompileStringCmpCmd(Tcl_Interp *interp,
3765 Tcl_Parse *parsePtr, Command *cmdPtr,
3766 struct CompileEnv *envPtr);
3767 MODULE_SCOPE int TclCompileStringEqualCmd(Tcl_Interp *interp,
3768 Tcl_Parse *parsePtr, Command *cmdPtr,
3769 struct CompileEnv *envPtr);
3770 MODULE_SCOPE int TclCompileStringFirstCmd(Tcl_Interp *interp,
3771 Tcl_Parse *parsePtr, Command *cmdPtr,
3772 struct CompileEnv *envPtr);
3773 MODULE_SCOPE int TclCompileStringIndexCmd(Tcl_Interp *interp,
3774 Tcl_Parse *parsePtr, Command *cmdPtr,
3775 struct CompileEnv *envPtr);
3776 MODULE_SCOPE int TclCompileStringIsCmd(Tcl_Interp *interp,
3777 Tcl_Parse *parsePtr, Command *cmdPtr,
3778 struct CompileEnv *envPtr);
3779 MODULE_SCOPE int TclCompileStringLastCmd(Tcl_Interp *interp,
3780 Tcl_Parse *parsePtr, Command *cmdPtr,
3781 struct CompileEnv *envPtr);
3782 MODULE_SCOPE int TclCompileStringLenCmd(Tcl_Interp *interp,
3783 Tcl_Parse *parsePtr, Command *cmdPtr,
3784 struct CompileEnv *envPtr);
3785 MODULE_SCOPE int TclCompileStringMapCmd(Tcl_Interp *interp,
3786 Tcl_Parse *parsePtr, Command *cmdPtr,
3787 struct CompileEnv *envPtr);
3788 MODULE_SCOPE int TclCompileStringMatchCmd(Tcl_Interp *interp,
3789 Tcl_Parse *parsePtr, Command *cmdPtr,
3790 struct CompileEnv *envPtr);
3791 MODULE_SCOPE int TclCompileStringRangeCmd(Tcl_Interp *interp,
3792 Tcl_Parse *parsePtr, Command *cmdPtr,
3793 struct CompileEnv *envPtr);
3794 MODULE_SCOPE int TclCompileStringReplaceCmd(Tcl_Interp *interp,
3795 Tcl_Parse *parsePtr, Command *cmdPtr,
3796 struct CompileEnv *envPtr);
3797 MODULE_SCOPE int TclCompileStringToLowerCmd(Tcl_Interp *interp,
3798 Tcl_Parse *parsePtr, Command *cmdPtr,
3799 struct CompileEnv *envPtr);
3800 MODULE_SCOPE int TclCompileStringToTitleCmd(Tcl_Interp *interp,
3801 Tcl_Parse *parsePtr, Command *cmdPtr,
3802 struct CompileEnv *envPtr);
3803 MODULE_SCOPE int TclCompileStringToUpperCmd(Tcl_Interp *interp,
3804 Tcl_Parse *parsePtr, Command *cmdPtr,
3805 struct CompileEnv *envPtr);
3806 MODULE_SCOPE int TclCompileStringTrimCmd(Tcl_Interp *interp,
3807 Tcl_Parse *parsePtr, Command *cmdPtr,
3808 struct CompileEnv *envPtr);
3809 MODULE_SCOPE int TclCompileStringTrimLCmd(Tcl_Interp *interp,
3810 Tcl_Parse *parsePtr, Command *cmdPtr,
3811 struct CompileEnv *envPtr);
3812 MODULE_SCOPE int TclCompileStringTrimRCmd(Tcl_Interp *interp,
3813 Tcl_Parse *parsePtr, Command *cmdPtr,
3814 struct CompileEnv *envPtr);
3815 MODULE_SCOPE int TclCompileSubstCmd(Tcl_Interp *interp,
3816 Tcl_Parse *parsePtr, Command *cmdPtr,
3817 struct CompileEnv *envPtr);
3818 MODULE_SCOPE int TclCompileSwitchCmd(Tcl_Interp *interp,
3819 Tcl_Parse *parsePtr, Command *cmdPtr,
3820 struct CompileEnv *envPtr);
3821 MODULE_SCOPE int TclCompileTailcallCmd(Tcl_Interp *interp,
3822 Tcl_Parse *parsePtr, Command *cmdPtr,
3823 struct CompileEnv *envPtr);
3824 MODULE_SCOPE int TclCompileThrowCmd(Tcl_Interp *interp,
3825 Tcl_Parse *parsePtr, Command *cmdPtr,
3826 struct CompileEnv *envPtr);
3827 MODULE_SCOPE int TclCompileTryCmd(Tcl_Interp *interp,
3828 Tcl_Parse *parsePtr, Command *cmdPtr,
3829 struct CompileEnv *envPtr);
3830 MODULE_SCOPE int TclCompileUnsetCmd(Tcl_Interp *interp,
3831 Tcl_Parse *parsePtr, Command *cmdPtr,
3832 struct CompileEnv *envPtr);
3833 MODULE_SCOPE int TclCompileUpvarCmd(Tcl_Interp *interp,
3834 Tcl_Parse *parsePtr, Command *cmdPtr,
3835 struct CompileEnv *envPtr);
3836 MODULE_SCOPE int TclCompileVariableCmd(Tcl_Interp *interp,
3837 Tcl_Parse *parsePtr, Command *cmdPtr,
3838 struct CompileEnv *envPtr);
3839 MODULE_SCOPE int TclCompileWhileCmd(Tcl_Interp *interp,
3840 Tcl_Parse *parsePtr, Command *cmdPtr,
3841 struct CompileEnv *envPtr);
3842 MODULE_SCOPE int TclCompileYieldCmd(Tcl_Interp *interp,
3843 Tcl_Parse *parsePtr, Command *cmdPtr,
3844 struct CompileEnv *envPtr);
3845 MODULE_SCOPE int TclCompileYieldToCmd(Tcl_Interp *interp,
3846 Tcl_Parse *parsePtr, Command *cmdPtr,
3847 struct CompileEnv *envPtr);
3848 MODULE_SCOPE int TclCompileBasic0ArgCmd(Tcl_Interp *interp,
3849 Tcl_Parse *parsePtr, Command *cmdPtr,
3850 struct CompileEnv *envPtr);
3851 MODULE_SCOPE int TclCompileBasic1ArgCmd(Tcl_Interp *interp,
3852 Tcl_Parse *parsePtr, Command *cmdPtr,
3853 struct CompileEnv *envPtr);
3854 MODULE_SCOPE int TclCompileBasic2ArgCmd(Tcl_Interp *interp,
3855 Tcl_Parse *parsePtr, Command *cmdPtr,
3856 struct CompileEnv *envPtr);
3857 MODULE_SCOPE int TclCompileBasic3ArgCmd(Tcl_Interp *interp,
3858 Tcl_Parse *parsePtr, Command *cmdPtr,
3859 struct CompileEnv *envPtr);
3860 MODULE_SCOPE int TclCompileBasic0Or1ArgCmd(Tcl_Interp *interp,
3861 Tcl_Parse *parsePtr, Command *cmdPtr,
3862 struct CompileEnv *envPtr);
3863 MODULE_SCOPE int TclCompileBasic1Or2ArgCmd(Tcl_Interp *interp,
3864 Tcl_Parse *parsePtr, Command *cmdPtr,
3865 struct CompileEnv *envPtr);
3866 MODULE_SCOPE int TclCompileBasic2Or3ArgCmd(Tcl_Interp *interp,
3867 Tcl_Parse *parsePtr, Command *cmdPtr,
3868 struct CompileEnv *envPtr);
3869 MODULE_SCOPE int TclCompileBasic0To2ArgCmd(Tcl_Interp *interp,
3870 Tcl_Parse *parsePtr, Command *cmdPtr,
3871 struct CompileEnv *envPtr);
3872 MODULE_SCOPE int TclCompileBasic1To3ArgCmd(Tcl_Interp *interp,
3873 Tcl_Parse *parsePtr, Command *cmdPtr,
3874 struct CompileEnv *envPtr);
3875 MODULE_SCOPE int TclCompileBasicMin0ArgCmd(Tcl_Interp *interp,
3876 Tcl_Parse *parsePtr, Command *cmdPtr,
3877 struct CompileEnv *envPtr);
3878 MODULE_SCOPE int TclCompileBasicMin1ArgCmd(Tcl_Interp *interp,
3879 Tcl_Parse *parsePtr, Command *cmdPtr,
3880 struct CompileEnv *envPtr);
3881 MODULE_SCOPE int TclCompileBasicMin2ArgCmd(Tcl_Interp *interp,
3882 Tcl_Parse *parsePtr, Command *cmdPtr,
3883 struct CompileEnv *envPtr);
3884
3885 MODULE_SCOPE int TclInvertOpCmd(ClientData clientData,
3886 Tcl_Interp *interp, int objc,
3887 Tcl_Obj *const objv[]);
3888 MODULE_SCOPE int TclCompileInvertOpCmd(Tcl_Interp *interp,
3889 Tcl_Parse *parsePtr, Command *cmdPtr,
3890 struct CompileEnv *envPtr);
3891 MODULE_SCOPE int TclNotOpCmd(ClientData clientData,
3892 Tcl_Interp *interp, int objc,
3893 Tcl_Obj *const objv[]);
3894 MODULE_SCOPE int TclCompileNotOpCmd(Tcl_Interp *interp,
3895 Tcl_Parse *parsePtr, Command *cmdPtr,
3896 struct CompileEnv *envPtr);
3897 MODULE_SCOPE int TclAddOpCmd(ClientData clientData,
3898 Tcl_Interp *interp, int objc,
3899 Tcl_Obj *const objv[]);
3900 MODULE_SCOPE int TclCompileAddOpCmd(Tcl_Interp *interp,
3901 Tcl_Parse *parsePtr, Command *cmdPtr,
3902 struct CompileEnv *envPtr);
3903 MODULE_SCOPE int TclMulOpCmd(ClientData clientData,
3904 Tcl_Interp *interp, int objc,
3905 Tcl_Obj *const objv[]);
3906 MODULE_SCOPE int TclCompileMulOpCmd(Tcl_Interp *interp,
3907 Tcl_Parse *parsePtr, Command *cmdPtr,
3908 struct CompileEnv *envPtr);
3909 MODULE_SCOPE int TclAndOpCmd(ClientData clientData,
3910 Tcl_Interp *interp, int objc,
3911 Tcl_Obj *const objv[]);
3912 MODULE_SCOPE int TclCompileAndOpCmd(Tcl_Interp *interp,
3913 Tcl_Parse *parsePtr, Command *cmdPtr,
3914 struct CompileEnv *envPtr);
3915 MODULE_SCOPE int TclOrOpCmd(ClientData clientData,
3916 Tcl_Interp *interp, int objc,
3917 Tcl_Obj *const objv[]);
3918 MODULE_SCOPE int TclCompileOrOpCmd(Tcl_Interp *interp,
3919 Tcl_Parse *parsePtr, Command *cmdPtr,
3920 struct CompileEnv *envPtr);
3921 MODULE_SCOPE int TclXorOpCmd(ClientData clientData,
3922 Tcl_Interp *interp, int objc,
3923 Tcl_Obj *const objv[]);
3924 MODULE_SCOPE int TclCompileXorOpCmd(Tcl_Interp *interp,
3925 Tcl_Parse *parsePtr, Command *cmdPtr,
3926 struct CompileEnv *envPtr);
3927 MODULE_SCOPE int TclPowOpCmd(ClientData clientData,
3928 Tcl_Interp *interp, int objc,
3929 Tcl_Obj *const objv[]);
3930 MODULE_SCOPE int TclCompilePowOpCmd(Tcl_Interp *interp,
3931 Tcl_Parse *parsePtr, Command *cmdPtr,
3932 struct CompileEnv *envPtr);
3933 MODULE_SCOPE int TclLshiftOpCmd(ClientData clientData,
3934 Tcl_Interp *interp, int objc,
3935 Tcl_Obj *const objv[]);
3936 MODULE_SCOPE int TclCompileLshiftOpCmd(Tcl_Interp *interp,
3937 Tcl_Parse *parsePtr, Command *cmdPtr,
3938 struct CompileEnv *envPtr);
3939 MODULE_SCOPE int TclRshiftOpCmd(ClientData clientData,
3940 Tcl_Interp *interp, int objc,
3941 Tcl_Obj *const objv[]);
3942 MODULE_SCOPE int TclCompileRshiftOpCmd(Tcl_Interp *interp,
3943 Tcl_Parse *parsePtr, Command *cmdPtr,
3944 struct CompileEnv *envPtr);
3945 MODULE_SCOPE int TclModOpCmd(ClientData clientData,
3946 Tcl_Interp *interp, int objc,
3947 Tcl_Obj *const objv[]);
3948 MODULE_SCOPE int TclCompileModOpCmd(Tcl_Interp *interp,
3949 Tcl_Parse *parsePtr, Command *cmdPtr,
3950 struct CompileEnv *envPtr);
3951 MODULE_SCOPE int TclNeqOpCmd(ClientData clientData,
3952 Tcl_Interp *interp, int objc,
3953 Tcl_Obj *const objv[]);
3954 MODULE_SCOPE int TclCompileNeqOpCmd(Tcl_Interp *interp,
3955 Tcl_Parse *parsePtr, Command *cmdPtr,
3956 struct CompileEnv *envPtr);
3957 MODULE_SCOPE int TclStrneqOpCmd(ClientData clientData,
3958 Tcl_Interp *interp, int objc,
3959 Tcl_Obj *const objv[]);
3960 MODULE_SCOPE int TclCompileStrneqOpCmd(Tcl_Interp *interp,
3961 Tcl_Parse *parsePtr, Command *cmdPtr,
3962 struct CompileEnv *envPtr);
3963 MODULE_SCOPE int TclInOpCmd(ClientData clientData,
3964 Tcl_Interp *interp, int objc,
3965 Tcl_Obj *const objv[]);
3966 MODULE_SCOPE int TclCompileInOpCmd(Tcl_Interp *interp,
3967 Tcl_Parse *parsePtr, Command *cmdPtr,
3968 struct CompileEnv *envPtr);
3969 MODULE_SCOPE int TclNiOpCmd(ClientData clientData,
3970 Tcl_Interp *interp, int objc,
3971 Tcl_Obj *const objv[]);
3972 MODULE_SCOPE int TclCompileNiOpCmd(Tcl_Interp *interp,
3973 Tcl_Parse *parsePtr, Command *cmdPtr,
3974 struct CompileEnv *envPtr);
3975 MODULE_SCOPE int TclMinusOpCmd(ClientData clientData,
3976 Tcl_Interp *interp, int objc,
3977 Tcl_Obj *const objv[]);
3978 MODULE_SCOPE int TclCompileMinusOpCmd(Tcl_Interp *interp,
3979 Tcl_Parse *parsePtr, Command *cmdPtr,
3980 struct CompileEnv *envPtr);
3981 MODULE_SCOPE int TclDivOpCmd(ClientData clientData,
3982 Tcl_Interp *interp, int objc,
3983 Tcl_Obj *const objv[]);
3984 MODULE_SCOPE int TclCompileDivOpCmd(Tcl_Interp *interp,
3985 Tcl_Parse *parsePtr, Command *cmdPtr,
3986 struct CompileEnv *envPtr);
3987 MODULE_SCOPE int TclCompileLessOpCmd(Tcl_Interp *interp,
3988 Tcl_Parse *parsePtr, Command *cmdPtr,
3989 struct CompileEnv *envPtr);
3990 MODULE_SCOPE int TclCompileLeqOpCmd(Tcl_Interp *interp,
3991 Tcl_Parse *parsePtr, Command *cmdPtr,
3992 struct CompileEnv *envPtr);
3993 MODULE_SCOPE int TclCompileGreaterOpCmd(Tcl_Interp *interp,
3994 Tcl_Parse *parsePtr, Command *cmdPtr,
3995 struct CompileEnv *envPtr);
3996 MODULE_SCOPE int TclCompileGeqOpCmd(Tcl_Interp *interp,
3997 Tcl_Parse *parsePtr, Command *cmdPtr,
3998 struct CompileEnv *envPtr);
3999 MODULE_SCOPE int TclCompileEqOpCmd(Tcl_Interp *interp,
4000 Tcl_Parse *parsePtr, Command *cmdPtr,
4001 struct CompileEnv *envPtr);
4002 MODULE_SCOPE int TclCompileStreqOpCmd(Tcl_Interp *interp,
4003 Tcl_Parse *parsePtr, Command *cmdPtr,
4004 struct CompileEnv *envPtr);
4005
4006 MODULE_SCOPE int TclCompileAssembleCmd(Tcl_Interp *interp,
4007 Tcl_Parse *parsePtr, Command *cmdPtr,
4008 struct CompileEnv *envPtr);
4009
4010
4011
4012
4013
4014
4015
4016 MODULE_SCOPE Var * TclObjLookupVarEx(Tcl_Interp * interp,
4017 Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, int flags,
4018 const char *msg, const int createPart1,
4019 const int createPart2, Var **arrayPtrPtr);
4020 MODULE_SCOPE Var * TclLookupArrayElement(Tcl_Interp *interp,
4021 Tcl_Obj *arrayNamePtr, Tcl_Obj *elNamePtr,
4022 const int flags, const char *msg,
4023 const int createPart1, const int createPart2,
4024 Var *arrayPtr, int index);
4025 MODULE_SCOPE Tcl_Obj * TclPtrGetVarIdx(Tcl_Interp *interp,
4026 Var *varPtr, Var *arrayPtr, Tcl_Obj *part1Ptr,
4027 Tcl_Obj *part2Ptr, const int flags, int index);
4028 MODULE_SCOPE Tcl_Obj * TclPtrSetVarIdx(Tcl_Interp *interp,
4029 Var *varPtr, Var *arrayPtr, Tcl_Obj *part1Ptr,
4030 Tcl_Obj *part2Ptr, Tcl_Obj *newValuePtr,
4031 const int flags, int index);
4032 MODULE_SCOPE Tcl_Obj * TclPtrIncrObjVarIdx(Tcl_Interp *interp,
4033 Var *varPtr, Var *arrayPtr, Tcl_Obj *part1Ptr,
4034 Tcl_Obj *part2Ptr, Tcl_Obj *incrPtr,
4035 const int flags, int index);
4036 MODULE_SCOPE int TclPtrObjMakeUpvarIdx(Tcl_Interp *interp,
4037 Var *otherPtr, Tcl_Obj *myNamePtr, int myFlags,
4038 int index);
4039 MODULE_SCOPE int TclPtrUnsetVarIdx(Tcl_Interp *interp, Var *varPtr,
4040 Var *arrayPtr, Tcl_Obj *part1Ptr,
4041 Tcl_Obj *part2Ptr, const int flags,
4042 int index);
4043 MODULE_SCOPE void TclInvalidateNsPath(Namespace *nsPtr);
4044 MODULE_SCOPE void TclFindArrayPtrElements(Var *arrayPtr,
4045 Tcl_HashTable *tablePtr);
4046
4047
4048
4049
4050
4051 MODULE_SCOPE int TclObjCallVarTraces(Interp *iPtr, Var *arrayPtr,
4052 Var *varPtr, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr,
4053 int flags, int leaveErrMsg, int index);
4054
4055
4056
4057
4058
4059 MODULE_SCOPE int TclCompareObjKeys(void *keyPtr, Tcl_HashEntry *hPtr);
4060 MODULE_SCOPE void TclFreeObjEntry(Tcl_HashEntry *hPtr);
4061 MODULE_SCOPE unsigned TclHashObjKey(Tcl_HashTable *tablePtr, void *keyPtr);
4062
4063 MODULE_SCOPE int TclFullFinalizationRequested(void);
4064
4065
4066
4067
4068
4069
4070 MODULE_SCOPE int TclIndexEncode(Tcl_Interp *interp, Tcl_Obj *objPtr,
4071 int before, int after, int *indexPtr);
4072 MODULE_SCOPE int TclIndexDecode(int encoded, int endValue);
4073
4074 MODULE_SCOPE void TclBN_s_mp_reverse(unsigned char *s, size_t len);
4075
4076
4077 #define TCL_INDEX_END (-2)
4078 #define TCL_INDEX_BEFORE (-1)
4079 #define TCL_INDEX_START (0)
4080 #define TCL_INDEX_AFTER (INT_MAX)
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107 #ifdef USE_DTRACE
4108 #ifndef _TCLDTRACE_H
4109 #include "tclDTrace.h"
4110 #endif
4111 #define TCL_DTRACE_OBJ_CREATE(objPtr) TCL_OBJ_CREATE(objPtr)
4112 #define TCL_DTRACE_OBJ_FREE(objPtr) TCL_OBJ_FREE(objPtr)
4113 #else
4114 #define TCL_DTRACE_OBJ_CREATE(objPtr) {}
4115 #define TCL_DTRACE_OBJ_FREE(objPtr) {}
4116 #endif
4117
4118 #ifdef TCL_COMPILE_STATS
4119 # define TclIncrObjsAllocated() \
4120 tclObjsAlloced++
4121 # define TclIncrObjsFreed() \
4122 tclObjsFreed++
4123 #else
4124 # define TclIncrObjsAllocated()
4125 # define TclIncrObjsFreed()
4126 #endif
4127
4128 # define TclAllocObjStorage(objPtr) \
4129 TclAllocObjStorageEx(NULL, (objPtr))
4130
4131 # define TclFreeObjStorage(objPtr) \
4132 TclFreeObjStorageEx(NULL, (objPtr))
4133
4134 #ifndef TCL_MEM_DEBUG
4135 # define TclNewObj(objPtr) \
4136 TclIncrObjsAllocated(); \
4137 TclAllocObjStorage(objPtr); \
4138 (objPtr)->refCount = 0; \
4139 (objPtr)->bytes = tclEmptyStringRep; \
4140 (objPtr)->length = 0; \
4141 (objPtr)->typePtr = NULL; \
4142 TCL_DTRACE_OBJ_CREATE(objPtr)
4143
4144
4145
4146
4147
4148
4149
4150
4151 # define TclDecrRefCount(objPtr) \
4152 if ((objPtr)->refCount-- > 1) ; else { \
4153 if (!(objPtr)->typePtr || !(objPtr)->typePtr->freeIntRepProc) { \
4154 TCL_DTRACE_OBJ_FREE(objPtr); \
4155 if ((objPtr)->bytes \
4156 && ((objPtr)->bytes != tclEmptyStringRep)) { \
4157 ckfree((char *) (objPtr)->bytes); \
4158 } \
4159 (objPtr)->length = -1; \
4160 TclFreeObjStorage(objPtr); \
4161 TclIncrObjsFreed(); \
4162 } else { \
4163 TclFreeObj(objPtr); \
4164 } \
4165 }
4166
4167 #if defined(PURIFY)
4168
4169
4170
4171
4172
4173
4174
4175
4176 # define TclAllocObjStorageEx(interp, objPtr) \
4177 (objPtr) = (Tcl_Obj *) ckalloc(sizeof(Tcl_Obj))
4178
4179 # define TclFreeObjStorageEx(interp, objPtr) \
4180 ckfree((char *) (objPtr))
4181
4182 #undef USE_THREAD_ALLOC
4183 #undef USE_TCLALLOC
4184 #elif defined(TCL_THREADS) && defined(USE_THREAD_ALLOC)
4185
4186
4187
4188
4189
4190
4191 MODULE_SCOPE Tcl_Obj * TclThreadAllocObj(void);
4192 MODULE_SCOPE void TclThreadFreeObj(Tcl_Obj *);
4193 MODULE_SCOPE Tcl_Mutex *TclpNewAllocMutex(void);
4194 MODULE_SCOPE void TclFreeAllocCache(void *);
4195 MODULE_SCOPE void * TclpGetAllocCache(void);
4196 MODULE_SCOPE void TclpSetAllocCache(void *);
4197 MODULE_SCOPE void TclpFreeAllocMutex(Tcl_Mutex *mutex);
4198 MODULE_SCOPE void TclpFreeAllocCache(void *);
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208 # define ALLOC_NOBJHIGH 1200
4209
4210 # define TclAllocObjStorageEx(interp, objPtr) \
4211 do { \
4212 AllocCache *cachePtr; \
4213 if (((interp) == NULL) || \
4214 ((cachePtr = ((Interp *)(interp))->allocCache), \
4215 (cachePtr->numObjects == 0))) { \
4216 (objPtr) = TclThreadAllocObj(); \
4217 } else { \
4218 (objPtr) = cachePtr->firstObjPtr; \
4219 cachePtr->firstObjPtr = (Tcl_Obj *)(objPtr)->internalRep.twoPtrValue.ptr1; \
4220 --cachePtr->numObjects; \
4221 } \
4222 } while (0)
4223
4224 # define TclFreeObjStorageEx(interp, objPtr) \
4225 do { \
4226 AllocCache *cachePtr; \
4227 if (((interp) == NULL) || \
4228 ((cachePtr = ((Interp *)(interp))->allocCache), \
4229 ((cachePtr->numObjects == 0) || \
4230 (cachePtr->numObjects >= ALLOC_NOBJHIGH)))) { \
4231 TclThreadFreeObj(objPtr); \
4232 } else { \
4233 (objPtr)->internalRep.twoPtrValue.ptr1 = cachePtr->firstObjPtr; \
4234 cachePtr->firstObjPtr = objPtr; \
4235 ++cachePtr->numObjects; \
4236 } \
4237 } while (0)
4238
4239 #else
4240
4241 #if defined(USE_TCLALLOC) && USE_TCLALLOC
4242 MODULE_SCOPE void TclFinalizeAllocSubsystem();
4243 MODULE_SCOPE void TclInitAlloc();
4244 #else
4245 # define USE_TCLALLOC 0
4246 #endif
4247
4248 #ifdef TCL_THREADS
4249
4250 MODULE_SCOPE Tcl_Mutex tclObjMutex;
4251 #endif
4252
4253 # define TclAllocObjStorageEx(interp, objPtr) \
4254 do { \
4255 Tcl_MutexLock(&tclObjMutex); \
4256 if (tclFreeObjList == NULL) { \
4257 TclAllocateFreeObjects(); \
4258 } \
4259 (objPtr) = tclFreeObjList; \
4260 tclFreeObjList = (Tcl_Obj *) \
4261 tclFreeObjList->internalRep.twoPtrValue.ptr1; \
4262 Tcl_MutexUnlock(&tclObjMutex); \
4263 } while (0)
4264
4265 # define TclFreeObjStorageEx(interp, objPtr) \
4266 do { \
4267 Tcl_MutexLock(&tclObjMutex); \
4268 (objPtr)->internalRep.twoPtrValue.ptr1 = (void *) tclFreeObjList; \
4269 tclFreeObjList = (objPtr); \
4270 Tcl_MutexUnlock(&tclObjMutex); \
4271 } while (0)
4272 #endif
4273
4274 #else
4275 MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, const char *file,
4276 int line);
4277
4278 # define TclDbNewObj(objPtr, file, line) \
4279 do { \
4280 TclIncrObjsAllocated(); \
4281 (objPtr) = (Tcl_Obj *) \
4282 Tcl_DbCkalloc(sizeof(Tcl_Obj), (file), (line)); \
4283 TclDbInitNewObj((objPtr), (file), (line)); \
4284 TCL_DTRACE_OBJ_CREATE(objPtr); \
4285 } while (0)
4286
4287 # define TclNewObj(objPtr) \
4288 TclDbNewObj(objPtr, __FILE__, __LINE__);
4289
4290 # define TclDecrRefCount(objPtr) \
4291 Tcl_DbDecrRefCount(objPtr, __FILE__, __LINE__)
4292
4293 # define TclNewListObjDirect(objc, objv) \
4294 TclDbNewListObjDirect(objc, objv, __FILE__, __LINE__)
4295
4296 #undef USE_THREAD_ALLOC
4297 #endif
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314 #define TclInitStringRep(objPtr, bytePtr, len) \
4315 if ((len) == 0) { \
4316 (objPtr)->bytes = tclEmptyStringRep; \
4317 (objPtr)->length = 0; \
4318 } else { \
4319 (objPtr)->bytes = (char *) ckalloc((len) + 1); \
4320 memcpy((objPtr)->bytes, (bytePtr), (len)); \
4321 (objPtr)->bytes[len] = '\0'; \
4322 (objPtr)->length = (len); \
4323 }
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337 #define TclGetString(objPtr) \
4338 ((objPtr)->bytes? (objPtr)->bytes : Tcl_GetString((objPtr)))
4339
4340 #define TclGetStringFromObj(objPtr, lenPtr) \
4341 ((objPtr)->bytes \
4342 ? (*(lenPtr) = (objPtr)->length, (objPtr)->bytes) \
4343 : Tcl_GetStringFromObj((objPtr), (lenPtr)))
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355 #define TclFreeIntRep(objPtr) \
4356 if ((objPtr)->typePtr != NULL) { \
4357 if ((objPtr)->typePtr->freeIntRepProc != NULL) { \
4358 (objPtr)->typePtr->freeIntRepProc(objPtr); \
4359 } \
4360 (objPtr)->typePtr = NULL; \
4361 }
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372 #define TclInvalidateStringRep(objPtr) \
4373 do { \
4374 Tcl_Obj *_isobjPtr = (Tcl_Obj *)(objPtr); \
4375 if (_isobjPtr->bytes != NULL) { \
4376 if (_isobjPtr->bytes != tclEmptyStringRep) { \
4377 ckfree((char *)_isobjPtr->bytes); \
4378 } \
4379 _isobjPtr->bytes = NULL; \
4380 } \
4381 } while (0)
4382
4383 #define TclHasStringRep(objPtr) \
4384 ((objPtr)->bytes != NULL)
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401 #ifndef TCL_MIN_GROWTH
4402 # ifdef TCL_GROWTH_MIN_ALLOC
4403
4404 # define TCL_MIN_GROWTH TCL_GROWTH_MIN_ALLOC
4405 # else
4406 # define TCL_MIN_GROWTH 1024
4407 # endif
4408 #endif
4409
4410
4411 #ifndef TCL_MIN_TOKEN_GROWTH
4412 #define TCL_MIN_TOKEN_GROWTH TCL_MIN_GROWTH/sizeof(Tcl_Token)
4413 #endif
4414
4415 #define TCL_MAX_TOKENS (int)(UINT_MAX / sizeof(Tcl_Token))
4416 #define TclGrowTokenArray(tokenPtr, used, available, append, staticPtr) \
4417 do { \
4418 int _needed = (used) + (append); \
4419 if (_needed > TCL_MAX_TOKENS) { \
4420 Tcl_Panic("max # of tokens for a Tcl parse (%d) exceeded", \
4421 TCL_MAX_TOKENS); \
4422 } \
4423 if (_needed > (available)) { \
4424 int allocated = 2 * _needed; \
4425 Tcl_Token *oldPtr = (tokenPtr); \
4426 Tcl_Token *newPtr; \
4427 if (oldPtr == (staticPtr)) { \
4428 oldPtr = NULL; \
4429 } \
4430 if (allocated > TCL_MAX_TOKENS) { \
4431 allocated = TCL_MAX_TOKENS; \
4432 } \
4433 newPtr = (Tcl_Token *) attemptckrealloc((char *) oldPtr, \
4434 (unsigned int) (allocated * sizeof(Tcl_Token))); \
4435 if (newPtr == NULL) { \
4436 allocated = _needed + (append) + TCL_MIN_TOKEN_GROWTH; \
4437 if (allocated > TCL_MAX_TOKENS) { \
4438 allocated = TCL_MAX_TOKENS; \
4439 } \
4440 newPtr = (Tcl_Token *) ckrealloc((char *) oldPtr, \
4441 (unsigned int) (allocated * sizeof(Tcl_Token))); \
4442 } \
4443 (available) = allocated; \
4444 if (oldPtr == NULL) { \
4445 memcpy(newPtr, staticPtr, \
4446 (size_t) ((used) * sizeof(Tcl_Token))); \
4447 } \
4448 (tokenPtr) = newPtr; \
4449 } \
4450 } while (0)
4451
4452 #define TclGrowParseTokenArray(parsePtr, append) \
4453 TclGrowTokenArray((parsePtr)->tokenPtr, (parsePtr)->numTokens, \
4454 (parsePtr)->tokensAvailable, (append), \
4455 (parsePtr)->staticTokens)
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469 #define TclUtfToUniChar(str, chPtr) \
4470 (((UCHAR(*(str))) < 0x80) ? \
4471 ((*(chPtr) = UCHAR(*(str))), 1) \
4472 : Tcl_UtfToUniChar(str, chPtr))
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486 #define TclNumUtfChars(numChars, bytes, numBytes) \
4487 do { \
4488 int _count, _i = (numBytes); \
4489 unsigned char *_str = (unsigned char *) (bytes); \
4490 while (_i && (*_str < 0xC0)) { _i--; _str++; } \
4491 _count = (numBytes) - _i; \
4492 if (_i) { \
4493 _count += Tcl_NumUtfChars((bytes) + _count, _i); \
4494 } \
4495 (numChars) = _count; \
4496 } while (0);
4497
4498 #define TclUtfPrev(src, start) \
4499 (((src) < (start)+2) ? (start) : \
4500 (UCHAR(*((src) - 1))) < 0x80 ? (src)-1 : \
4501 Tcl_UtfPrev(src, start))
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518 #define TclIsPureByteArray(objPtr) \
4519 (((objPtr)->typePtr==&tclByteArrayType) && ((objPtr)->bytes==NULL))
4520 #define TclIsPureDict(objPtr) \
4521 (((objPtr)->bytes==NULL) && ((objPtr)->typePtr==&tclDictType))
4522
4523 #define TclIsPureList(objPtr) \
4524 (((objPtr)->bytes==NULL) && ((objPtr)->typePtr==&tclListType))
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538 #if defined(WORDS_BIGENDIAN) && (TCL_UTF_MAX != 4)
4539 # define TclUniCharNcmp(cs,ct,n) memcmp((cs),(ct),(n)*sizeof(Tcl_UniChar))
4540 #else
4541 # define TclUniCharNcmp Tcl_UniCharNcmp
4542 #endif
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553 #define TclInvalidateNsCmdLookup(nsPtr) \
4554 if ((nsPtr)->numExportPatterns) { \
4555 (nsPtr)->exportLookupEpoch++; \
4556 } \
4557 if ((nsPtr)->commandPathLength) { \
4558 (nsPtr)->cmdRefEpoch++; \
4559 }
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569 MODULE_SCOPE Tcl_PackageInitProc TclTommath_Init;
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581 MODULE_SCOPE Tcl_PackageInitProc TclplatformtestInit;
4582 MODULE_SCOPE Tcl_PackageInitProc TclObjTest_Init;
4583 MODULE_SCOPE Tcl_PackageInitProc TclThread_Init;
4584 MODULE_SCOPE Tcl_PackageInitProc Procbodytest_Init;
4585 MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit;
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596 #define TclMatchIsTrivial(pattern) \
4597 (strpbrk((pattern), "*[?\\") == NULL)
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614 #define TclSetLongObj(objPtr, i) \
4615 do { \
4616 TclInvalidateStringRep(objPtr); \
4617 TclFreeIntRep(objPtr); \
4618 (objPtr)->internalRep.longValue = (long)(i); \
4619 (objPtr)->typePtr = &tclIntType; \
4620 } while (0)
4621
4622 #define TclSetIntObj(objPtr, l) \
4623 TclSetLongObj(objPtr, l)
4624
4625
4626
4627
4628
4629
4630
4631
4632 #define TclSetBooleanObj(objPtr, b) \
4633 TclSetLongObj(objPtr, (b)!=0);
4634
4635 #ifndef TCL_WIDE_INT_IS_LONG
4636 #define TclSetWideIntObj(objPtr, w) \
4637 do { \
4638 TclInvalidateStringRep(objPtr); \
4639 TclFreeIntRep(objPtr); \
4640 (objPtr)->internalRep.wideValue = (Tcl_WideInt)(w); \
4641 (objPtr)->typePtr = &tclWideIntType; \
4642 } while (0)
4643 #endif
4644
4645 #define TclSetDoubleObj(objPtr, d) \
4646 do { \
4647 TclInvalidateStringRep(objPtr); \
4648 TclFreeIntRep(objPtr); \
4649 (objPtr)->internalRep.doubleValue = (double)(d); \
4650 (objPtr)->typePtr = &tclDoubleType; \
4651 } while (0)
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670 #ifndef TCL_MEM_DEBUG
4671 #define TclNewLongObj(objPtr, i) \
4672 do { \
4673 TclIncrObjsAllocated(); \
4674 TclAllocObjStorage(objPtr); \
4675 (objPtr)->refCount = 0; \
4676 (objPtr)->bytes = NULL; \
4677 (objPtr)->internalRep.longValue = (long)(i); \
4678 (objPtr)->typePtr = &tclIntType; \
4679 TCL_DTRACE_OBJ_CREATE(objPtr); \
4680 } while (0)
4681
4682 #define TclNewIntObj(objPtr, l) \
4683 TclNewLongObj(objPtr, l)
4684
4685
4686
4687
4688
4689 #define TclNewBooleanObj(objPtr, b) \
4690 TclNewLongObj((objPtr), (b)!=0)
4691
4692 #define TclNewDoubleObj(objPtr, d) \
4693 do { \
4694 TclIncrObjsAllocated(); \
4695 TclAllocObjStorage(objPtr); \
4696 (objPtr)->refCount = 0; \
4697 (objPtr)->bytes = NULL; \
4698 (objPtr)->internalRep.doubleValue = (double)(d); \
4699 (objPtr)->typePtr = &tclDoubleType; \
4700 TCL_DTRACE_OBJ_CREATE(objPtr); \
4701 } while (0)
4702
4703 #define TclNewStringObj(objPtr, s, len) \
4704 do { \
4705 TclIncrObjsAllocated(); \
4706 TclAllocObjStorage(objPtr); \
4707 (objPtr)->refCount = 0; \
4708 TclInitStringRep((objPtr), (s), (len)); \
4709 (objPtr)->typePtr = NULL; \
4710 TCL_DTRACE_OBJ_CREATE(objPtr); \
4711 } while (0)
4712
4713 #else
4714 #define TclNewIntObj(objPtr, i) \
4715 (objPtr) = Tcl_NewIntObj(i)
4716
4717 #define TclNewLongObj(objPtr, l) \
4718 (objPtr) = Tcl_NewLongObj(l)
4719
4720 #define TclNewBooleanObj(objPtr, b) \
4721 (objPtr) = Tcl_NewBooleanObj(b)
4722
4723 #define TclNewDoubleObj(objPtr, d) \
4724 (objPtr) = Tcl_NewDoubleObj(d)
4725
4726 #define TclNewStringObj(objPtr, s, len) \
4727 (objPtr) = Tcl_NewStringObj((s), (len))
4728 #endif
4729
4730
4731
4732
4733
4734 #define TclNewLiteralStringObj(objPtr, sLiteral) \
4735 TclNewStringObj((objPtr), (sLiteral), (int) (sizeof(sLiteral "") - 1))
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747 #define TclDStringAppendLiteral(dsPtr, sLiteral) \
4748 Tcl_DStringAppend((dsPtr), (sLiteral), (int) (sizeof(sLiteral "") - 1))
4749 #define TclDStringClear(dsPtr) \
4750 Tcl_DStringSetLength((dsPtr), 0)
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761 #ifdef _MSC_VER
4762 # define TclIsInfinite(d) (!(_finite((d))))
4763 # define TclIsNaN(d) (_isnan((d)))
4764 #else
4765 # define TclIsInfinite(d) ((d) > DBL_MAX || (d) < -DBL_MAX)
4766 # ifdef NO_ISNAN
4767 # define TclIsNaN(d) ((d) != (d))
4768 # else
4769 # define TclIsNaN(d) (isnan(d))
4770 # endif
4771 #endif
4772
4773
4774
4775
4776
4777
4778
4779 #ifdef offsetof
4780 #define TclOffset(type, field) ((int) offsetof(type, field))
4781 #else
4782 #define TclOffset(type, field) ((int) ((char *) &((type *) 0)->field))
4783 #endif
4784
4785
4786
4787
4788
4789
4790 #define TclGetCurrentNamespace(interp) \
4791 (Tcl_Namespace *) ((Interp *)(interp))->varFramePtr->nsPtr
4792
4793 #define TclGetGlobalNamespace(interp) \
4794 (Tcl_Namespace *) ((Interp *)(interp))->globalNsPtr
4795
4796
4797
4798
4799
4800
4801
4802 #define TclCleanupCommandMacro(cmdPtr) \
4803 if ((cmdPtr)->refCount-- <= 1) { \
4804 ckfree((char *) (cmdPtr));\
4805 }
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816 #define TclLimitExceeded(limit) ((limit).exceeded != 0)
4817
4818 #define TclLimitReady(limit) \
4819 (((limit).active == 0) ? 0 : \
4820 (++(limit).granularityTicker, \
4821 ((((limit).active & TCL_LIMIT_COMMANDS) && \
4822 (((limit).cmdGranularity == 1) || \
4823 ((limit).granularityTicker % (limit).cmdGranularity == 0))) \
4824 ? 1 : \
4825 (((limit).active & TCL_LIMIT_TIME) && \
4826 (((limit).timeGranularity == 1) || \
4827 ((limit).granularityTicker % (limit).timeGranularity == 0)))\
4828 ? 1 : 0)))
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841 #define TCL_CT_ASSERT(e) \
4842 {enum { ct_assert_value = 1/(!!(e)) };}
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855 #define TclSmallAlloc(nbytes, memPtr) \
4856 TclSmallAllocEx(NULL, (nbytes), (memPtr))
4857
4858 #define TclSmallFree(memPtr) \
4859 TclSmallFreeEx(NULL, (memPtr))
4860
4861 #ifndef TCL_MEM_DEBUG
4862 #define TclSmallAllocEx(interp, nbytes, memPtr) \
4863 do { \
4864 Tcl_Obj *_objPtr; \
4865 TCL_CT_ASSERT((nbytes)<=sizeof(Tcl_Obj)); \
4866 TclIncrObjsAllocated(); \
4867 TclAllocObjStorageEx((interp), (_objPtr)); \
4868 memPtr = (ClientData) (_objPtr); \
4869 } while (0)
4870
4871 #define TclSmallFreeEx(interp, memPtr) \
4872 do { \
4873 TclFreeObjStorageEx((interp), (Tcl_Obj *) (memPtr)); \
4874 TclIncrObjsFreed(); \
4875 } while (0)
4876
4877 #else
4878 #define TclSmallAllocEx(interp, nbytes, memPtr) \
4879 do { \
4880 Tcl_Obj *_objPtr; \
4881 TCL_CT_ASSERT((nbytes)<=sizeof(Tcl_Obj)); \
4882 TclNewObj(_objPtr); \
4883 memPtr = (ClientData) _objPtr; \
4884 } while (0)
4885
4886 #define TclSmallFreeEx(interp, memPtr) \
4887 do { \
4888 Tcl_Obj *_objPtr = (Tcl_Obj *) memPtr; \
4889 _objPtr->bytes = NULL; \
4890 _objPtr->typePtr = NULL; \
4891 _objPtr->refCount = 1; \
4892 TclDecrRefCount(_objPtr); \
4893 } while (0)
4894 #endif
4895
4896
4897
4898
4899
4900 #if defined(PURIFY) && defined(__clang__)
4901 #if __has_feature(attribute_analyzer_noreturn) && \
4902 !defined(Tcl_Panic) && defined(Tcl_Panic_TCL_DECLARED)
4903 void Tcl_Panic(const char *, ...) __attribute__((analyzer_noreturn));
4904 #endif
4905 #if !defined(CLANG_ASSERT)
4906 #include <assert.h>
4907 #define CLANG_ASSERT(x) assert(x)
4908 #endif
4909 #elif !defined(CLANG_ASSERT)
4910 #define CLANG_ASSERT(x)
4911 #endif
4912
4913
4914
4915
4916
4917
4918
4919 #define NRE_USE_SMALL_ALLOC 1
4920 #ifndef NRE_ENABLE_ASSERTS
4921 #define NRE_ENABLE_ASSERTS 0
4922 #endif
4923
4924
4925
4926
4927
4928
4929
4930 typedef struct NRE_callback {
4931 Tcl_NRPostProc *procPtr;
4932 ClientData data[4];
4933 struct NRE_callback *nextPtr;
4934 } NRE_callback;
4935
4936 #define TOP_CB(iPtr) (((Interp *)(iPtr))->execEnvPtr->callbackPtr)
4937
4938
4939
4940
4941
4942 #define TclNRAddCallback(interp,postProcPtr,data0,data1,data2,data3) \
4943 do { \
4944 NRE_callback *_callbackPtr; \
4945 TCLNR_ALLOC((interp), (_callbackPtr)); \
4946 _callbackPtr->procPtr = (postProcPtr); \
4947 _callbackPtr->data[0] = (ClientData)(data0); \
4948 _callbackPtr->data[1] = (ClientData)(data1); \
4949 _callbackPtr->data[2] = (ClientData)(data2); \
4950 _callbackPtr->data[3] = (ClientData)(data3); \
4951 _callbackPtr->nextPtr = TOP_CB(interp); \
4952 TOP_CB(interp) = _callbackPtr; \
4953 } while (0)
4954
4955 #if NRE_USE_SMALL_ALLOC
4956 #define TCLNR_ALLOC(interp, ptr) \
4957 TclSmallAllocEx(interp, sizeof(NRE_callback), (ptr))
4958 #define TCLNR_FREE(interp, ptr) TclSmallFreeEx((interp), (ptr))
4959 #else
4960 #define TCLNR_ALLOC(interp, ptr) \
4961 (ptr = ((ClientData) ckalloc(sizeof(NRE_callback))))
4962 #define TCLNR_FREE(interp, ptr) ckfree((char *) (ptr))
4963 #endif
4964
4965 #if NRE_ENABLE_ASSERTS
4966 #define NRE_ASSERT(expr) assert((expr))
4967 #else
4968 #define NRE_ASSERT(expr)
4969 #endif
4970
4971 #include "tclIntDecls.h"
4972 #include "tclIntPlatDecls.h"
4973 #include "tclTomMathDecls.h"
4974
4975 #if !defined(USE_TCL_STUBS) && !defined(TCL_MEM_DEBUG)
4976 #define Tcl_AttemptAlloc(size) TclpAlloc(size)
4977 #define Tcl_AttemptRealloc(ptr, size) TclpRealloc((ptr), (size))
4978 #define Tcl_Free(ptr) TclpFree(ptr)
4979 #endif
4980
4981
4982
4983
4984
4985 MODULE_SCOPE size_t TclEnvEpoch;
4986
4987
4988 #endif
4989
4990
4991
4992
4993
4994
4995
4996