New doc system done for core
[io.git] / libs / iovm / source / IoMessage.h
blobe90e8d76d5168e5b79f165e00a10ce8eda1a3ce0
2 //metadoc Message copyright Steve Dekorte 2002
3 //metadoc Message license BSD revised
5 #ifndef IOMESSAGE_DEFINED
6 #define IOMESSAGE_DEFINED 1
8 #include "IoVMApi.h"
9 #include "Common.h"
10 #include "List.h"
11 #include "UArray.h"
12 #include "IoTag.h"
13 #include "IoObject_struct.h"
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
19 #define MESSAGE_STOP_STATUS_NORMAL 0
20 #define MESSAGE_STOP_STATUS_BREAK 1
21 #define MESSAGE_STOP_STATUS_CONTINUE 2
22 #define MESSAGE_STOP_STATUS_RETURN 4
23 #define MESSAGE_STOP_STATUS_EOL 8
25 #define ISMESSAGE(self) IoObject_hasCloneFunc_(self, (IoTagCloneFunc *)IoMessage_rawClone)
27 #if !defined(IoSymbol_DEFINED)
28 #define IoSymbol_DEFINED
29 typedef IoObject IoSymbol;
30 #endif
32 typedef IoObject IoMessage;
34 //#define IOMESSAGE_HASPREV
36 typedef struct
38 IoSymbol *name;
39 List *args;
40 #ifdef IOMESSAGE_HASPREV
41 IoMessage *previous; // unused for now
42 #endif
43 IoMessage *next;
44 IoObject *cachedResult;
46 // debugging info
47 //int charNumber;
48 int lineNumber;
49 IoSymbol *label;
50 } IoMessageData;
52 #define IOMESSAGEDATA(self) ((IoMessageData *)IoObject_dataPointer(self))
54 // basics
56 IOVM_API IoMessage *IoMessage_proto(void *state);
57 IOVM_API IoMessage *IoMessage_rawClone(IoMessage *m);
58 IOVM_API IoMessage *IoMessage_new(void *state);
59 IOVM_API void IoMessage_copy_(IoMessage *self, IoMessage *other);
60 IOVM_API IoMessage *IoMessage_deepCopyOf_(IoMessage *m);
61 IOVM_API IoMessage *IoMessage_newWithName_(void *state, IoSymbol *symbol);
62 IOVM_API IoMessage *IoMessage_newWithName_label_(void *state, IoSymbol *symbol, IoSymbol *label);
63 IOVM_API IoMessage *IoMessage_newWithName_returnsValue_(void *state, IoSymbol *symbol, IoObject *v);
64 IOVM_API IoMessage *IoMessage_newWithName_andCachedArg_(void *state, IoSymbol *symbol, IoObject *v);
66 IOVM_API void IoMessage_mark(IoMessage *self);
67 IOVM_API void IoMessage_free(IoMessage *self);
69 IOVM_API IoSymbol *IoMessage_rawLabel(IoMessage *self);
70 IOVM_API int IoMessage_rawLineNumber(IoMessage *self);
71 IOVM_API int IoMessage_rawCharNumber(IoMessage *self);
72 IOVM_API void IoMessage_label_(IoMessage *self, IoSymbol *ioSymbol); // sets label for children too
73 IOVM_API void IoMessage_rawSetLineNumber_(IoMessage *self, int n);
74 IOVM_API void IoMessage_rawSetCharNumber_(IoMessage *self, int n);
75 IOVM_API void IoMessage_rawCopySourceLocation(IoMessage *self, IoMessage *other);
76 IOVM_API List *IoMessage_rawArgList(IoMessage *self);
77 IOVM_API unsigned char IoMessage_needsEvaluation(IoMessage *self);
79 IOVM_API void IoMessage_addCachedArg_(IoMessage *self, IoObject *v);
80 IOVM_API void IoMessage_setCachedArg_to_(IoMessage *self, int n, IoObject *v);
81 IOVM_API void IoMessage_setCachedArg_toInt_(IoMessage *self, int n, int anInt);
82 IOVM_API void IoMessage_cachedResult_(IoMessage *self, IoObject *v);
84 IOVM_API IoObject *IoMessage_lineNumber(IoMessage *self, IoObject *locals, IoMessage *m);
85 IOVM_API IoObject *IoMessage_characterNumber(IoMessage *self, IoObject *locals, IoMessage *m);
86 IOVM_API IoObject *IoMessage_label(IoMessage *self, IoObject *locals, IoMessage *m);
88 // perform
90 IOVM_API IoObject *IoMessage_doInContext(IoMessage *self, IoObject *locals, IoMessage *m);
91 IOVM_API IoObject *IoMessage_locals_performOn_(IoMessage *self, IoObject *locals, IoObject *target);
93 // args
95 IOVM_API IoObject *IoMessage_locals_valueArgAt_(IoMessage *self, IoObject *locals, int n);
96 IOVM_API IoObject *IoMessage_locals_valueOrEvalArgAt_(IoMessage *self, IoObject *locals, int n);
97 IOVM_API void IoMessage_assertArgCount_receiver_(IoMessage *self, int n, IoObject *receiver);
98 IOVM_API int IoMessage_argCount(IoMessage *self);
100 IOVM_API void IoMessage_locals_numberArgAt_errorForType_(
101 IoMessage *self,
102 IoObject *locals,
103 int n,
104 const char *typeName);
106 IOVM_API IoObject *IoMessage_locals_numberArgAt_(IoMessage *self, IoObject *locals, int n);
107 IOVM_API int IoMessage_locals_intArgAt_(IoMessage *self, IoObject *locals, int n);
108 IOVM_API long IoMessage_locals_longArgAt_(IoMessage *self, IoObject *locals, int n);
109 IOVM_API size_t IoMessage_locals_sizetArgAt_(IoMessage *self, IoObject *locals, int n);
110 IOVM_API double IoMessage_locals_doubleArgAt_(IoMessage *self, IoObject *locals, int n);
111 IOVM_API float IoMessage_locals_floatArgAt_(IoMessage *self, IoObject *locals, int n);
113 IOVM_API IoObject *IoMessage_locals_symbolArgAt_(IoMessage *self, IoObject *locals, int n);
114 IOVM_API IoObject *IoMessage_locals_seqArgAt_(IoMessage *self, IoObject *locals, int n);
115 IOVM_API IoObject *IoMessage_locals_mutableSeqArgAt_(IoMessage *self, IoObject *locals, int n);
116 IOVM_API char *IoMessage_locals_cStringArgAt_(IoMessage *self, IoObject *locals, int n);
117 IOVM_API IoObject *IoMessage_locals_valueAsStringArgAt_(IoMessage *self, IoObject *locals, int n);
119 IOVM_API IoObject *IoMessage_locals_blockArgAt_(IoMessage *self, IoObject *locals, int n);
120 IOVM_API IoObject *IoMessage_locals_dateArgAt_(IoMessage *self, IoObject *locals, int n);
121 IOVM_API IoObject *IoMessage_locals_mapArgAt_(IoMessage *self, IoObject *locals, int n);
122 IOVM_API IoObject *IoMessage_locals_messageArgAt_(IoMessage *self, IoObject *locals, int n);
123 IOVM_API IoObject *IoMessage_locals_listArgAt_(IoMessage *self, IoObject *locals, int n);
125 // printing
127 IOVM_API void IoMessage_print(IoMessage *self);
128 IOVM_API void IoMessage_printWithReturn(IoMessage *self);
129 IOVM_API UArray *IoMessage_description(IoMessage *self);
130 IOVM_API UArray *IoMessage_descriptionJustSelfAndArgs(IoMessage *self); /* caller must io_free returned */
131 IOVM_API void IoMessage_appendDescriptionTo_follow_(IoMessage *self, UArray *ba, int follow);
132 IOVM_API IoObject *IoMessage_asString(IoMessage *self, IoObject *locals, IoMessage *m);
134 // primitive methods
136 IOVM_API IoObject *IoMessage_clone(IoMessage *self, IoObject *locals, IoMessage *m);
137 IOVM_API IoObject *IoMessage_protoName(IoMessage *self, IoObject *locals, IoMessage *m);
138 IOVM_API IoObject *IoMessage_protoSetName(IoMessage *self, IoObject *locals, IoMessage *m);
139 IOVM_API IoObject *IoMessage_descriptionString(IoMessage *self, IoObject *locals, IoMessage *m);
141 // next
143 IOVM_API IoObject *IoMessage_next(IoMessage *self, IoObject *locals, IoMessage *m);
144 IOVM_API IoMessage *IoMessage_rawNext(IoMessage *self);
146 IOVM_API IoObject *IoMessage_setNext(IoMessage *self, IoObject *locals, IoMessage *m);
147 IOVM_API void IoMessage_rawSetNext(IoMessage *self, IoMessage *m);
149 IOVM_API IoObject *IoMessage_isEOL(IoMessage *self, IoObject *locals, IoMessage *m);
150 IOVM_API int IoMessage_rawIsEOL(IoMessage *self);
152 IOVM_API IoObject *IoMessage_nextIgnoreEOLs(IoMessage *self, IoObject *locals, IoMessage *m);
153 IOVM_API IoMessage *IoMessage_rawNextIgnoreEOLs(IoMessage *self);
154 IOVM_API IoObject *IoMessage_last(IoMessage *self, IoObject *locals, IoMessage *m);
155 IOVM_API IoMessage *IoMessage_rawLast(IoMessage *self);
156 IOVM_API IoObject *IoMessage_lastBeforeEOL(IoMessage *self, IoObject *locals, IoMessage *m);
157 IOVM_API IoMessage *IoMessage_rawLastBeforeEOL(IoMessage *self);
159 // previous
161 IOVM_API IoObject *IoMessage_previous(IoMessage *self, IoObject *locals, IoMessage *m);
162 IOVM_API IoMessage *IoMessage_rawPrevious(IoMessage *self);
164 IOVM_API IoObject *IoMessage_setPrevious(IoMessage *self, IoObject *locals, IoMessage *m);
165 IOVM_API void IoMessage_rawSetPrevious(IoMessage *self, IoMessage *m);
167 IOVM_API IoObject *IoMessage_argAt(IoMessage *self, IoObject *locals, IoMessage *m);
168 IOVM_API IoObject *IoMessage_arguments(IoMessage *self, IoObject *locals, IoMessage *m);
169 IOVM_API IoObject *IoMessage_setArguments(IoMessage *self, IoObject *locals, IoMessage *m);
170 IOVM_API IoObject *IoMessage_appendArg(IoMessage *self, IoObject *locals, IoMessage *m);
171 IOVM_API IoObject *IoMessage_appendCachedArg(IoMessage *self, IoObject *locals, IoMessage *m);
172 IOVM_API IoObject *IoMessage_argCount_(IoMessage *self, IoObject *locals, IoMessage *m);
173 IOVM_API IoObject *IoMessage_cachedResult(IoMessage *self, IoObject *locals, IoMessage *m);
174 IOVM_API IoObject *IoMessage_setCachedResult(IoMessage *self, IoObject *locals, IoMessage *m);
175 IOVM_API IoObject *IoMessage_removeCachedResult(IoMessage *self, IoObject *locals, IoMessage *m);
176 IOVM_API IoObject *IoMessage_hasCachedResult(IoMessage *self, IoObject *locals, IoMessage *m);
178 IOVM_API IoObject *IoMessage_setLineNumber(IoMessage *self, IoObject *locals, IoMessage *m);
179 IOVM_API IoObject *IoMessage_setCharacterNumber(IoMessage *self, IoObject *locals, IoMessage *m);
180 IOVM_API IoObject *IoMessage_setLabel(IoMessage *self, IoObject *locals, IoMessage *m);
182 IOVM_API IoObject *IoMessage_fromString(IoMessage *self, IoObject *locals, IoMessage *m);
183 IOVM_API IoObject *IoMessage_argsEvaluatedIn(IoMessage *self, IoObject *locals, IoMessage *m);
184 IOVM_API IoObject *IoMessage_evaluatedArgs(IoMessage *self, IoObject *locals, IoMessage *m);
186 IOVM_API void IoMessage_foreachArgs(IoMessage *self,
187 IoObject *object,
188 IoSymbol **indexSlotName,
189 IoSymbol **valueSlotName,
190 IoMessage **doMessage);
192 IOVM_API IoMessage *IoMessage_asMessageWithEvaluatedArgs(IoMessage *self, IoObject *locals, IoMessage *m);
194 // ------------------------------
196 #include "IoMessage_inline.h"
197 #include "IoMessage_parser.h"
199 //IoSymbol *IoMessage_name(IoMessage *self);
201 #define IoMessage_name(self) (((IoMessageData *)IoObject_dataPointer(self))->name)
202 #define IoMessage_rawCachedResult(self) (((IoMessageData *)IoObject_dataPointer(self))->cachedResult)
204 IOVM_API void IoMessage_addArg_(IoMessage *self, IoMessage *m);
205 IOVM_API IoMessage *IoMessage_rawArgAt_(IoMessage *self, int n);
206 IOVM_API List *IoMessage_rawArgs(IoMessage *self);
208 IOVM_API UArray *IoMessage_asMinimalStackEntryDescription(IoMessage *self);
210 #ifdef __cplusplus
212 #endif
213 #endif