1.1 --- a/templates/native.c Fri Dec 02 00:55:45 2016 +0100
1.2 +++ b/templates/native.c Fri Dec 02 18:31:20 2016 +0100
1.3 @@ -522,7 +522,7 @@
1.4 /* self.__data__ interpreted as dict */
1.5 __mapping *data = __load_via_object(self->value, __pos___data__).mapvalue;
1.6 /* index.__data__ interpreted as int */
1.7 - int k = __load_via_object(index->value, __pos___data__).intvalue % __MAPPING_BUCKETS;
1.8 + int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.9
1.10 /* Return size of bucket k. */
1.11 return __new_int(data->keys[k]->size);
1.12 @@ -537,14 +537,14 @@
1.13 __fragment *f;
1.14
1.15 /* Count the number of keys. */
1.16 - for (k = 0; k < __MAPPING_BUCKETS; k++)
1.17 + for (k = 0; k < data->capacity; k++)
1.18 size += data->keys[k]->size;
1.19
1.20 /* Create a fragment for the keys. */
1.21 f = __new_fragment(size);
1.22
1.23 /* Populate the fragment with the keys. */
1.24 - for (j = 0, k = 0; k < __MAPPING_BUCKETS; k++)
1.25 + for (j = 0, k = 0; k < data->capacity; k++)
1.26 for (i = 0; i < data->keys[k]->size; i++, j++)
1.27 f->attrs[j] = data->keys[k]->attrs[i];
1.28 f->size = size;
1.29 @@ -562,14 +562,14 @@
1.30 __fragment *f;
1.31
1.32 /* Count the number of values. */
1.33 - for (k = 0; k < __MAPPING_BUCKETS; k++)
1.34 + for (k = 0; k < data->capacity; k++)
1.35 size += data->values[k]->size;
1.36
1.37 /* Create a fragment for the values. */
1.38 f = __new_fragment(size);
1.39
1.40 /* Populate the fragment with the values. */
1.41 - for (j = 0, k = 0; k < __MAPPING_BUCKETS; k++)
1.42 + for (j = 0, k = 0; k < data->capacity; k++)
1.43 for (i = 0; i < data->values[k]->size; i++, j++)
1.44 f->attrs[j] = data->values[k]->attrs[i];
1.45 f->size = size;
1.46 @@ -586,7 +586,7 @@
1.47 /* self.__data__ interpreted as dict */
1.48 __mapping *data = __load_via_object(self->value, __pos___data__).mapvalue;
1.49 /* index.__data__ interpreted as int */
1.50 - int k = __load_via_object(index->value, __pos___data__).intvalue % __MAPPING_BUCKETS;
1.51 + int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.52 /* element.__data__ interpreted as int */
1.53 int i = __load_via_object(element->value, __pos___data__).intvalue;
1.54
1.55 @@ -602,7 +602,7 @@
1.56 /* self.__data__ interpreted as dict */
1.57 __mapping *data = __load_via_object(self->value, __pos___data__).mapvalue;
1.58 /* index.__data__ interpreted as int */
1.59 - int k = __load_via_object(index->value, __pos___data__).intvalue % __MAPPING_BUCKETS;
1.60 + int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.61 /* element.__data__ interpreted as int */
1.62 int i = __load_via_object(element->value, __pos___data__).intvalue;
1.63
1.64 @@ -619,7 +619,8 @@
1.65 /* self.__data__ interpreted as dict */
1.66 __mapping *data = __load_via_object(self->value, __pos___data__).mapvalue;
1.67 /* index.__data__ interpreted as int */
1.68 - int k = __load_via_object(index->value, __pos___data__).intvalue % __MAPPING_BUCKETS;
1.69 + int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.70 + unsigned int size = data->size;
1.71 __fragment *keys = data->keys[k], *newkeys;
1.72 __fragment *values = data->values[k], *newvalues;
1.73
1.74 @@ -632,6 +633,8 @@
1.75 data->keys[k] = newkeys;
1.76 if (newvalues != values)
1.77 data->values[k] = newvalues;
1.78 +
1.79 + data->size = size + 1;
1.80 return __builtins___none_None;
1.81 }
1.82
1.83 @@ -645,7 +648,7 @@
1.84 /* self.__data__ interpreted as dict */
1.85 __mapping *data = __load_via_object(self->value, __pos___data__).mapvalue;
1.86 /* index.__data__ interpreted as int */
1.87 - int k = __load_via_object(index->value, __pos___data__).intvalue % __MAPPING_BUCKETS;
1.88 + int k = __load_via_object(index->value, __pos___data__).intvalue % data->capacity;
1.89 /* element.__data__ interpreted as int */
1.90 int i = __load_via_object(element->value, __pos___data__).intvalue;
1.91