diff -ruN klic-3.003-2002-03-11/include/klic/g_basic.h klic-3.003-2002-03-11a/include/klic/g_basic.h --- klic-3.003-2002-03-11/include/klic/g_basic.h Tue Mar 5 22:07:53 2002 +++ klic-3.003-2002-03-11a/include/klic/g_basic.h Mon Mar 11 15:14:00 2002 @@ -58,6 +58,7 @@ */ #define G_HEAPALLOC(from,size,type) \ do{ \ + set_heapp(g_allocp); \ (from) = type(g_allocp); \ g_allocp += (size); \ assert(g_allocp >= heapp() + (size)); \ diff -ruN klic-3.003-2002-03-11/include/klic/gc_macro.h klic-3.003-2002-03-11a/include/klic/gc_macro.h --- klic-3.003-2002-03-11/include/klic/gc_macro.h Sat Mar 9 16:41:10 2002 +++ klic-3.003-2002-03-11a/include/klic/gc_macro.h Mon Mar 11 15:00:07 2002 @@ -23,7 +23,7 @@ extern void G_SUSPEND(q x, struct goalrec* goal); extern void G_MAKE_THE_NEW_GOAL( q* var, struct goalrec** goalp1, q(*myself)(), - unsigned long argc, q argv[], q* g_allocp ); + unsigned long argc, q argv[] ); #define GC_rappend(pref) G_rappend0(GC_CLASS_NAME(),pref) @@ -155,7 +155,8 @@ if(isref(temp0) && (x) == derefone(temp0)) { \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GC_ARGC,GC_ARGV,g_allocp); \ + set_heapp(g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GC_ARGC, GC_ARGV); \ G_SUSPEND((x), goal); \ g_allocp = heapp(); \ GC_RETURN_FROM_NEW(var); \ @@ -180,7 +181,7 @@ if(GC_GCREQUEST == res){ \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GC_ARGC, GC_ARGV, g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GC_ARGC, GC_ARGV); \ g_allocp = heapp(); \ G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \ GC_RETURN_FROM_NEW(var); \ diff -ruN klic-3.003-2002-03-11/include/klic/gc_methtab.h klic-3.003-2002-03-11a/include/klic/gc_methtab.h --- klic-3.003-2002-03-11/include/klic/gc_methtab.h Sun Feb 24 14:51:10 2002 +++ klic-3.003-2002-03-11a/include/klic/gc_methtab.h Mon Mar 11 14:02:55 2002 @@ -8,10 +8,6 @@ #ifndef _KLIC_GC_METHTAB_H_ #define _KLIC_GC_METHTAB_H_ -extern q* GC_STD_UNIFY(); -extern long GC_STD_PRINT(); -extern q* GC_STD_GC(); - /* runtime/generic.c */ extern void GD_STD_DEALLOCATE(struct data_object* GD_SELF); extern q GD_STD_ENCODE(struct data_object* self, void* buffer); @@ -22,19 +18,19 @@ struct consumer_object_method_table GC_method_table = { #ifndef GCUSE_MY_UNIFY - GC_STD_UNIFY , +#error "please GCDEF_UNIFY and GCUSE_MY_UNIFY" #else GC_rappend(active_unify) , #endif #ifndef GCUSE_MY_PRINT - GC_STD_PRINT , +#error "please GCDEF_PRINT and GCUSE_MY_PRINT" #else GC_rappend(print) , #endif #ifndef GCUSE_MY_GC - GC_STD_GC , +#error "please GCDEF_GC and GCUSE_MY_GC" #else GC_rappend(gc) , #endif diff -ruN klic-3.003-2002-03-11/include/klic/gd_macro.h klic-3.003-2002-03-11a/include/klic/gd_macro.h --- klic-3.003-2002-03-11/include/klic/gd_macro.h Sat Mar 9 16:41:10 2002 +++ klic-3.003-2002-03-11a/include/klic/gd_macro.h Mon Mar 11 14:59:39 2002 @@ -22,13 +22,13 @@ /* runtime/generic.c */ -extern q* GD_MAKE_GENERIC_GOAL( +extern void GD_MAKE_GENERIC_GOAL( struct goalrec** goalp1, q var, - unsigned long method_functor, q argv[], q* g_allocp ); + unsigned long method_functor, q argv[] ); extern void G_MAKE_THE_NEW_GOAL( q* var, struct goalrec** goalp1, q(*myself)(), - unsigned long argc, q argv[], q* g_allocp ); + unsigned long argc, q argv[] ); extern void G_SUSPEND(q x, struct goalrec* goal); @@ -77,12 +77,9 @@ (res==GENERIC_SUCCEEDED && g_allocp == heapp()+(size)) ); \ if(GD_GCREQUEST == res){ \ struct goalrec *goal; \ - g_allocp = \ - GD_MAKE_GENERIC_GOAL(&goal,makefunctor(GD_SELF),g_method_functor, \ - GD_ARGV,g_allocp); \ - assert(g_allocp == heapp() + \ - G_SIZE_IN_Q(struct functor) + arities(g_method_functor) - 1 + \ - G_SIZE_IN_Q(struct goalrec) - 4 ); \ + GD_MAKE_GENERIC_GOAL(&goal, makefunctor(GD_SELF), g_method_functor, \ + GD_ARGV); \ + g_allocp = heapp(); \ G_PUSH_GOAL(goal); \ GD_RETURN; \ } \ @@ -98,7 +95,7 @@ if(GD_GCREQUEST == res){ \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV, g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV); \ g_allocp = heapp(); \ G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \ assert(g_allocp == heapp()); \ @@ -118,7 +115,7 @@ if(GENERIC_GCREQUEST == res){ \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV, g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV); \ g_allocp = heapp(); \ G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \ assert(g_allocp == heapp()); \ @@ -137,9 +134,9 @@ (res==GENERIC_SUCCEEDED && g_allocp == heapp()+GD_OBJ_SIZE(GD_SELF)) ); \ if (GD_GCREQUEST == res) { \ struct goalrec *goal; \ - g_allocp = \ - GD_MAKE_GENERIC_GOAL(&goal,makefunctor(GD_SELF), \ - g_method_functor,GD_ARGV, g_allocp); \ + GD_MAKE_GENERIC_GOAL(&goal, makefunctor(GD_SELF), \ + g_method_functor, GD_ARGV ); \ + g_allocp = heapp(); \ G_PUSH_GOAL(goal); \ GD_RETURN; \ } \ @@ -185,10 +182,9 @@ q temp0 = derefone(x); \ if(isref(temp0) && (x) == derefone(temp0)) { \ struct goalrec *goal; \ - g_allocp = \ - GD_MAKE_GENERIC_GOAL(&goal,makefunctor(GD_SELF), \ - g_method_functor,GD_ARGV,g_allocp); \ set_heapp(g_allocp); \ + GD_MAKE_GENERIC_GOAL(&goal, makefunctor(GD_SELF), \ + g_method_functor, GD_ARGV ); \ G_SUSPEND((x), goal); \ g_allocp = heapp(); \ GD_RETURN; \ @@ -215,7 +211,8 @@ if(isref(temp0) && (x) == derefone(temp0)) { \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GD_ARGC,GD_ARGV,g_allocp); \ + set_heapp(g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV); \ G_SUSPEND((x), goal); \ g_allocp = heapp(); \ GD_SUSPEND_NEW(var); \ diff -ruN klic-3.003-2002-03-11/include/klic/gg_macro.h klic-3.003-2002-03-11a/include/klic/gg_macro.h --- klic-3.003-2002-03-11/include/klic/gg_macro.h Mon Mar 11 13:23:18 2002 +++ klic-3.003-2002-03-11a/include/klic/gg_macro.h Mon Mar 11 15:01:28 2002 @@ -21,7 +21,7 @@ extern void G_MAKE_THE_NEW_GOAL( q* var, struct goalrec** goalp1, q(*myself)(), - unsigned long argc, q argv[], q* g_allocp ); + unsigned long argc, q argv[] ); extern void G_SUSPEND(q x, struct goalrec* goal); extern q GG_MAKE_HOOK_VAR(struct generator_object* obj); @@ -135,7 +135,8 @@ if(isref(temp0) && (x) == derefone(temp0)) { \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GG_ARGC,GG_ARGV,g_allocp); \ + set_heapp(g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GG_ARGC, GG_ARGV); \ G_SUSPEND((x), goal); \ g_allocp = heapp(); \ GG_RETURN_FROM_NEW(var); \ @@ -159,7 +160,7 @@ if(GG_GCREQUEST == res) { \ q var; \ struct goalrec *goal; \ - G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GG_ARGC, GG_ARGV, g_allocp); \ + G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GG_ARGC, GG_ARGV); \ g_allocp = heapp(); \ G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \ GG_RETURN_FROM_NEW(var); \ diff -ruN klic-3.003-2002-03-11/include/klic/gg_methtab.h klic-3.003-2002-03-11a/include/klic/gg_methtab.h --- klic-3.003-2002-03-11/include/klic/gg_methtab.h Mon Mar 11 13:32:23 2002 +++ klic-3.003-2002-03-11a/include/klic/gg_methtab.h Mon Mar 11 13:59:03 2002 @@ -27,7 +27,6 @@ #ifndef GGUSE_MY_GENERATE #error "please GGDEF_GENERATE and GGUSE_MY_GENERATE" - GG_STD_GENERATE , #else GG_rappend(generate) , #endif diff -ruN klic-3.003-2002-03-11/runtime/generic.c klic-3.003-2002-03-11a/runtime/generic.c --- klic-3.003-2002-03-11/runtime/generic.c Sat Mar 9 16:41:10 2002 +++ klic-3.003-2002-03-11a/runtime/generic.c Mon Mar 11 15:14:03 2002 @@ -35,21 +35,21 @@ suspend_goal(goal, x); } -extern q* -GD_MAKE_GENERIC_GOAL(goalp1, var, method_functor, argv, g_allocp) +extern void +GD_MAKE_GENERIC_GOAL(goalp1, var, method_functor, argv) struct goalrec** goalp1; q var; unsigned long method_functor; q argv[]; - q* g_allocp; { G_STD_DECL; unsigned long argc = arities (method_functor); + q* g_allocp = heapp(); q objp; int i; G_HEAPALLOC(objp, G_SIZE_IN_Q(struct functor)+argc-1, makefunctor); - assert(g_allocp >= heapp() + G_SIZE_IN_Q(struct functor)+argc-1); + assert(g_allocp == heapp() + G_SIZE_IN_Q(struct functor)+argc-1); functor_of(objp) = makesym(method_functor); for( i=0; ipred = GD_GENERIC_GOAL; (*goalp1)->args[0] = objp; (*goalp1)->args[1] = var; - return g_allocp; + set_heapp(g_allocp); } extern void -G_MAKE_THE_NEW_GOAL(var, goalp1, myself, argc, argv, g_allocp) +G_MAKE_THE_NEW_GOAL(var, goalp1, myself, argc, argv) q* var; struct goalrec** goalp1; q (*myself)(); unsigned long argc; q argv[]; - q* g_allocp; { G_STD_DECL; q newvar; q newobj, newobj2; + q* g_allocp; - set_heapp(g_allocp); newobj = gd_new_pointer(myself); newobj2 = gd_new_termarray(argc, argv); g_allocp = heapp(); @@ -100,9 +99,8 @@ q temp0 = derefone(obj); \ if( isref(temp0) && (obj) == derefone(temp0) ){ \ struct goalrec* goal; \ - g_allocp = \ - GD_MAKE_GENERIC_GOAL(&goal,(obj),g_method_functor,g_argv,g_allocp); \ set_heapp(g_allocp); \ + GD_MAKE_GENERIC_GOAL(&goal, (obj), g_method_functor, g_argv); \ G_SUSPEND((obj), goal); \ g_allocp = heapp(); \ GD_RETURN; \