1.1 --- a/templates/progops.c Sun Mar 26 17:41:56 2017 +0200
1.2 +++ b/templates/progops.c Sun Mar 26 18:03:40 2017 +0200
1.3 @@ -62,9 +62,8 @@
1.4 return data;
1.5 }
1.6
1.7 -void __newdata_sequence(__attr self, __attr args[], unsigned int number, __fragment *data)
1.8 +void __newdata_sequence(unsigned int number, __fragment *data, __attr args[])
1.9 {
1.10 - __attr attr = {.seqvalue=data};
1.11 unsigned int i;
1.12
1.13 /* Copy the given number of values. */
1.14 @@ -73,36 +72,38 @@
1.15 data->attrs[i] = args[i];
1.16
1.17 data->size = number;
1.18 +}
1.19 +
1.20 +__attr __newdata_list(unsigned int number, __attr args[])
1.21 +{
1.22 + __attr self = __NEWINSTANCE(__builtins___list_list);
1.23 + __fragment *data = __new_fragment(number);
1.24
1.25 /* Store a reference to the data in the object's __data__ attribute. */
1.26
1.27 - __store_via_object(__VALUE(self), __data__, attr);
1.28 -}
1.29 -
1.30 -__attr __newdata_list(__attr args[], unsigned int number)
1.31 -{
1.32 - __attr self = __NEWINSTANCE(__builtins___list_list);
1.33 - __fragment *data = __new_fragment(number);
1.34 - __newdata_sequence(self, args, number, data);
1.35 + __store_via_object(__VALUE(self), __data__, (__attr) {.seqvalue=data});
1.36 + __newdata_sequence(number, data, args);
1.37 return self;
1.38 }
1.39
1.40 -__attr __newdata_tuple(__attr args[], unsigned int number)
1.41 +__attr __newdata_tuple(unsigned int number, __attr args[])
1.42 {
1.43 /* Allocate the tuple and fragment together. */
1.44
1.45 __attr self = __new(&__INSTANCETABLE(__builtins___tuple_tuple),
1.46 - &__builtins___tuple_tuple,
1.47 - __INSTANCESIZE(__builtins___tuple_tuple) + __FRAGMENT_SIZE(number), 0);
1.48 + &__builtins___tuple_tuple,
1.49 + __INSTANCESIZE(__builtins___tuple_tuple) + __FRAGMENT_SIZE(number), 0);
1.50 + __fragment *data = (__fragment *) ((void *) __VALUE(self) + __INSTANCESIZE(__builtins___tuple_tuple));
1.51
1.52 - /* Initialise the fragment. */
1.53 + /* Store a reference to the data in the object's __data__ attribute. */
1.54
1.55 - __newdata_sequence(self, args, number, (__fragment *) ((void *) __VALUE(self) + __INSTANCESIZE(__builtins___tuple_tuple)));
1.56 + __store_via_object(__VALUE(self), __data__, (__attr) {.seqvalue=data});
1.57 + __newdata_sequence(number, data, args);
1.58 return self;
1.59 }
1.60
1.61 #ifdef __HAVE___builtins___dict_dict
1.62 -__attr __newdata_dict(__attr args[], unsigned int number)
1.63 +__attr __newdata_dict(unsigned int number, __attr args[])
1.64 {
1.65 __attr self = __NEWINSTANCE(__builtins___dict_dict);
1.66