1.1 --- a/templates/native.c Fri Dec 02 22:26:53 2016 +0100
1.2 +++ b/templates/native.c Sat Dec 03 01:23:18 2016 +0100
1.3 @@ -503,180 +503,6 @@
1.4 return __builtins___none_None;
1.5 }
1.6
1.7 -__attr __fn_native__dict_init(__attr __args[])
1.8 -{
1.9 - __attr * const size = &__args[1];
1.10 - /* size.__data__ interpreted as int */
1.11 - unsigned int n = __load_via_object(size->value, __pos___data__).intvalue;
1.12 - __mapping *data = __new_mapping(n);
1.13 - __attr attr = {0, .mapvalue=data};
1.14 -
1.15 - /* Return the __data__ attribute. */
1.16 - return attr;
1.17 -}
1.18 -
1.19 -__attr __fn_native__dict_items(__attr __args[])
1.20 -{
1.21 - __attr * const _data = &__args[1];
1.22 - /* _data interpreted as dict */
1.23 - __mapping *data = _data->mapvalue;
1.24 -
1.25 - return __new_int(data->size);
1.26 -}
1.27 -
1.28 -__attr __fn_native__dict_buckets(__attr __args[])
1.29 -{
1.30 - __attr * const _data = &__args[1];
1.31 - /* _data interpreted as dict */
1.32 - __mapping *data = _data->mapvalue;
1.33 -
1.34 - return __new_int(data->capacity);
1.35 -}
1.36 -
1.37 -__attr __fn_native__dict_bucketsize(__attr __args[])
1.38 -{
1.39 - __attr * const _data = &__args[1];
1.40 - __attr * const index = &__args[2];
1.41 - /* _data interpreted as dict */
1.42 - __mapping *data = _data->mapvalue;
1.43 - /* index.__data__ interpreted as int */
1.44 - int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.45 -
1.46 - /* Return size of bucket k. */
1.47 - return __new_int(data->keys[k]->size);
1.48 -}
1.49 -
1.50 -__attr __fn_native__dict_keys(__attr __args[])
1.51 -{
1.52 - __attr * const _data = &__args[1];
1.53 - /* _data interpreted as dict */
1.54 - __mapping *data = _data->mapvalue;
1.55 - unsigned int k, i, j, size = 0;
1.56 - __fragment *f;
1.57 -
1.58 - /* Count the number of keys. */
1.59 - for (k = 0; k < data->capacity; k++)
1.60 - size += data->keys[k]->size;
1.61 -
1.62 - /* Create a fragment for the keys. */
1.63 - f = __new_fragment(size);
1.64 -
1.65 - /* Populate the fragment with the keys. */
1.66 - for (j = 0, k = 0; k < data->capacity; k++)
1.67 - for (i = 0; i < data->keys[k]->size; i++, j++)
1.68 - f->attrs[j] = data->keys[k]->attrs[i];
1.69 - f->size = size;
1.70 -
1.71 - /* Return a list. */
1.72 - return __new_list(f);
1.73 -}
1.74 -
1.75 -__attr __fn_native__dict_values(__attr __args[])
1.76 -{
1.77 - __attr * const _data = &__args[1];
1.78 - /* _data interpreted as dict */
1.79 - __mapping *data = _data->mapvalue;
1.80 - unsigned int k, i, j, size = 0;
1.81 - __fragment *f;
1.82 -
1.83 - /* Count the number of values. */
1.84 - for (k = 0; k < data->capacity; k++)
1.85 - size += data->values[k]->size;
1.86 -
1.87 - /* Create a fragment for the values. */
1.88 - f = __new_fragment(size);
1.89 -
1.90 - /* Populate the fragment with the values. */
1.91 - for (j = 0, k = 0; k < data->capacity; k++)
1.92 - for (i = 0; i < data->values[k]->size; i++, j++)
1.93 - f->attrs[j] = data->values[k]->attrs[i];
1.94 - f->size = size;
1.95 -
1.96 - /* Return a list. */
1.97 - return __new_list(f);
1.98 -}
1.99 -
1.100 -__attr __fn_native__dict_key(__attr __args[])
1.101 -{
1.102 - __attr * const _data = &__args[1];
1.103 - __attr * const index = &__args[2];
1.104 - __attr * const element = &__args[3];
1.105 - /* _data interpreted as dict */
1.106 - __mapping *data = _data->mapvalue;
1.107 - /* index.__data__ interpreted as int */
1.108 - int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.109 - /* element.__data__ interpreted as int */
1.110 - int i = __load_via_object(element->value, __pos___data__).intvalue;
1.111 -
1.112 - /* Return key from bucket k, element i. */
1.113 - return data->keys[k]->attrs[i];
1.114 -}
1.115 -
1.116 -__attr __fn_native__dict_value(__attr __args[])
1.117 -{
1.118 - __attr * const _data = &__args[1];
1.119 - __attr * const index = &__args[2];
1.120 - __attr * const element = &__args[3];
1.121 - /* _data interpreted as dict */
1.122 - __mapping *data = _data->mapvalue;
1.123 - /* index.__data__ interpreted as int */
1.124 - int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.125 - /* element.__data__ interpreted as int */
1.126 - int i = __load_via_object(element->value, __pos___data__).intvalue;
1.127 -
1.128 - /* Return value from bucket k, element i. */
1.129 - return data->values[k]->attrs[i];
1.130 -}
1.131 -
1.132 -__attr __fn_native__dict_additem(__attr __args[])
1.133 -{
1.134 - __attr * const _data = &__args[1];
1.135 - __attr * const index = &__args[2];
1.136 - __attr * const key = &__args[3];
1.137 - __attr * const value = &__args[4];
1.138 - /* _data interpreted as dict */
1.139 - __mapping *data = _data->mapvalue;
1.140 - /* index.__data__ interpreted as int */
1.141 - int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.142 - unsigned int size = data->size;
1.143 - __fragment *keys = data->keys[k], *newkeys;
1.144 - __fragment *values = data->values[k], *newvalues;
1.145 -
1.146 - /* Append the item. */
1.147 - newkeys = __fragment_append(keys, key);
1.148 - newvalues = __fragment_append(values, value);
1.149 -
1.150 - /* Replace the fragments if appropriate. */
1.151 - if (newkeys != keys)
1.152 - data->keys[k] = newkeys;
1.153 - if (newvalues != values)
1.154 - data->values[k] = newvalues;
1.155 -
1.156 - data->size = size + 1;
1.157 - return __builtins___none_None;
1.158 -}
1.159 -
1.160 -__attr __fn_native__dict_setitem(__attr __args[])
1.161 -{
1.162 - __attr * const _data = &__args[1];
1.163 - __attr * const index = &__args[2];
1.164 - __attr * const element = &__args[3];
1.165 - __attr * const key = &__args[4];
1.166 - __attr * const value = &__args[5];
1.167 - /* _data interpreted as dict */
1.168 - __mapping *data = _data->mapvalue;
1.169 - /* index.__data__ interpreted as int */
1.170 - int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.171 - /* element.__data__ interpreted as int */
1.172 - int i = __load_via_object(element->value, __pos___data__).intvalue;
1.173 -
1.174 - /* Replace the item. */
1.175 - data->keys[k]->attrs[i] = *key;
1.176 - data->values[k]->attrs[i] = *value;
1.177 -
1.178 - return __builtins___none_None;
1.179 -}
1.180 -
1.181 __attr __fn_native__buffer_str(__attr __args[])
1.182 {
1.183 __attr * const _data = &__args[1];