Lichen

templates/ops.h

336:8c75cdf1a764
2016-12-06 Paul Boddie Introduced stream classes employing C-level FILE pointers, changing the sys stdin, stdout and stderr objects to be instances of these stream classes. Added fread and fwrite support to the native functions. Added support for raising EOFError.
     1 /* Common operations. */     2      3 #ifndef __OPS_H__     4 #define __OPS_H__     5      6 #include "types.h"     7 #include <string.h> /* for __COPY */     8      9 /* Direct access and manipulation of static objects. */    10     11 __attr __load_static(__ref parent, __ref obj);    12     13 /* Direct retrieval operations, returning attributes. */    14     15 __attr __load_via_class(__ref obj, int pos);    16 __attr __load_via_object(__ref obj, int pos);    17 __attr __get_class_and_load(__ref obj, int pos);    18     19 /* Direct storage operations. */    20     21 int __store_via_object(__ref obj, int pos, __attr value);    22 int __get_class_and_store(__ref obj, int pos, __attr value);    23     24 /* Introspection. */    25     26 int __is_instance(__ref obj);    27 int __is_type_instance(__ref obj);    28 __ref __get_class(__ref obj);    29 __attr __get_class_attr(__ref obj);    30     31 /* Attribute testing operations. */    32     33 __ref __test_specific_instance(__ref obj, __ref type);    34 __ref __test_specific_object(__ref obj, __ref type);    35 __ref __test_specific_type(__ref obj, __ref type);    36 __ref __test_common_instance(__ref obj, int pos, int code);    37 __ref __test_common_object(__ref obj, int pos, int code);    38 __ref __test_common_type(__ref obj, int pos, int code);    39     40 /* Attribute testing and retrieval operations. */    41     42 __attr __check_and_load_via_class(__ref obj, int pos, int code);    43 __attr __check_and_load_via_object(__ref obj, int pos, int code);    44 __attr __check_and_load_via_any(__ref obj, int pos, int code);    45     46 /* Attribute testing and storage operations. */    47     48 int __check_and_store_via_class(__ref obj, int pos, int code, __attr value);    49 int __check_and_store_via_object(__ref obj, int pos, int code, __attr value);    50 int __check_and_store_via_any(__ref obj, int pos, int code, __attr value);    51     52 /* Context-related operations. */    53     54 __attr __test_context(__ref context, __attr attr);    55 __attr __replace_context(__ref context, __attr attr);    56 __attr __update_context(__ref context, __attr attr);    57     58 #define __set_context(__ATTR) (__tmp_context = (__ATTR).value)    59 #define __set_accessor(__ATTR) (__tmp_value = (__ATTR).value)    60     61 /* Basic structure tests. */    62     63 int __WITHIN(__ref obj, int pos);    64 int __HASATTR(__ref obj, int pos, int code);    65     66 /* Parameter position operations. */    67     68 int __HASPARAM(const __ptable *ptable, int ppos, int pcode);    69     70 /* Conversions. */    71     72 __attr __CONTEXT_AS_VALUE(__attr attr);    73     74 /* Type testing. */    75     76 __ref __ISFUNC(__ref obj);    77 int __ISNULL(__attr value);    78     79 /* __TEST(obj, __A) -> test obj for the special type attribute __A */    80     81 #define __TEST(__OBJ, __TYPE) (__test_common_instance(__OBJ, __pos_##__TYPE, __code_##__TYPE))    82     83 /* Attribute codes and positions for type objects. */    84     85 unsigned int __TYPECODE(__ref obj);    86 unsigned int __TYPEPOS(__ref obj);    87     88 /* Attribute codes and positions for attribute names. */    89     90 #define __ATTRCODE(__ATTRNAME) (__code_##__ATTRNAME)    91 #define __ATTRPOS(__ATTRNAME) (__pos_##__ATTRNAME)    92     93 /* Memory allocation. */    94     95 void *__ALLOCATE(size_t nmemb, size_t size);    96 void *__REALLOCATE(void *ptr, size_t size);    97     98 /* Copying of structures. */    99    100 __ref __COPY(__ref obj, int size);   101    102 #endif /* __OPS_H__ */