git @ Cat's Eye Technologies Bhuna / master src / modules / test.c
master

Tree @master (Download .tar.gz)

test.c @masterraw · history · blame

#include <stdio.h>

#include <dlfcn.h>

#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);
}