1# [MAIN] #default section name
2
3# MMD_EQ ... MMD_STRCMP must be in one block
4# see src/multidispatch.c
5
6# INPLACE MMD variant must always be normal op + 1
7# NOTE: VTABLE functions that modify their PMC must be marked with :write to
8# work properly with the generational GC.
9
10void init() :write
11# init must be first for JITed vtable meths
12void init_pmc(PMC* initializer) :write
13PMC* instantiate(PMC* sig)
14void morph(PMC* type) :write
15void mark()
16void destroy()
17PMC* get_namespace()
18
19INTVAL type()
20
21STRING* name()
22
23PMC* clone()
24PMC* clone_pmc(PMC* args)
25
26PMC* find_method(STRING* method_name)
27
28[FETCH]
29INTVAL get_integer()
30INTVAL get_integer_keyed(PMC* key)
31INTVAL get_integer_keyed_int(INTVAL key)
32INTVAL get_integer_keyed_str(STRING* key)
33
34FLOATVAL get_number()
35FLOATVAL get_number_keyed(PMC* key)
36FLOATVAL get_number_keyed_int(INTVAL key)
37FLOATVAL get_number_keyed_str(STRING* key)
38
39STRING* get_string()
40STRING* get_repr()
41STRING* get_string_keyed(PMC* key)
42STRING* get_string_keyed_int(INTVAL key)
43STRING* get_string_keyed_str(STRING* key)
44
45INTVAL get_bool()
46
47PMC* get_pmc()
48PMC* get_pmc_keyed(PMC* key)
49PMC* get_pmc_keyed_int(INTVAL key)
50PMC* get_pmc_keyed_str(STRING* key)
51
52void* get_pointer()
53void* get_pointer_keyed(PMC* key)
54void* get_pointer_keyed_int(INTVAL key)
55void* get_pointer_keyed_str(STRING* key)
56
57[STORE] :write
58void set_integer_native(INTVAL value)
59void set_integer_keyed(PMC* key, INTVAL value)
60void set_integer_keyed_int(INTVAL key, INTVAL value)
61void set_integer_keyed_str(STRING* key, INTVAL value)
62
63void set_number_native(FLOATVAL value)
64void set_number_keyed(PMC* key, FLOATVAL value)
65void set_number_keyed_int(INTVAL key, FLOATVAL value)
66void set_number_keyed_str(STRING* key, FLOATVAL value)
67
68void set_string_native(STRING* value)
69void assign_string_native(STRING* value)
70void set_string_keyed(PMC* key, STRING* value)
71void set_string_keyed_int(INTVAL key, STRING* value)
72void set_string_keyed_str(STRING* key, STRING* value)
73
74void set_bool(INTVAL value)
75
76void set_pmc(PMC* value)
77void assign_pmc(PMC* value)
78void set_pmc_keyed(PMC* key, PMC* value)
79void set_pmc_keyed_int(INTVAL key, PMC* value)
80void set_pmc_keyed_str(STRING* key, PMC* value)
81
82void set_pointer(void* value)
83void set_pointer_keyed(PMC* key, void* value)
84void set_pointer_keyed_int(INTVAL key, void* value)
85void set_pointer_keyed_str(STRING* key, void* value)
86
87[FETCHSIZE]
88INTVAL elements()
89
90[POP] :write
91INTVAL pop_integer()
92FLOATVAL pop_float()
93STRING* pop_string()
94PMC* pop_pmc()
95
96[PUSH] :write
97void push_integer(INTVAL value)
98void push_float(FLOATVAL value)
99void push_string(STRING* value)
100void push_pmc(PMC* value)
101
102[SHIFT] :write
103INTVAL shift_integer()
104FLOATVAL shift_float()
105STRING* shift_string()
106PMC* shift_pmc()
107
108[UNSHIFT] :write
109void unshift_integer(INTVAL value)
110void unshift_float(FLOATVAL value)
111void unshift_string(STRING* value)
112void unshift_pmc(PMC* value)
113
114## void splice ???
115
116[SPLICE] :write
117void splice(PMC* value, INTVAL offset, INTVAL count)
118
119# They are returning copies, but some methods upgrade their types
120[MATH]
121PMC* add(PMC* value, PMC* dest)
122PMC* add_int(INTVAL value, PMC* dest)
123PMC* add_float(FLOATVAL value, PMC* dest)
124
125void i_add(PMC* value) :write
126void i_add_int(INTVAL value) :write
127void i_add_float(FLOATVAL value) :write
128
129PMC* subtract(PMC* value, PMC* dest)
130PMC* subtract_int(INTVAL value, PMC* dest)
131PMC* subtract_float(FLOATVAL value, PMC* dest)
132
133void i_subtract(PMC* value) :write
134void i_subtract_int(INTVAL value) :write
135void i_subtract_float(FLOATVAL value) :write
136
137PMC* multiply(PMC* value, PMC* dest)
138PMC* multiply_int(INTVAL value, PMC* dest)
139PMC* multiply_float(FLOATVAL value, PMC* dest)
140
141void i_multiply(PMC* value) :write
142void i_multiply_int(INTVAL value) :write
143void i_multiply_float(FLOATVAL value) :write
144
145PMC* divide(PMC* value, PMC* dest)
146PMC* divide_int(INTVAL value, PMC* dest)
147PMC* divide_float(FLOATVAL value, PMC* dest)
148
149void i_divide(PMC* value) :write
150void i_divide_int(INTVAL value) :write
151void i_divide_float(FLOATVAL value) :write
152
153PMC* floor_divide(PMC* value, PMC* dest)
154PMC* floor_divide_int(INTVAL value, PMC* dest)
155PMC* floor_divide_float(FLOATVAL value, PMC* dest)
156
157void i_floor_divide(PMC* value) :write
158void i_floor_divide_int(INTVAL value) :write
159void i_floor_divide_float(FLOATVAL value) :write
160
161PMC* modulus(PMC* value, PMC* dest)
162PMC* modulus_int(INTVAL value, PMC* dest)
163PMC* modulus_float(FLOATVAL value, PMC* dest)
164
165void i_modulus(PMC* value) :write
166void i_modulus_int(INTVAL value) :write
167void i_modulus_float(FLOATVAL value) :write
168
169void increment() :write
170void decrement() :write
171
172PMC* absolute(PMC* dest)
173void i_absolute() :write
174
175PMC* neg(PMC* dest)
176void i_neg() :write
177
178[CMP]
179INTVAL is_equal(PMC* value)
180INTVAL is_equal_num(PMC* value)
181INTVAL is_equal_string(PMC* value)
182
183INTVAL is_same(PMC* value)
184
185INTVAL cmp(PMC* value)
186INTVAL cmp_num(PMC* value)
187INTVAL cmp_string(PMC* value)
188PMC* cmp_pmc(PMC* value)
189
190[STRING]
191PMC* concatenate(PMC* value, PMC* dest)
192PMC* concatenate_str(STRING* value, PMC* dest)
193
194void i_concatenate(PMC* value) :write
195void i_concatenate_str(STRING* value) :write
196
197PMC* repeat(PMC* value, PMC* dest)
198PMC* repeat_int(INTVAL value, PMC* dest)
199
200void i_repeat(PMC* value) :write
201void i_repeat_int(INTVAL value) :write
202
203STRING* substr(INTVAL offset, INTVAL length)
204
205[EXISTS]
206INTVAL exists_keyed(PMC* key)
207INTVAL exists_keyed_int(INTVAL key)
208INTVAL exists_keyed_str(STRING* key)
209
210[MAIN]
211INTVAL defined()
212INTVAL defined_keyed(PMC* key)
213INTVAL defined_keyed_int(INTVAL key)
214INTVAL defined_keyed_str(STRING* key)
215
216[DELETE] :write
217void delete_keyed(PMC* key)
218void delete_keyed_int(INTVAL key)
219void delete_keyed_str(STRING* key)
220
221[MAIN]
222PMC* get_iter()
223INTVAL hashvalue()
224
225opcode_t* invoke(void* next)
226
227INTVAL does_pmc(PMC* role)
228INTVAL does(STRING* role)
229
230INTVAL isa_pmc(PMC* _class)
231INTVAL isa(STRING* _class)
232
233PMC* get_attr_str(STRING* idx)
234PMC* get_attr_keyed(PMC* key, STRING* idx)
235void set_attr_str(STRING* idx, PMC* value) :write
236void set_attr_keyed(PMC* key, STRING* idx, PMC* value) :write
237
238PMC* get_class()
239
240void add_parent(PMC* parent) :write
241void remove_parent(PMC* parent) :write
242
243void add_role(PMC* role) :write
244void remove_role(PMC* role) :write
245
246void add_attribute(STRING* name, PMC* type) :write
247void remove_attribute(STRING* name) :write
248
249void add_method(STRING* method_name, PMC* sub_pmc) :write
250void remove_method(STRING* method_name) :write
251
252void add_vtable_override(STRING* vtable_name, PMC* sub_pmc) :write
253void remove_vtable_override(STRING* vtable_name) :write
254
255PMC* inspect()
256PMC* inspect_str(STRING* what)
257
258void freeze(PMC* info)
259void thaw(PMC* info) :write
260void thawfinish(PMC* info) :write
261void visit(PMC* info)
262
263void init_int(INTVAL initializer) :write
264void share() :write
265