Move class list handling to dedicated module (class).
[ilari-esolangs.git] / types.h
blob504468c4dc713b3587cde67cb7ae438ffbb10d63
1 #ifndef _types__h__included__
2 #define _types__h__included__
4 #include "class.h"
6 struct context;
7 struct message;
9 /* Object marked for garbage collection. */
10 #define OF_MARKED_FOR_GC 1
11 /* Already execuing message handler. */
12 #define OF_EXECUTING 2
13 /* on line, no non-whitespace yet. */
14 #define PS_INITIAL 0
15 /* Last was non-whitespace. */
16 #define PS_LAST_NOT_WS 1
17 /* Last was whitespace, non-ws seen. */
18 #define PS_WHITESPACE 2
19 /* Last was newline. */
20 #define PS_NEWLINE 3
21 /* Last was Carriage return. */
22 #define PS_LAST_CR 4
23 /* Start of line. */
24 #define PS2_INITIAL 0
25 /* On non-comment line. */
26 #define PS2_NOT_COMMENT 1
27 /* On comment line. */
28 #define PS2_COMMENT 2
30 /* Lock */
31 struct lock
35 /* Object. */
36 struct object
38 /* Flags. */
39 unsigned o_flags;
40 /* Class of object. */
41 struct class* o_class;
42 /* Special receiver. */
43 void (*o_special)(struct context* ctx, struct message* msg);
44 /* Previous object. */
45 struct object* o_prev;
46 /* Next object. */
47 struct object* o_next;
48 /* Fields. */
49 struct object* o_fields[0];
52 /* Message. */
53 struct message
55 /* Target object. */
56 struct object* m_target;
57 /* Previous message in queue. */
58 struct message* m_prev;
59 /* Next message in queue. */
60 struct message* m_next;
61 /* Number of parameters in message. */
62 size_t m_parameter_count;
63 /* Parameters contained. */
64 struct object* m_parameters[0];
67 /* Stack slot. */
68 struct stack
70 /* Object reference held. */
71 struct object* s_object;
72 /* Next stack slot. */
73 struct stack* s_next;
76 /* Vat. */
77 struct vat
79 /* Object list head. */
80 struct object* v_object_list;
81 /* Message queue head. */
82 struct message* v_msgq_head;
83 /* Message queue tail. */
84 struct message* v_msgq_tail;
85 /* Greatest locals count for any class. */
86 size_t v_max_locals;
87 /* Message queue lock. */
88 struct lock v_msgq_lock;
91 /* Context. */
92 struct context
94 /* Vat used. */
95 struct vat* c_vat;
96 /* Message being handled. */
97 struct message* c_message;
98 /* Stack top pointer. */
99 struct stack* c_stacktop;
100 /* Instruction pointer. */
101 size_t c_ip;
102 /* Number register value. */
103 size_t c_numreg;
104 /* Alternative mode flag. */
105 unsigned c_alt_flag;
106 /* Context lock. */
107 struct lock c_lock;
108 /* Locals. */
109 struct object* c_locals[0];
112 /* Parse context. */
113 struct parser
115 /* Line number. */
116 unsigned p_line;
117 /* Main parser status. */
118 unsigned p_status;
119 /* Secondary parser status. */
120 unsigned p_status2;
121 /* Backslash flag. */
122 unsigned p_backslash;
123 /* Number of class to parse. */
124 size_t p_classnum;
125 /* Number of fields. */
126 size_t p_fields;
127 /* Number of locals. */
128 size_t p_locals;
129 /* Max number of locals. */
130 size_t p_maxlocals;
131 /* Allocated size of instructions. */
132 size_t p_ins_allocated;
133 /* Real size of instructions. */
134 size_t p_ins_size;
135 /* Instructions. */
136 unsigned char* p_ins;
137 /* Field number. */
138 unsigned p_field;
139 /* Have value for field. 0 = no, 1 = zero, 2 = nonzero. */
140 unsigned p_have_field_value;
143 #endif