00001
00013 #ifndef NEWTENV_H
00014 #define NEWTENV_H
00015
00016
00017
00018 #include "NewtType.h"
00019 #include "NewtMem.h"
00020
00021
00022
00023 #define NEWT_DEBUG (newt_env._debug)
00024 #define NEWT_TRACE (newt_env._trace)
00025 #define NEWT_DUMPLEX (newt_env._dumpLex)
00026 #define NEWT_DUMPSYNTAX (newt_env._dumpSyntax)
00027 #define NEWT_DUMPBC (newt_env._dumpBC)
00028 #define NEWT_POOL (newt_env.pool)
00029 #define NEWT_SWEEP (newt_env.sweep)
00030 #define NEWT_NEEDGC (newt_env.needgc)
00031 #define NEWT_MODE_NOS2 (newt_env.mode.nos2)
00032
00033 #define NSSTR(s) (NewtMakeString(s, false))
00034 #define NSSTRCONST(s) (NewtMakeString(s, true))
00035 #define NSINT(n) (NewtMakeInteger(n))
00036 #define NSREAL(n) (NewtMakeReal(n))
00037
00038 #define NSSYM0(name) newt_sym.name
00039 #define NSSYM(name) (NewtMakeSymbol(#name))
00040
00041 #define NSNAMEDMP(name) (NewtMakeNamedMP(#name))
00042 #define NSNAMEDMP0(name) (NewtSymbolToMP(NSSYM0(name)))
00043 #define NSMP(n) (NewtMakeMagicPointer(0, n))
00044
00045 #define NS_CLASS NSSYM0(__class)
00046 #define NS_INT NSSYM0(__int)
00047 #define NS_CHAR NSSYM0(__char)
00048
00049 #define NcGlobalFnExists(r) NsGlobalFnExists(kNewtRefNIL, r)
00050 #define NcGetGlobalFn(r) NsGetGlobalFn(kNewtRefNIL, r)
00051 #define NcDefGlobalFn(r, fn) NsDefGlobalFn(kNewtRefNIL, r, fn)
00052 #define NcUndefGlobalFn(r) NsUndefGlobalFn(kNewtRefNIL, r)
00053 #define NcGlobalVarExists(r) NsGlobalVarExists(kNewtRefNIL, r)
00054 #define NcGetGlobalVar(r) NsGetGlobalVar(kNewtRefNIL, r)
00055 #define NcDefGlobalVar(r, v) NsDefGlobalVar(kNewtRefNIL, r, v)
00056 #define NcUndefGlobalVar(r) NsUndefGlobalVar(kNewtRefNIL, r)
00057 #define NcDefMagicPointer(r, v) NsDefMagicPointer(kNewtRefNIL, r, v)
00058 #define NcGetRoot() NsGetRoot(kNewtRefNIL)
00059 #define NcGetGlobals() NsGetGlobals(kNewtRefNIL)
00060 #define NcGetGlobalFns() NsGetGlobalFns(kNewtRefNIL)
00061 #define NcGetMagicPointers() NsGetMagicPointers(kNewtRefNIL)
00062 #define NcGetSymTable() NsGetSymTable(kNewtRefNIL)
00063
00064
00065 #define NcHasGlobalFn(r) NsGlobalFnExists(kNewtRefNIL, r)
00066 #define NcHasGlobalVar(r) NsGlobalVarExists(kNewtRefNIL, r)
00067 #define NcSetGlobalVar(r, v) NsDefGlobalVar(kNewtRefNIL, r, v)
00068
00069
00071 typedef struct {
00072 newtRefVar sym_table;
00073 newtRefVar root;
00074 newtRefVar globals;
00075 newtRefVar global_fns;
00076 newtRefVar magic_pointers;
00077
00078
00079 newtPool pool;
00080 bool sweep;
00081 bool needgc;
00082
00084 struct {
00085 bool nos2;
00086 } mode;
00087
00088
00089 bool _debug;
00090 bool _trace;
00091 bool _dumpLex;
00092 bool _dumpSyntax;
00093 bool _dumpBC;
00094 } newt_env_t;
00095
00096
00098 typedef struct {
00099
00100 newtRefVar _proto;
00101 newtRefVar _parent;
00102
00103
00104 newtRefVar _implementor;
00105 newtRefVar _nextArgFrame;
00106 newtRefVar CodeBlock;
00107 newtRefVar __class;
00108 newtRefVar instructions;
00109 newtRefVar literals;
00110 newtRefVar argFrame;
00111 newtRefVar numArgs;
00112 newtRefVar indefinite;
00113
00114
00115
00117 struct {
00118 newtRefVar native0;
00119 newtRefVar native;
00120 } _function;
00121
00122 newtRefVar funcPtr;
00123 newtRefVar docString;
00124
00125
00126 newtRefVar binary;
00127 newtRefVar string;
00128 newtRefVar real;
00129 newtRefVar array;
00130 newtRefVar frame;
00131 newtRefVar __int;
00132 newtRefVar int32;
00133 newtRefVar pathExpr;
00134
00135
00136 newtRefVar collect;
00137 newtRefVar deeply;
00138
00139
00140 newtRefVar __char;
00141 newtRefVar boolean;
00142 newtRefVar weird_immediate;
00143 newtRefVar forEachState;
00144
00145
00146 newtRefVar hasVariable;
00147 newtRefVar hasVar;
00148 newtRefVar defGlobalFn;
00149 newtRefVar defGlobalVar;
00150
00151
00152 newtRefVar mod;
00153 newtRefVar shiftLeft;
00154 newtRefVar shiftRight;
00155 newtRefVar objectEqual;
00156 newtRefVar defMagicPointer;
00157 newtRefVar makeRegex;
00158
00159
00160
00162 struct {
00163 newtRefVar ref;
00164 } type;
00165
00167 struct {
00169 struct {
00170 newtRefVar msg;
00171 } ex;
00172 } ext;
00173
00174 newtRefVar name;
00175 newtRefVar data;
00176 newtRefVar message;
00177 newtRefVar error;
00178
00179 newtRefVar errorCode;
00180 newtRefVar symbol;
00181 newtRefVar value;
00182 newtRefVar index;
00183
00184
00185 newtRefVar sym_table;
00186 newtRefVar globals;
00187 newtRefVar global_fns;
00188 newtRefVar magic_pointers;
00189
00190
00191 newtRefVar printDepth;
00192 newtRefVar printLength;
00193
00194
00195 newtRefVar protoREGEX;
00196 newtRefVar regex;
00197 newtRefVar pattern;
00198 newtRefVar option;
00199
00200
00201 newtRefVar requires;
00202
00203
00204 newtRefVar _ENV_;
00205 newtRefVar NEWTLIB;
00206
00207
00208 newtRefVar _ARGV_;
00209 newtRefVar _EXEDIR_;
00210
00211
00212 newtRefVar _STDOUT_;
00213 newtRefVar _STDERR_;
00214 } newt_sym_t;
00215
00216
00217
00218 extern newt_env_t newt_env;
00219 extern newt_sym_t newt_sym;
00220
00221
00222
00223
00224 #ifdef __cplusplus
00225 extern "C" {
00226 #endif
00227
00228
00229 char * NewtDefaultEncoding(void);
00230 void NewtInit(int argc, const char * argv[], int n);
00231 void NewtCleanup(void);
00232
00233 newtRef NewtLookupSymbolTable(const char * name);
00234
00235 bool NewtHasGlobalFn(newtRefArg r);
00236 bool NewtHasGlobalVar(newtRefArg r);
00237
00238
00239 newtRef NsGlobalFnExists(newtRefArg rcvr, newtRefArg r);
00240 newtRef NsGetGlobalFn(newtRefArg rcvr, newtRefArg r);
00241 newtRef NsDefGlobalFn(newtRefArg rcvr, newtRefArg r, newtRefArg fn);
00242 newtRef NsUndefGlobalFn(newtRefArg rcvr, newtRefArg r);
00243 newtRef NsGlobalVarExists(newtRefArg rcvr, newtRefArg r);
00244 newtRef NsGetGlobalVar(newtRefArg rcvr, newtRefArg r);
00245 newtRef NsDefGlobalVar(newtRefArg rcvr, newtRefArg r, newtRefArg v);
00246 newtRef NsUndefGlobalVar(newtRefArg rcvr, newtRefArg r);
00247 newtRef NcResolveMagicPointer(newtRefArg r);
00248 newtRef NsDefMagicPointer(newtRefArg rcvr, newtRefArg r, newtRefArg v);
00249
00250 newtRef NsGetRoot(newtRefArg rcvr);
00251 newtRef NsGetGlobals(newtRefArg rcvr);
00252 newtRef NsGetGlobalFns(newtRefArg rcvr);
00253 newtRef NsGetMagicPointers(newtRefArg rcvr);
00254 newtRef NsGetSymTable(newtRefArg rcvr);
00255
00256 #ifdef __USE_OBSOLETE_STYLE__
00257 newtRef NsHasGlobalFn(newtRefArg rcvr, newtRefArg r);
00258 newtRef NsHasGlobalVar(newtRefArg rcvr, newtRefArg r);
00259 newtRef NsSetGlobalVar(newtRefArg rcvr, newtRefArg r, newtRefArg v);
00260 #endif
00261
00262
00263 #ifdef __cplusplus
00264 }
00265 #endif
00266
00267
00268 #endif
00269
00270