1.1 --- a/templates/native/unicode.c Mon Mar 06 22:29:36 2017 +0100
1.2 +++ b/templates/native/unicode.c Tue Mar 07 00:28:18 2017 +0100
1.3 @@ -69,14 +69,12 @@
1.4
1.5 /* Unicode operations. */
1.6
1.7 -__attr __fn_native_unicode_unicode_len(__attr __args[])
1.8 +__attr __fn_native_unicode_unicode_len(__attr __self, __attr _data, __attr _size)
1.9 {
1.10 - __attr * const _data = &__args[1];
1.11 - __attr * const _size = &__args[2];
1.12 - /* _data interpreted as string */
1.13 - char *s = _data->strvalue;
1.14 - /* _size interpreted as int */
1.15 - int size = _size->intvalue;
1.16 + /* _data interpreted as string.__data__ */
1.17 + char *s = _data.strvalue;
1.18 + /* _size interpreted as int.__data__ */
1.19 + int size = _size.intvalue;
1.20 unsigned int i, c = 0;
1.21
1.22 for (i = 0; i < size; i++)
1.23 @@ -87,14 +85,12 @@
1.24 return __new_int(c);
1.25 }
1.26
1.27 -__attr __fn_native_unicode_unicode_ord(__attr __args[])
1.28 +__attr __fn_native_unicode_unicode_ord(__attr __self, __attr _data, __attr _size)
1.29 {
1.30 - __attr * const _data = &__args[1];
1.31 - __attr * const _size = &__args[2];
1.32 - /* _data interpreted as string */
1.33 - char *s = _data->strvalue;
1.34 - /* _size interpreted as int */
1.35 - int size = _size->intvalue;
1.36 + /* _data interpreted as string.__data__ */
1.37 + char *s = _data.strvalue;
1.38 + /* _size interpreted as int.__data__ */
1.39 + int size = _size.intvalue;
1.40 unsigned int i, c = 0, v;
1.41
1.42 for (i = 0; i < size; i++)
1.43 @@ -123,23 +119,18 @@
1.44 return __new_int(c);
1.45 }
1.46
1.47 -__attr __fn_native_unicode_unicode_substr(__attr __args[])
1.48 +__attr __fn_native_unicode_unicode_substr(__attr __self, __attr _data, __attr _size, __attr start, __attr end, __attr step)
1.49 {
1.50 - __attr * const _data = &__args[1];
1.51 - __attr * const _size = &__args[2];
1.52 - __attr * const start = &__args[3];
1.53 - __attr * const end = &__args[4];
1.54 - __attr * const step = &__args[5];
1.55 - /* _data interpreted as string */
1.56 - char *s = _data->strvalue, *sub;
1.57 - /* _size interpreted as int */
1.58 - int ss = _size->intvalue;
1.59 - /* start.__data__ interpreted as int */
1.60 - int istart = __load_via_object(start->value, __data__).intvalue;
1.61 - /* end.__data__ interpreted as int */
1.62 - int iend = __load_via_object(end->value, __data__).intvalue;
1.63 - /* step.__data__ interpreted as int */
1.64 - int istep = __load_via_object(step->value, __data__).intvalue;
1.65 + /* _data interpreted as string.__data__ */
1.66 + char *s = _data.strvalue, *sub;
1.67 + /* _size interpreted as int.__data__ */
1.68 + int ss = _size.intvalue;
1.69 + /* start interpreted as int */
1.70 + int istart = __load_via_object(start.value, __data__).intvalue;
1.71 + /* end interpreted as int */
1.72 + int iend = __load_via_object(end.value, __data__).intvalue;
1.73 + /* step interpreted as int */
1.74 + int istep = __load_via_object(step.value, __data__).intvalue;
1.75
1.76 /* Calculate the number of characters. */
1.77 size_t nchar = ((iend - istart - (istep > 0 ? 1 : -1)) / istep) + 1;
1.78 @@ -202,11 +193,10 @@
1.79 return __new_str(sub, resultsize);
1.80 }
1.81
1.82 -__attr __fn_native_unicode_unicode_unichr(__attr __args[])
1.83 +__attr __fn_native_unicode_unicode_unichr(__attr __self, __attr value)
1.84 {
1.85 - __attr * const value = &__args[1];
1.86 - /* value interpreted as int */
1.87 - int i = value->intvalue;
1.88 + /* value interpreted as int.__data__ */
1.89 + int i = value.intvalue;
1.90 unsigned int resultsize;
1.91 char *s;
1.92