diff --git a/implementations/C/Makefile b/implementations/C/Makefile index 224efae..02f0fec 100644 --- a/implementations/C/Makefile +++ b/implementations/C/Makefile @@ -1,6 +1,11 @@ -COPTS=-I/usr/local/include STATIC_GCLIB=/usr/local/lib/libgc.a /usr/local/lib/libgmp.a +CFLAGS = -ansi -Wall -Wextra -Werror -pedantic -Wstrict-overflow -fno-strict-aliasing -pedantic-errors -I/usr/local/include $(STATIC_GCLIB) +#COPTS=-I/usr/local/include -joy: joy.c - cc $(COPTS) joy.c $(STATIC_GCLIB) -o joy + + +all: joy + +#joy: joy.c +# cc $(COPTS) joy.c $(STATIC_GCLIB) -o joy diff --git a/implementations/C/joy b/implementations/C/joy index 8c3cba9..1747eeb 100755 Binary files a/implementations/C/joy and b/implementations/C/joy differ diff --git a/implementations/C/joy.c b/implementations/C/joy.c index 555f1b3..37df7ba 100644 --- a/implementations/C/joy.c +++ b/implementations/C/joy.c @@ -12,80 +12,47 @@ enum JoyTypeType { typedef struct list_node* JoyList; -typedef struct JoyType { +struct JoyType { enum JoyTypeType kind; union { - int b; // bool + int boolean; mpz_t i; JoyList el; - }; + } value; } name ; -typedef struct list_node { +struct list_node { struct JoyType head; struct list_node* tail; -} *JoyList; +}; -// Example S-exprs -// https://www.hboehm.info/gc/04tutorial.pdf -/**/ -/*typedef union se*/ -/*{*/ -/* struct cons * cp;*/ -/* mpz_t i;*/ -/*} sexpr;*/ -/**/ -/*struct cons*/ -/*{*/ -/* union se head;*/ -/* union se tail;*/ -/*};*/ -/**/ -/*#define car(s) (s).cp->head*/ -/*#define cdr(s) (s).cp->tail*/ -/*#define from_i(z) ({sexpr tmp; tmp.i=z; tmp;})*/ -/*#define to_i(s) (s).i*/ -/**/ -/*sexpr cons(sexpr a, sexpr b) {*/ -/* sexpr tmp = {GC_MALLOC(sizeof(struct cons))};*/ -/* car(tmp) = a; cdr(tmp) = b;*/ -/* return (tmp);*/ -/*};*/ - -void* reallocate_function (void *ptr, size_t old_size, size_t new_size) { +void* reallocate_function (void *ptr, __attribute__((unused)) size_t old_size, size_t new_size) { return GC_REALLOC(ptr, new_size); } -void deallocate_function (void *ptr, size_t size) { +void deallocate_function (void *ptr, __attribute__((unused)) size_t size) { GC_FREE(ptr); } -void my_callback(GC_PTR void_obj, GC_PTR void_environment) { - //MY_ENVIRONMENT *env = (MY_ENVIRONMENT)void_environment; +void my_callback(GC_PTR void_obj, __attribute__((unused)) GC_PTR void_environment) { + /*MY_ENVIRONMENT *env = (MY_ENVIRONMENT)void_environment;*/ mpz_t *obj = (mpz_t*)void_obj; mpz_clear(*obj); } -/*sexpr new_int(void) {*/ -/* sexpr node = {GC_MALLOC(sizeof(struct cons))};*/ -/* mpz_init(node.i);*/ -/* GC_register_finalizer(node.i, my_callback, NULL, NULL, NULL);*/ -/* return (node);*/ -/*}*/ - int main(void) { + mpz_t pi; mp_set_memory_functions( &GC_malloc, &reallocate_function, &deallocate_function ); - mpz_t pi; mpz_init_set_str(pi, "3141592653589793238462643383279502884", 10); - //mpz_init_set_str(pi, "25d0c79fe247f31777d922627a74624", 16); + /*mpz_init_set_str(pi, "25d0c79fe247f31777d922627a74624", 16);*/ GC_register_finalizer(pi, my_callback, NULL, NULL, NULL); gmp_printf("%Zd = %Zx\n", pi, pi); @@ -98,5 +65,5 @@ main(void) /*gmp_printf ("%Zd\n", i.i);*/ return 0; - //return to_i(car(cons(from_i(0),from_i(1)))); + /*return to_i(car(cons(from_i(0),from_i(1))));*/ }