1.1 --- a/templates/native/common.c Sun Nov 14 00:50:17 2021 +0100
1.2 +++ b/templates/native/common.c Sun Nov 28 02:03:21 2021 +0100
1.3 @@ -29,7 +29,7 @@
1.4 __attr __new_int(__int n)
1.5 {
1.6 /* Create a new int and set the trailing data. */
1.7 - __attr attr = __NEWINSTANCEIM(__builtins___int_int);
1.8 + __attr attr = __NEWINSTANCE_STACK(__builtins___int_int);
1.9 __set_trailing_data(attr, __builtins___int_int, n);
1.10 return __TO_MUTABLE(attr);
1.11 }
1.12 @@ -38,9 +38,9 @@
1.13 {
1.14 /* Create a new string and mutate the __data__, __size__ and __key__ attributes. */
1.15 __attr attr = __NEWINSTANCE(__builtins___str_str);
1.16 - __store_via_object(__VALUE(attr), __data__, (__attr) {.strvalue=s});
1.17 - __store_via_object(__VALUE(attr), __size__, (__attr) {.sizevalue=size});
1.18 - __store_via_object(__VALUE(attr), __key__, __NULL);
1.19 + __store_via_object_internal(__VALUE(attr), __data__, (__attr) {.strvalue=s});
1.20 + __store_via_object_internal(__VALUE(attr), __size__, (__attr) {.sizevalue=size});
1.21 + __store_via_object_internal(__VALUE(attr), __key__, __NULL);
1.22 return attr;
1.23 }
1.24
1.25 @@ -48,14 +48,14 @@
1.26 {
1.27 /* Create a new list and mutate the __data__ attribute. */
1.28 __attr attr = __NEWINSTANCE(__builtins___list_list);
1.29 - __store_via_object(__VALUE(attr), __data__, (__attr) {.seqvalue=f});
1.30 + __store_via_object_internal(__VALUE(attr), __data__, (__attr) {.seqvalue=f});
1.31 return attr;
1.32 }
1.33
1.34 __attr __new_float(__float n)
1.35 {
1.36 /* Create a new float and set the trailing data. */
1.37 - __attr attr = __NEWINSTANCEIM(__builtins___float_float);
1.38 + __attr attr = __NEWINSTANCE_STACK(__builtins___float_float);
1.39 __set_trailing_data(attr, __builtins___float_float, n);
1.40 return __TO_MUTABLE(attr);
1.41 }
1.42 @@ -70,13 +70,14 @@
1.43 if (size >= capacity)
1.44 {
1.45 /* NOTE: Consider various restrictions on capacity increases. */
1.46 - n = capacity ? capacity * 2 : 1;
1.47 + n = capacity * 2 > size ? capacity * 2 : size + 1;
1.48 newdata = (__fragment *) __REALLOCATE(data, __FRAGMENT_SIZE(n));
1.49 newdata->capacity = n;
1.50 }
1.51
1.52 /* Insert the new element and increment the list size. */
1.53 - newdata->attrs[size] = value;
1.54 + newdata->attrs[size] = __RAWVALUE(0);
1.55 + __store_target(&newdata->attrs[size], value);
1.56 newdata->size = size + 1;
1.57
1.58 return newdata;