#include #include #include "value.h" #include "activation.h" #include "builtin.h" int main(int argc, char **argv) { void *lib_handle; const char *error_msg; struct activation *ar; struct value v, result; struct builtin *builtins; int i, j; if ((lib_handle = dlopen("./io.so", RTLD_LAZY)) == NULL) { fprintf(stderr, "Error during dlopen(): %s\n", dlerror()); exit(1); } builtins = dlsym(lib_handle, "builtins"); if ((error_msg = dlerror()) != NULL) { fprintf(stderr, "Error locating 'builtins' - %s\n", error_msg); exit(1); } for (i = 0; builtins[i].name != NULL; i++) { printf("Calling `%s'...\n", builtins[i].name); ar = activation_new_on_heap(builtins[i].arity, NULL, NULL); for (j = 0; j < builtins[i].arity; j++) { v = value_new_integer(76); activation_set_value(ar, j, 0, v); } result = (*builtins[i].fn)(ar); /*activation_free_from_stack(ar);*/ printf("Done! Result: "); value_print(result); printf("\n"); } dlclose(lib_handle); return(0); }