NewtObj.h

説明を見る。
00001 /*------------------------------------------------------------------------*/
00013 #ifndef NEWTOBJ_H
00014 #define NEWTOBJ_H
00015 
00016 
00017 /* ヘッダファイル */
00018 #include "NewtType.h"
00019 
00020 
00021 /* マクロ */
00023 //#define NOBJ_ADDR_SHIFT       2
00024 #define NOBJ_ADDR_SHIFT     0
00025 
00026 
00027 #define NewtRefIsInt30(r)           ((r & 3) == 0)                      
00028 #define NewtRefToInt30(r)           (int32_t)((int32_t)r >> 2)          
00029 #define NewtMakeInt30(v)            (newtRef)((int32_t)(v) << 2)        
00030 
00031 #define NewtRefIsPointer(r)         ((r & 3) == 1)                      
00032 #define NewtRefToPointer(r)         (newtObjRef)((uint32_t)r - 1)       
00033 #define NewtMakePointer(v)          (newtRef)((uint32_t)(v) + 1)        
00034 
00035 #define NewtRefIsCharacter(r)       ((r & 0xF) == 6)                    
00036 #define NewtRefToCharacter(r)       (int)(((uint32_t)r >> 4) & 0xFFFF)  
00037 #define NewtMakeCharacter(v)        (newtRef)(((uint32_t)(v) << 4) | 6) 
00038 
00039 #define NewtRefIsSpecial(r)         ((r & 0xF) == 2)                    
00040 #define NewtRefToSpecial(r)         (int32_t)((uint32_t)r >> 2)         
00041 
00042 #define NewtRefIsMagicPointer(r)    ((r & 3) == 3)                      
00043 
00044 #ifdef __NAMED_MAGIC_POINTER__
00045     #define NewtMakeNamedMP(r)          ((newtRef)((uint32_t)NewtMakeSymbol(r) | 3))        
00046     #define NewtMPToSymbol(r)           ((newtRef)((uint32_t)r & 0xFFFFFFFD))               
00047     #define NewtSymbolToMP(r)           ((newtRef)((uint32_t)r | 3))                        
00048 #else
00049     #define NewtMakeMagicPointer(t, i)  ((newtRef)((t << 14) | ((i & 0x03ff) << 2) | 3))    
00050     #define NewtMPToTable(r)            ((int32_t)((uint32_t)r >> 14))                      
00051     #define NewtMPToIndex(r)            ((int32_t)(((uint32_t)r >> 2) & 0x03ff))            
00052 #endif
00053 
00054 #define NewtRefIsNotNIL(v)          (! NewtRefIsNIL(v))                             
00055 #define NewtMakeBoolean(v)          ((newtRef)((v)?(kNewtRefTRUE):(kNewtRefNIL)))   
00056 
00057 #define NewtRefToBinary(r)          ((uint8_t *)NewtRefToData(r))       
00058 #define NewtRefToSymbol(r)          ((newtSymDataRef)NewtRefToData(r))  
00059 #define NewtRefToString(r)          ((char *)NewtRefToData(r))          
00060 #define NewtRefToSlots(r)           ((newtRef *)NewtRefToData(r))       
00061 
00062 //
00063 #define NewtArrayLength(r)          NewtSlotsLength(r)                  
00064 #define NewtFrameLength(r)          NewtSlotsLength(r)                  
00065 
00066 //
00067 #define NewtObjType(v)              (v->header.h & 3)                       
00068 #define NewtObjIsSlotted(v)         ((v->header.h & kNewtObjSlotted) != 0)  
00069 #define NewtObjIsArray(v)           (NewtObjType(v) == 1)                   
00070 #define NewtObjIsFrame(v)           (NewtObjType(v) == 3)                   
00071 #define NewtObjIsLiteral(v)         ((v->header.h & kNewtObjLiteral) == kNewtObjLiteral)        
00072 #define NewtObjIsSweep(v, mark)     (((v->header.h & kNewtObjSweep) == kNewtObjSweep) == mark)  
00073 #define NewtObjSize(v)              (v->header.h >> 8)                  
00074 #define NewtObjBinaryClass(v)       (v->as.klass)                       
00075 #define NewtObjArrayClass(v)        (v->as.klass)                       
00076 #define NewtObjToBinary(v)          ((uint8_t *)NewtObjData(v))         
00077 #define NewtObjToSymbol(v)          ((newtSymDataRef)NewtObjData(v))    
00078 #define NewtObjToString(v)          ((char *)NewtObjData(v))            
00079 #define NewtObjToSlots(v)           ((newtRef *)NewtObjData(v))         
00080 
00081 //
00082 #define NewtHasVar(name)            NVMHasVar(name)                     
00083 #define NewtObjIsReadonly(obj)      NewtObjIsLiteral(obj)               
00084 #define NewtRefIsReadonly(r)        NewtRefIsLiteral(r)                 
00085 
00086 #ifdef __USE_OBSOLETE_STYLE__
00087 // old style
00088 #define NewtMakeNativeFn(funcPtr, numArgs, doc)         NewtMakeNativeFn0(funcPtr, numArgs, false, doc) 
00089 #define NewtDefGlobalFn(sym, funcPtr, numArgs, doc)     NewtDefGlobalFn0(sym, funcPtr, numArgs, false, doc) 
00090 
00091 #endif /* __USE_OBSOLETE_STYLE__ */
00092 
00093 // new style
00094 #define NewtMakeNativeFunc(funcPtr, numArgs, doc)       NewtMakeNativeFunc0(funcPtr, numArgs, false, doc)   
00095 #define NewtDefGlobalFunc(sym, funcPtr, numArgs, doc)   NewtDefGlobalFunc0(sym, funcPtr, numArgs, false, doc)   
00096 
00097 
00098 /* 定数 */
00099 
00100 enum {
00101     kNewtNotFunction            = 0,
00102     kNewtCodeBlock,                     // バイトコード関数
00103     kNewtNativeFn,                      // ネイティブ関数(rcvrなし、old style)
00104     kNewtNativeFunc                     // ネイティブ関数(rcvrあり、new style)
00105 };
00106 
00107 
00108 /* 型宣言 */
00109 
00111 typedef void(*newt_install_t)(void);
00112 
00113 
00114 /* 関数プロトタイプ */
00115 
00116 #ifdef __cplusplus
00117 extern "C" {
00118 #endif
00119 
00120 
00121 uint32_t    NewtSymbolHashFunction(const char * name);
00122 newtRef     NewtLookupSymbol(newtRefArg r, const char * name, uint32_t hash, int32_t st);
00123 newtRef     NewtLookupSymbolArray(newtRefArg r, newtRefArg name, int32_t st);
00124 const char* NewtSymbolGetName(newtRefArg inSymbol);
00125 
00126 uint16_t    NewtGetRefType(newtRefArg r, bool detail);
00127 uint16_t    NewtGetObjectType(newtObjRef obj, bool detail);
00128 
00129 uint32_t    NewtObjCalcDataSize(uint32_t n);
00130 newtObjRef  NewtObjAlloc(newtRefArg r, uint32_t n, uint16_t type, bool literal);
00131 newtObjRef  NewtObjResize(newtObjRef r, uint32_t n);
00132 void *      NewtObjData(newtObjRef obj);
00133 newtRef     NewtObjClone(newtRefArg r);
00134 newtRef     NewtPackLiteral(newtRefArg r);
00135 
00136 bool        NewtRefIsLiteral(newtRefArg r);
00137 bool        NewtRefIsSweep(newtRefArg r, bool mark);
00138 bool        NewtRefIsNIL(newtRefArg r);
00139 bool        NewtRefIsSymbol(newtRefArg r);
00140 uint32_t    NewtRefToHash(newtRefArg r);
00141 bool        NewtRefIsString(newtRefArg r);
00142 bool        NewtRefIsInteger(newtRefArg r);
00143 int32_t     NewtRefToInteger(newtRefArg r);
00144 bool        NewtRefIsInt32(newtRefArg r);
00145 bool        NewtRefIsReal(newtRefArg r);
00146 double      NewtRefToReal(newtRefArg r);
00147 bool        NewtRefIsBinary(newtRefArg r);
00148 void *      NewtRefToData(newtRefArg r);
00149 bool        NewtRefIsArray(newtRefArg r);
00150 bool        NewtRefIsFrame(newtRefArg r);
00151 bool        NewtRefIsFrameOrArray(newtRefArg r);
00152 bool        NewtRefIsImmediate(newtRefArg r);
00153 bool        NewtRefIsCodeBlock(newtRefArg r);
00154 bool        NewtRefIsNativeFn(newtRefArg r);
00155 bool        NewtRefIsNativeFunc(newtRefArg r);
00156 bool        NewtRefIsFunction(newtRefArg r);
00157 int         NewtRefFunctionType(newtRefArg r);
00158 bool        NewtRefIsRegex(newtRefArg r);
00159 void *      NewtRefToAddress(newtRefArg r);
00160 
00161 newtRef     NewtMakeBinary(newtRefArg klass, uint8_t * data, uint32_t size, bool literal);
00162 newtRef     NewtMakeSymbol(const char *s);
00163 newtRef     NewtMakeString(const char *s, bool literal);
00164 newtRef     NewtMakeString2(const char *s, uint32_t len, bool literal);
00165 newtRef     NewtBinarySetLength(newtRefArg r, uint32_t n);
00166 newtRef     NewtStringSetLength(newtRefArg r, uint32_t n);
00167 newtRef     NewtMakeInteger(int32_t v);
00168 newtRef     NewtMakeInt32(int32_t v);
00169 newtRef     NewtMakeReal(double v);
00170 newtRef     NewtMakeArray(newtRefArg klass, uint32_t n);
00171 newtRef     NewtMakeArray2(newtRefArg klass, uint32_t n, newtRefVar v[]);
00172 newtRef     NewtMakeMap(newtRefArg superMap, uint32_t n, newtRefVar v[]);
00173 void        NewtSetMapFlags(newtRefArg map, int32_t bit);
00174 void        NewtClearMapFlags(newtRefArg map, int32_t bit);
00175 uint32_t    NewtMapLength(newtRefArg map);
00176 newtRef     NewtMakeFrame(newtRefArg map, uint32_t n);
00177 newtRef     NewtMakeFrame2(uint32_t n, newtRefVar v[]);
00178 newtRef     NewtMakeSlotsObj(newtRefArg r, uint32_t n, uint16_t type);
00179 uint32_t    NewtObjSlotsLength(newtObjRef obj);
00180 newtRef     NewtObjAddArraySlot(newtObjRef obj, newtRefArg v);
00181 newtRef     NewtSlotsSetLength(newtRefArg r, uint32_t n, newtRefArg v);
00182 newtRef     NewtSetLength(newtRefArg r, uint32_t n);
00183 newtRef     NewtMakeAddress(void * addr);
00184 
00185 newtRef     NewtThrow0(int32_t err); 
00186 newtRef     NewtThrow(int32_t err, newtRefArg value); 
00187 newtRef     NewtThrowSymbol(int32_t err, newtRefArg symbol); 
00188 newtRef     NewtErrOutOfBounds(newtRefArg value, int32_t index);
00189 void        NewtErrMessage(int32_t err);
00190 
00191 int         NewtSymbolCompareLex(newtRefArg r1, newtRefArg r2);
00192 int16_t     NewtObjectCompare(newtRefArg r1, newtRefArg r2);
00193 bool        NewtRefEqual(newtRefArg r1, newtRefArg r2);
00194 bool        NewtObjectEqual(newtRefArg r1, newtRefArg r2);
00195 bool        NewtSymbolEqual(newtRefArg r1, newtRefArg r2);
00196 
00197 uint32_t    NewtLength(newtRefArg r);
00198 uint32_t    NewtDeeplyLength(newtRefArg r);
00199 uint32_t    NewtBinaryLength(newtRefArg r);
00200 uint32_t    NewtSymbolLength(newtRefArg r);
00201 uint32_t    NewtStringLength(newtRefArg r);
00202 uint32_t    NewtSlotsLength(newtRefArg r);
00203 uint32_t    NewtDeeplyFrameLength(newtRefArg r);
00204 
00205 newtRef     NewtObjGetSlot(newtObjRef obj, newtRefArg slot);
00206 newtRef     NewtObjSetSlot(newtObjRef obj, newtRefArg slot, newtRefArg v);
00207 void        NewtObjRemoveSlot(newtObjRef obj, newtRefArg slot);
00208 
00209 newtRef     NewtGetMapIndex(newtRefArg r, uint32_t index, uint32_t * indexP);
00210 int32_t     NewtFindArrayIndex(newtRefArg r, newtRefArg v, uint16_t st);
00211 bool        NewtFindMapIndex(newtRefArg r, newtRefArg v, uint32_t * indexP);
00212 newtRef     NewtFrameMap(newtRefArg r);
00213 
00214 int32_t     NewtFindSlotIndex(newtRefArg frame, newtRefArg slot);
00215 bool        NewtHasProto(newtRefArg frame);
00216 bool        NewtHasSlot(newtRefArg frame, newtRefArg slot);
00217 newtRef     NewtSlotsGetPath(newtRefArg r, newtRefArg p);
00218 bool        NewtHasPath(newtRefArg r, newtRefArg p);
00219 newtRef     NewtGetPath(newtRefArg r, newtRefArg p, newtRefVar * slotP);
00220 newtRef     NewtGetBinarySlot(newtRefArg r, uint32_t p);
00221 newtRef     NewtSetBinarySlot(newtRefArg r, uint32_t p, newtRefArg v);
00222 newtRef     NewtGetStringSlot(newtRefArg r, uint32_t p);
00223 newtRef     NewtSetStringSlot(newtRefArg r, uint32_t p, newtRefArg v);
00224 newtRef     NewtSlotsGetSlot(newtRefArg r, uint32_t p);
00225 newtRef     NewtSlotsSetSlot(newtRefArg r, uint32_t p, newtRefArg v);
00226 newtRef     NewtSlotsInsertSlot(newtRefArg r, uint32_t p, newtRefArg v);
00227 newtRef     NewtGetArraySlot(newtRefArg r, uint32_t p);
00228 newtRef     NewtSetArraySlot(newtRefArg r, uint32_t p, newtRefArg v);
00229 newtRef     NewtInsertArraySlot(newtRefArg r, uint32_t p, newtRefArg v);
00230 newtRef     NewtGetFrameSlot(newtRefArg r, uint32_t p);
00231 newtRef     NewtSetFrameSlot(newtRefArg r, uint32_t p, newtRefArg v);
00232 newtRef     NewtGetFrameKey(newtRefArg inFrame, uint32_t inIndex);
00233 
00234 newtRef     NewtARef(newtRefArg r, uint32_t p);
00235 newtRef     NewtSetARef(newtRefArg r, uint32_t p, newtRefArg v);
00236 
00237 bool        NewtAssignment(newtRefArg start, newtRefArg name, newtRefArg value);
00238 bool        NewtLexicalAssignment(newtRefArg start, newtRefArg name, newtRefArg value);
00239 bool        NewtHasLexical(newtRefArg start, newtRefArg name);
00240 bool        NewtHasVariable(newtRefArg r, newtRefArg name);
00241 
00242 void *      NewtRefToNativeFn(newtRefArg r);
00243 // old style
00244 newtRef     NewtMakeNativeFn0(void * funcPtr, uint32_t numArgs, bool indefinite, char * doc);
00245 newtRef     NewtDefGlobalFn0(newtRefArg sym, void * funcPtr, uint32_t numArgs, bool indefinite, char * doc);
00246 // new style
00247 newtRef     NewtMakeNativeFunc0(void * funcPtr, uint32_t numArgs, bool indefinite, char * doc);
00248 newtRef     NewtDefGlobalFunc0(newtRefArg sym, void * funcPtr, uint32_t numArgs, bool indefinite, char * doc);
00249 
00250 bool        NewtHasSubclass(newtRefArg sub, newtRefArg supr);
00251 bool        NewtIsSubclass(newtRefArg sub, newtRefArg supr);
00252 bool        NewtIsInstance(newtRefArg obj, newtRefArg r);
00253 
00254 newtRef     NewtStrCat(newtRefArg r, char * s);
00255 newtRef     NewtStrCat2(newtRefArg r, char * s, uint32_t slen);
00256 
00257 newtRef     NewtGetEnv(const char * s);
00258 
00259 
00260 #ifdef __cplusplus
00261 }
00262 #endif
00263 
00264 
00265 #endif /* NEWTOBJ_H */
00266 
00267 

NEWT/0に対してThu Nov 23 16:50:43 2006に生成されました。  doxygen 1.5.0