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