/*#io docCopyright("Steve Dekorte", 2002) docLicense("BSD revised") */ #ifndef OBJECT_DEFINED #define OBJECT_DEFINED 1 #include "IoVMApi.h" #include "Common.h" #include "PHash.h" #ifdef __cplusplus extern "C" { #endif #define IoObject_clean(self) PHash_clean(self->slots); #define IOREF(value) IoObject_addingRef_((IoObject *)self, (IoObject *)value) #include "IoObject_struct.h" #include "IoStore.h" #include "IoMessage.h" #include "IoSeq.h" //#include "IoCoroutine.h" IOVM_API IoObject *IoObject_proto(void *state); IOVM_API IoObject *IoObject_protoFinish(void *state); IOVM_API IoObject *IoObject_localsProto(void *state); IOVM_API IoObject *IOCLONE(IoObject *self); IOVM_API IoObject *IoObject_rawClone(IoObject *self); IOVM_API IoObject *IoObject_justClone(IoObject *self); IOVM_API IoObject *IoObject_rawClonePrimitive(IoObject *self); IOVM_API IoObject *IoObject_new(void *state); IOVM_API IoObject *IoObject_addMethod_(IoObject *self, IoSymbol *slotName, IoMethodFunc *fp); IOVM_API void IoObject_addMethodTable_(IoObject *self, IoMethodTable *methodTable); IOVM_API void IoObject_dealloc(IoObject *self); IOVM_API void IoObject_free(IoObject *self); // inheritance IOVM_API void IoObject_setupProtos(IoObject *self); IOVM_API int IoObject_hasProtos(IoObject *self); IOVM_API int IoObject_rawProtosCount(IoObject *self); IOVM_API void IoObject_rawAppendProto_(IoObject *self, IoObject *p); IOVM_API void IoObject_rawPrependProto_(IoObject *self, IoObject *p); IOVM_API void IoObject_rawRemoveProto_(IoObject *self, IoObject *p); IOVM_API void IoObject_rawRemoveAllProtos(IoObject *self); IOVM_API void IoObject_rawSetProto_(IoObject *self, IoObject *proto); IOVM_API IoObject *IoObject_objectProto(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_setProto(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_setProtos(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_appendProto(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_prependProto(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_removeProto(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_removeAllProtos(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protos(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API unsigned int IoObject_rawHasProto_(IoObject *self, IoObject *p); // slots IOVM_API void IoObject_createSlots(IoObject *self); IOVM_API void IoObject_setSlot_to_(IoObject *self, IoSymbol *slotName, IoObject *value); IOVM_API IoObject *IoObject_getSlot_(IoObject *self, IoSymbol *slotName); IOVM_API IoObject *IoObject_symbolGetSlot_(IoObject *self, IoSymbol *slotName); IOVM_API IoObject *IoObject_seqGetSlot_(IoObject *self, IoSymbol *slotName); IOVM_API double IoObject_doubleGetSlot_(IoObject *self, IoSymbol *slotName); //IoObject *IoObject_objectWithSlotValue_(IoObject *self, IoObject *slotValue); IOVM_API void IoObject_removeSlot_(IoObject *self, IoSymbol *slotName); // perform and activate IOVM_API IoObject *IoObject_activate(IoObject *self, IoObject *target, IoObject *locals, IoMessage *m, IoObject *slotContext); IOVM_API IoObject *IoObject_perform(IoObject *self, IoObject *locals, IoMessage *m); //IoObject *IoObject_forward(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_localsForward(IoObject *self, IoObject *locals, IoMessage *m); // tag functions IOVM_API int IoObject_compare(IoObject *self, IoObject *v); IOVM_API int IoObject_defaultCompare(IoObject *self, IoObject *v); IOVM_API const char *IoObject_name(IoObject *self); IOVM_API void IoObject_print(IoObject *self); // memory IOVM_API size_t IoObject_memorySize(IoObject *self); IOVM_API void IoObject_compact(IoObject *self); IOVM_API char *IoObject_markColorName(IoObject *self); IOVM_API void IoObject_show(IoObject *self); // proto IOVM_API IoObject *IoObject_clone(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_cloneWithoutInit(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_shallowCopy(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_duplicate(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_initClone_(IoObject *self, IoObject *locals, IoMessage *m, IoObject *newObject); // printing IOVM_API IoObject *IoObject_protoPrint(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoWrite(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoWriteLn(IoObject *self, IoObject *locals, IoMessage *m); // reflection IOVM_API IoObject *IoObject_protoPerform(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoPerformWithArgList(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoSet_to_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoSetSlotWithType(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_localsUpdateSlot(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoUpdateSlot_to_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoGetSlot_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoGetLocalSlot_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoHasLocalSlot(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoHasProto_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoRemoveSlot(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoSlotNames(IoObject *self, IoObject *locals, IoMessage *m); //IoObject *IoObject_forward_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_super(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_contextWithSlot(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_ancestorWithSlot(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_doMessage(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_self(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_locals(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_thisMessage(IoObject *self, IoObject *locals, IoMessage *m); // memory IOVM_API IoObject *IoObject_memorySizeMethod(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_compactMethod(IoObject *self, IoObject *locals, IoMessage *m); // description IOVM_API void IoObject_defaultPrint(IoObject *self); IOVM_API IoObject *IoObject_type(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_lobbyPrint(IoObject *self, IoObject *locals, IoMessage *m); // logic IOVM_API IoObject *IoObject_and(IoObject *self, IoObject *locals, IoMessage *m); // math IOVM_API IoObject *IoObject_subtract(IoObject *self, IoObject *locals, IoMessage *m); // comparison IOVM_API int IoObject_sortCompare(IoObject **self, IoObject **v); IOVM_API IoObject *IoObject_isIdenticalTo(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_equals(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_notEquals(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_protoCompare(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_isLessThan_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_isLessThanOrEqualTo_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_isGreaterThan_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_isGreaterThanOrEqualTo_(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_isNil(IoObject *self, IoObject *locals, IoMessage *m); // meta IOVM_API IoObject *IoObject_evalArg(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_evalArgAndReturnNil(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_evalArgAndReturnSelf(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_uniqueId(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_do(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_message(IoObject *self, IoObject *locals, IoMessage *m); // compiler IOVM_API IoObject *IoObject_rawDoString_label_(IoObject *self, IoSymbol *string, IoSymbol *label); IOVM_API IoObject *IoObject_doString(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_doFile(IoObject *self, IoObject *locals, IoMessage *m); //IoObject *IoObject_unpack(IoObject *self, IoObject *locals, IoMessage *m); // activatable IOVM_API IoObject *IoObject_setIsActivatable(IoObject *self, IoObject *locals, IoMessage *m); IOVM_API IoObject *IoObject_isActivatable(IoObject *self, IoObject *locals, IoMessage *m); // eval IOVM_API IoObject *IoObject_rawDoMessage(IoObject *self, IoMessage *m); IOVM_API IoObject *IoObject_eval(IoObject *self, IoMessage *m, IoObject *locals); IOVM_API IoObject *IoObject_argIsActivationRecord(IoObject *self, IoMessage *m, IoObject *locals); IOVM_API IoObject *IoObject_argIsCall(IoObject *self, IoMessage *m, IoObject *locals); IOVM_API ByteArray *IoObject_rawGetByteArraySlot(IoObject *self, IoObject *locals, IoMessage *m, IoSymbol *slotName); IOVM_API ByteArray *IoObject_rawGetMutableByteArraySlot(IoObject *self, IoObject *locals, IoMessage *m, IoSymbol *slotName); // free listeners --------------------------------------------- IOVM_API void IoObject_addListener_(IoObject *self, void *listener); IOVM_API void IoObject_removeListener_(IoObject *self, void *listener); #include "IoObject_flow.h" #include "IoObject_inline.h" #ifdef __cplusplus } #endif #endif