1.1 --- a/templates/ops.h Sun Nov 14 00:50:17 2021 +0100
1.2 +++ b/templates/ops.h Sun Nov 28 02:03:21 2021 +0100
1.3 @@ -44,12 +44,15 @@
1.4
1.5 /* Direct storage operations. */
1.6
1.7 +void __store_target(__attr *target, __attr value);
1.8 int __store_via_class__(__ref obj, int pos, __attr value);
1.9 int __store_via_object__(__ref obj, int pos, __attr value);
1.10 +int __store_via_object_internal__(__ref obj, int pos, __attr value);
1.11 int __get_class_and_store__(__ref obj, int pos, __attr value);
1.12
1.13 #define __store_via_class(OBJ, ATTRNAME, VALUE) (__store_via_class__(OBJ, __ATTRPOS(ATTRNAME), VALUE))
1.14 #define __store_via_object(OBJ, ATTRNAME, VALUE) (__store_via_object__(OBJ, __ATTRPOS(ATTRNAME), VALUE))
1.15 +#define __store_via_object_internal(OBJ, ATTRNAME, VALUE) (__store_via_object_internal__(OBJ, __ATTRPOS(ATTRNAME), VALUE))
1.16 #define __get_class_and_store(OBJ, ATTRNAME, VALUE) (__get_class_and_store__(OBJ, __ATTRPOS(ATTRNAME), VALUE))
1.17
1.18 /* Introspection. */
1.19 @@ -93,10 +96,12 @@
1.20
1.21 int __check_and_store_via_class__(__ref obj, int pos, int code, __attr value);
1.22 int __check_and_store_via_object__(__ref obj, int pos, int code, __attr value);
1.23 +int __check_and_store_via_object_internal__(__ref obj, int pos, int code, __attr value);
1.24 int __check_and_store_via_any__(__ref obj, int pos, int code, __attr value);
1.25
1.26 #define __check_and_store_via_class(OBJ, ATTRNAME, VALUE) (__check_and_store_via_class__(OBJ, __ATTRPOS(ATTRNAME), __ATTRCODE(ATTRNAME), VALUE))
1.27 #define __check_and_store_via_object(OBJ, ATTRNAME, VALUE) (__check_and_store_via_object__(OBJ, __ATTRPOS(ATTRNAME), __ATTRCODE(ATTRNAME), VALUE))
1.28 +#define __check_and_store_via_object_internal(OBJ, ATTRNAME, VALUE) (__check_and_store_via_object_internal__(OBJ, __ATTRPOS(ATTRNAME), __ATTRCODE(ATTRNAME), VALUE))
1.29 #define __check_and_store_via_any(OBJ, ATTRNAME, VALUE) (__check_and_store_via_any__(OBJ, __ATTRPOS(ATTRNAME), __ATTRCODE(ATTRNAME), VALUE))
1.30
1.31 /* Context-related operations. */
1.32 @@ -151,6 +156,24 @@
1.33
1.34 /* Copying of structures. */
1.35
1.36 -__ref __COPY(__ref obj, int size);
1.37 +__ref __COPY(__ref obj, size_t size);
1.38 +void __COPY_TO(__ref source, __ref target, size_t size);
1.39 +
1.40 +/* Stack management. */
1.41 +
1.42 +extern _Thread_local __attr __stack;
1.43 +
1.44 +#define __STACK_SECTION_SIZE 4096
1.45 +
1.46 +__attr __stack_init();
1.47 +__attr __stack_allocate(__attr __stack, size_t size);
1.48 +void __stack_expand(__attr __stack);
1.49 +void __stack_contract(__attr __stack, char *level);
1.50 +
1.51 +/* Stack access. */
1.52 +
1.53 +__attr __load(__attr value);
1.54 +__attr __store_local(__attr target, __attr value);
1.55 +__attr __return(__attr result, __section *section, char *level);
1.56
1.57 #endif /* __OPS_H__ */