2 //metadoc Message copyright Steve Dekorte 2002
3 //metadoc Message license BSD revised
5 #ifndef IOMESSAGE_DEFINED
6 #define IOMESSAGE_DEFINED 1
13 #include "IoObject_struct.h"
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
;
32 typedef IoObject IoMessage
;
34 //#define IOMESSAGE_HASPREV
40 #ifdef IOMESSAGE_HASPREV
41 IoMessage
*previous
; // unused for now
44 IoObject
*cachedResult
;
52 #define IOMESSAGEDATA(self) ((IoMessageData *)IoObject_dataPointer(self))
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
);
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
);
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_(
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
);
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
);
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
);
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
);
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
,
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
);