#include #include #include #include #define sequence(name, type) \ struct { \ type *start; \ type *end; \ } name; #define list(name, type) \ struct name { \ type head; \ struct name *tail; \ } name; typedef sequence(object_ref, void *); typedef sequence(string, char); #define method_ref(name, method_type) \ struct { \ object_ref object; \ method_type method; \ } name #define method(name, return_type, param_types...) \ return_type (*name)(object_ref , ## param_types) typedef method(method_int_to_int, int, int); int method_1(object_ref obj, int in) { return in*2; } method_int_to_int m = method_1; typedef struct split { void (*in)(struct split *s, char *string); void (*out)(struct split *s, char *string); } split; void print(string s) { if (write(1, s.start, s.end-s.start) == -1) { fprintf(stderr, "write failed: %d", errno); exit(1); } } int main(char** argv) { char *cs = "Hello World!"; string s = { "Hello World!" }; int i; s.end = s.start + strlen(s.start); printf("%x %x\n", s.start, s.end); for (i=0; i<1000000; ++i) print(s); //printf(cs); }