Blob Blame History Raw
--- gprolog-1.2.19.orig/src/BipsFD/fd_bool_c.c	2005-06-14 03:40:09.000000000 +1200
+++ gprolog-1.2.19/src/BipsFD/fd_bool_c.c	2006-01-23 09:46:19.000000000 +1300
@@ -201,6 +201,8 @@
 static void
 Fd_Bool_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   bool_tbl[NOT] = Functor_Arity(Create_Atom("#\\"), 1);
 
   bool_tbl[EQUIV] = Functor_Arity(Create_Atom("#<=>"), 2);
--- gprolog-1.2.19.orig/src/BipsFD/math_supp.c	2005-06-14 03:40:10.000000000 +1200
+++ gprolog-1.2.19/src/BipsFD/math_supp.c	2006-01-23 09:46:39.000000000 +1300
@@ -206,6 +206,8 @@
 static void
 Math_Supp_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   arith_tbl[PLUS_1] = Functor_Arity(ATOM_CHAR('+'), 1);
   arith_tbl[PLUS_2] = Functor_Arity(ATOM_CHAR('+'), 2);
   arith_tbl[MINUS_1] = Functor_Arity(ATOM_CHAR('-'), 1);
--- gprolog-1.2.19.orig/src/BipsPl/all_solut_c.c	2005-06-14 03:40:10.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/all_solut_c.c	2006-01-23 09:47:09.000000000 +1300
@@ -123,6 +123,8 @@
 static void
 All_Solut_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   exist_2 = Functor_Arity(ATOM_CHAR('^'), 2);
 }
 
--- gprolog-1.2.19.orig/src/BipsPl/arith_inl_c.c	2005-06-14 03:40:10.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/arith_inl_c.c	2006-01-23 09:47:20.000000000 +1300
@@ -99,6 +99,8 @@
 static void
 Arith_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   ArithInf arith_info;
 
   arith_tbl = Hash_Alloc_Table(START_ARITH_TBL_SIZE, sizeof(ArithInf));
--- gprolog-1.2.19.orig/src/BipsPl/bc_supp.c	2005-06-14 03:40:10.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/bc_supp.c	2006-01-23 09:47:35.000000000 +1300
@@ -283,6 +283,8 @@
 static void
 Byte_Code_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   BCWord *p = op_tbl;
 
   Op_In_Tbl("get_variable", GET_X_VARIABLE);
--- gprolog-1.2.19.orig/src/BipsPl/debugger_c.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/debugger_c.c	2006-01-23 09:47:53.000000000 +1300
@@ -164,6 +164,8 @@
 static void
 Debug_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   New_Object(My_System_Directives, NULL);
 }
 
--- gprolog-1.2.19.orig/src/BipsPl/dynam_supp.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/dynam_supp.c	2006-01-23 09:20:39.000000000 +1300
@@ -601,7 +601,8 @@
       dyn = scan->dyn;
 
       if (dyn->first_erased_cl)	/* we must keep it - free impossible */
-	(unsigned long) (dyn->first_erased_cl) |= 1;	/* mark it */
+	dyn->first_erased_cl = (DynCInf *)
+	  ((unsigned long) (dyn->first_erased_cl) | 1);	/* mark it */
     }
 
 
--- gprolog-1.2.19.orig/src/BipsPl/error_supp.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/error_supp.c	2006-01-23 09:48:04.000000000 +1300
@@ -117,6 +117,8 @@
 static void
 Error_Supp_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   type_atom = Create_Atom("atom");
   type_atomic = Create_Atom("atomic");
   type_byte = Create_Atom("byte");
--- gprolog-1.2.19.orig/src/BipsPl/expand_c.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/expand_c.c	2006-01-23 09:48:16.000000000 +1300
@@ -92,6 +92,8 @@
 static void
 Expand_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   int atom_dcg;
 
   atom_dcg = Create_Atom("-->");
--- gprolog-1.2.19.orig/src/BipsPl/flag_c.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/flag_c.c	2006-01-23 09:48:33.000000000 +1300
@@ -77,7 +77,6 @@
 static int atom_on;
 static int atom_off;
 
-static int atom_error;
 static int atom_warning;
 static int atom_fail;
 
@@ -118,6 +117,8 @@
 static void
 Flag_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   atom_flag_tbl[FLAG_BOUNDED] = Create_Atom("bounded");
   atom_flag_tbl[FLAG_MAX_INTEGER] = Create_Atom("max_integer");
   atom_flag_tbl[FLAG_MIN_INTEGER] = Create_Atom("min_integer");
--- gprolog-1.2.19.orig/src/BipsPl/foreign_supp.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/foreign_supp.c	2006-01-23 09:48:42.000000000 +1300
@@ -98,6 +98,8 @@
 static void
 Foreign_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   goal_H = H;
   H = H + MAX_ARITY + 1;
 
--- gprolog-1.2.19.orig/src/BipsPl/g_var_inl_c.c	2005-06-16 05:04:06.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/g_var_inl_c.c	2006-01-23 09:49:06.000000000 +1300
@@ -167,6 +167,8 @@
 static void
 G_Var_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   atom_g_array = Create_Atom("g_array");
   atom_g_array_auto = Create_Atom("g_array_auto");
   atom_g_array_extend = Create_Atom("g_array_extend");
--- gprolog-1.2.19.orig/src/BipsPl/oper_c.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/oper_c.c	2006-01-23 09:49:19.000000000 +1300
@@ -86,6 +86,8 @@
 static void
 Oper_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   char *a[7] = { "fx", "fy", "xf", "yf", "xfx", "xfy", "yfx" };
   int i;
 
--- gprolog-1.2.19.orig/src/BipsPl/os_interf_c.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/os_interf_c.c	2006-01-23 09:49:33.000000000 +1300
@@ -94,8 +94,6 @@
 
 static int atom_dt;
 
-static int atom_read;
-static int atom_write;
 static int atom_execute;
 static int atom_search;
 
@@ -138,6 +136,8 @@
 static void
 Os_Interf_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   atom_dt = Create_Atom("dt");
 
   atom_read = Create_Atom("read");
--- gprolog-1.2.19.orig/src/BipsPl/parse_supp.c	2005-06-14 03:40:11.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/parse_supp.c	2006-01-23 09:49:53.000000000 +1300
@@ -124,6 +124,8 @@
 static void
 Parse_Supp_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   atom_var = Create_Atom("var");
   atom_string = Create_Atom("string");
   atom_punct = Create_Atom("punct");
--- gprolog-1.2.19.orig/src/BipsPl/pretty_c.c	2005-06-14 03:40:12.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/pretty_c.c	2006-01-23 09:50:07.000000000 +1300
@@ -112,6 +112,8 @@
 static void
 Pretty_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   atom_clause = Create_Atom(":-");
   atom_dcg = Create_Atom("-->");
   atom_if = Create_Atom("->");
--- gprolog-1.2.19.orig/src/BipsPl/sockets_c.c	2005-06-14 03:40:12.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/sockets_c.c	2006-01-23 09:50:20.000000000 +1300
@@ -100,6 +100,8 @@
 static void
 Socket_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
 #ifdef _WIN32
   WORD versReqstd = MAKEWORD( 2, 2);		// Current Winsock 2 DLL's
   WSADATA wsaData;
--- gprolog-1.2.19.orig/src/BipsPl/sort_c.c	2005-06-14 03:40:12.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/sort_c.c	2006-01-23 09:50:31.000000000 +1300
@@ -68,6 +68,8 @@
 static void
 Sort_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   minus_2 = Functor_Arity(ATOM_CHAR('-'), 2);
 }
 
--- gprolog-1.2.19.orig/src/BipsPl/write_supp.c	2005-06-14 03:40:12.000000000 +1200
+++ gprolog-1.2.19/src/BipsPl/write_supp.c	2006-01-23 09:50:54.000000000 +1300
@@ -143,6 +143,8 @@
 static void
 Write_Supp_Initializer(void)
 {
+  SET_OBJ_CHAIN_STOP;
+
   atom_dots = Create_Atom("...");
 
   curly_brackets_1 = Functor_Arity(atom_curly_brackets, 1);
--- gprolog-1.2.19.orig/src/EngineFD/fd_inst.h	2005-06-14 03:40:14.000000000 +1200
+++ gprolog-1.2.19/src/EngineFD/fd_inst.h	2006-01-23 09:52:35.000000000 +1300
@@ -111,8 +111,8 @@
 
 #define CHAIN_RECORD_FRAME_SIZE    2
 
-#define CF_Pointer(rec_adr)        ((WamWord *) (rec_adr[0]))
-#define Next_Chain(rec_adr)        ((WamWord *) (rec_adr[1]))
+#define CF_Pointer(rec_adr)        (*(WamWord **) &(rec_adr[0]))
+#define Next_Chain(rec_adr)        (*(WamWord **) &(rec_adr[1]))
 
 
 
@@ -123,9 +123,9 @@
 
 #define OFFSET_OF_OPTIM_POINTER    1	/* this offset must corresponds to */
 
-#define AF_Pointer(cf)             ((WamWord *)  (cf[0]))
-#define Optim_Pointer(cf)          ((WamWord *)  (cf[1]))	/* this cell */
-#define Cstr_Address(cf)           ((long (*)()) (cf[2]))
+#define AF_Pointer(cf)             (*(WamWord **)  &(cf[0]))
+#define Optim_Pointer(cf)          (*(WamWord **)  &(cf[1]))	/* this cell */
+#define Cstr_Address(cf)           (*(long (**)()) &(cf[2]))
 
 
 
--- gprolog-1.2.19.orig/src/EnginePl/obj_chain.c	2005-06-14 03:40:15.000000000 +1200
+++ gprolog-1.2.19/src/EnginePl/obj_chain.c	2006-01-23 09:40:36.000000000 +1300
@@ -24,6 +24,8 @@
 
 /* $Id: gprolog-1.2.19-gcc4.patch,v 1.1 2006/03/21 08:28:26 keri Exp $ */
 
+#define OBJ_CHAIN 1
+
 #include <stdio.h>
 
 #include "obj_chain.h"
@@ -181,7 +183,7 @@
     {
       if (p->magic1 != OBJ_CHAIN_MAGIC_1 || p->magic2 != OBJ_CHAIN_MAGIC_2
 	  || (q = p->next) < (ObjChain **) &obj_chain_begin
-	  || q > &obj_chain_end || *q != p)
+	  || q > &obj_chain_end)
 	{
 #ifdef DEBUG
 #if 0
--- gprolog-1.2.19.orig/src/EnginePl/obj_chain.h	2005-06-14 03:40:15.000000000 +1200
+++ gprolog-1.2.19/src/EnginePl/obj_chain.h	2006-01-23 09:31:49.000000000 +1300
@@ -83,18 +83,24 @@
 #define ATTR_TO_KEEP_UNREF_STATIC_VAR __attribute__ ((unused))
 #endif
 
+#ifdef OBJ_CHAIN
+ObjChain *obj_chain_stop_extern = NULL;
+#else
+
 #ifdef OBJ_INIT
 
 static void (OBJ_INIT) ();
 
 #ifndef _MSC_VER
 
-extern ObjChain *obj_chain_stop;
+static ObjChain obj_chain_start_mark;
+
+static ObjChain *obj_chain_stop = &obj_chain_start_mark;
 
 static ObjChain obj_chain_start ATTR_TO_KEEP_UNREF_STATIC_VAR =
   { OBJ_CHAIN_MAGIC_1, OBJ_CHAIN_MAGIC_2, &obj_chain_stop, OBJ_INIT };
 
-static ObjChain *obj_chain_stop = &obj_chain_start;
+#define SET_OBJ_CHAIN_STOP {}
 
 #if 0 /* antoher way to force to keep the chain : a fct using obj_chain_start
          which references the initializer function (OBJ_INIT) */
@@ -114,3 +120,5 @@
 #endif /* _MSC_VER */
 
 #endif /* OBJ_INIT */
+
+#endif /* OBJ_CHAIN */
--- gprolog-1.2.19.orig/src/EnginePl/test_oc_defs.h	2005-06-14 03:13:43.000000000 +1200
+++ gprolog-1.2.19/src/EnginePl/test_oc_defs.h	2006-01-23 09:45:21.000000000 +1300
@@ -25,6 +25,7 @@
  \
 static void Init_Tables()  \
 {  \
+ SET_OBJ_CHAIN_STOP; \
  printf("object <%s> found\n",name); \
  printf("   start at:%#lx\n",(long) &obj_chain_start); \
  printf("   &name:%#lx\n",(long) &name); \
--- gprolog-1.2.19.orig/src/EnginePl/wam_inst.h	2005-06-14 03:40:15.000000000 +1200
+++ gprolog-1.2.19/src/EnginePl/wam_inst.h	2006-01-23 09:16:11.000000000 +1300
@@ -67,10 +67,10 @@
 
 #define ENVIR_STATIC_SIZE          3
 
-#define CPE(e)                     ((WamCont)   (e[-1]))
-#define BCIE(e)                    ((WamWord)   (e[-2]))
-#define EE(e)                      ((WamWord *) (e[-3]))
-#define Y(e, y)                    ((WamWord)   (e[-4 - (y)]))
+#define CPE(e)                     (*(WamCont *)   &(e[-1]))
+#define BCIE(e)                    (*(WamWord *)   &(e[-2]))
+#define EE(e)                      (*(WamWord **)  &(e[-3]))
+#define Y(e, y)                    (*(WamWord *)   &(e[-4 - (y)]))
 
 #define ENVIR_NAMES                {"CPE", "BCIE", "EE"}
 
@@ -81,15 +81,15 @@
 
 #define CHOICE_STATIC_SIZE         8
 
-#define ALTB(b)                    ((CodePtr)   (b[-1]))
-#define CPB(b)                     ((WamCont)   (b[-2]))
-#define BCIB(b)                    ((WamWord)   (b[-3]))
-#define EB(b)                      ((WamWord *) (b[-4]))
-#define BB(b)                      ((WamWord *) (b[-5]))
-#define HB(b)                      ((WamWord *) (b[-6]))
-#define TRB(b)                     ((WamWord *) (b[-7]))
-#define CSB(b)                     ((WamWord *) (b[-8]))
-#define AB(b, a)                   ((WamWord)   (b[-9 - (a)]))
+#define ALTB(b)                    (*(CodePtr *)   &(b[-1]))
+#define CPB(b)                     (*(WamCont *)   &(b[-2]))
+#define BCIB(b)                    (*(WamWord *)   &(b[-3]))
+#define EB(b)                      (*(WamWord **)  &(b[-4]))
+#define BB(b)                      (*(WamWord **)  &(b[-5]))
+#define HB(b)                      (*(WamWord **)  &(b[-6]))
+#define TRB(b)                     (*(WamWord **)  &(b[-7]))
+#define CSB(b)                     (*(WamWord **)  &(b[-8]))
+#define AB(b, a)                   (*(WamWord *)   &(b[-9 - (a)]))
 
 #define CHOICE_NAMES               {"ALTB", "CPB", "BCIB", "EB", "BB", \
                                     "HB", "TRB", "CSB"}