summaryrefslogtreecommitdiff
path: root/lang/qscheme/files/patch-object.c
diff options
context:
space:
mode:
Diffstat (limited to 'lang/qscheme/files/patch-object.c')
-rw-r--r--lang/qscheme/files/patch-object.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/lang/qscheme/files/patch-object.c b/lang/qscheme/files/patch-object.c
new file mode 100644
index 000000000000..57e0fd446853
--- /dev/null
+++ b/lang/qscheme/files/patch-object.c
@@ -0,0 +1,107 @@
+--- object.c.orig 2009-03-03 17:41:46.000000000 +0200
++++ object.c 2009-03-03 17:58:19.000000000 +0200
+@@ -20,8 +20,10 @@
+ SOBJ scm_mkobjdef(int ndefs)
+ {
+ SOBJ new = scm_newcell(SOBJ_T_OBJDEF);
+- SCM_OBJDEF_AUX(new) =
+- scm_must_alloc(sizeof(SCM_ObjDefAux) + ((ndefs - 1) * sizeof(SCM_ObjDef)));
++ /*SCM_OBJDEF_AUX(new) =
++ scm_must_alloc(sizeof(SCM_ObjDefAux) + ((ndefs - 1) * sizeof(SCM_ObjDef)));*/
++ SCM_OBJDEF_AUX_SET(new,
++ scm_must_alloc(sizeof(SCM_ObjDefAux) + ((ndefs - 1) * sizeof(SCM_ObjDef))));
+
+ SCM_OBJDEF_AUX(new)->ndefs = ndefs;
+ return(new);
+@@ -43,7 +45,8 @@
+ {
+ if (SCM_OBJDEF_AUX(x)) {
+ scm_free(SCM_OBJDEF_AUX(x));
+- SCM_OBJDEF_AUX(x) = NULL;
++ /*SCM_OBJDEF_AUX(x) = NULL;*/
++ SCM_OBJDEF_AUX_SET(x, NULL);
+ }
+ }
+
+@@ -64,9 +67,12 @@
+ {
+ SOBJ new = scm_newcell(SOBJ_T_OBJECT);
+
+- SCM_OBJECT_DEF(new) = def;
++ /*SCM_OBJECT_DEF(new) = def;
+ SCM_OBJECT_VAL(new) =
+- scm_must_alloc(sizeof(SCM_ObjVal) + ((nslots - 1) * sizeof(SOBJ)));
++ scm_must_alloc(sizeof(SCM_ObjVal) + ((nslots - 1) * sizeof(SOBJ)));*/
++ SCM_OBJECT_DEF_SET(new, def);
++ SCM_OBJECT_VAL_SET(new,
++ scm_must_alloc(sizeof(SCM_ObjVal) + ((nslots - 1) * sizeof(SOBJ))));
+
+ SCM_OBJECT_VAL(new)->nslots = nslots;
+ return(new);
+@@ -237,7 +243,8 @@
+ int nslots;
+
+ if (SCM_OBJECT_VAL(obj) == NULL) {
+- SCM_OBJECT_VAL(obj) = scm_must_alloc(offsetof(SCM_ObjVal, slot[1]));
++ /*SCM_OBJECT_VAL(obj) = scm_must_alloc(offsetof(SCM_ObjVal, slot[1]));*/
++ SCM_OBJECT_VAL_SET(obj, scm_must_alloc(offsetof(SCM_ObjVal, slot[1])));
+ SCM_OBJECT_VAL(obj)->nslots = 1;
+ return(0);
+ }
+@@ -246,7 +253,9 @@
+ memcpy(ov, SCM_OBJECT_VAL(obj), offsetof(SCM_ObjVal, slot[nslots]));
+ ov->nslots++;
+ ov->slot[nslots] = NULL;
+- scm_free(SCM_OBJECT_VAL(obj)); SCM_OBJECT_VAL(obj) = ov;
++ scm_free(SCM_OBJECT_VAL(obj));
++ /*SCM_OBJECT_VAL(obj) = ov;*/
++ SCM_OBJECT_VAL_SET(obj, ov);
+ return(nslots);
+ }
+
+@@ -284,11 +293,13 @@
+ int nslots, size;
+ SOBJ new = scm_newcell(SOBJ_T_OBJECT);
+
+- SCM_OBJECT_DEF(new) = SCM_OBJECT_DEF(obj);
++ /*SCM_OBJECT_DEF(new) = SCM_OBJECT_DEF(obj);*/
++ SCM_OBJECT_DEF_SET(new, SCM_OBJECT_DEF(obj));
+
+ nslots = SCM_OBJECT_VAL(obj)->nslots;
+ size = offsetof(SCM_ObjVal, slot[nslots]);
+- SCM_OBJECT_VAL(new) = scm_must_alloc(size);
++ /*SCM_OBJECT_VAL(new) = scm_must_alloc(size);*/
++ SCM_OBJECT_VAL_SET(new, scm_must_alloc(size));
+ memcpy(SCM_OBJECT_VAL(new), SCM_OBJECT_VAL(obj), size);
+ return(new);
+ }
+@@ -377,7 +388,8 @@
+ /* make a new objdef with space for 2 more defs */
+ newdef = scm_newcell(SOBJ_T_OBJDEF);
+ d = objdef_append_fields(SCM_OBJDEF_AUX(olddef), 2);
+- SCM_OBJDEF_AUX(newdef) = d;
++ /*SCM_OBJDEF_AUX(newdef) = d;*/
++ SCM_OBJDEF_AUX_SET(newdef, d);
+
+ /* prepare atom for the set! name */
+ i = strlen(SCM_ATOM_NAME(name));
+@@ -414,7 +426,8 @@
+ if ((olddef = SCM_OBJECT_DEF(obj)) == NULL) SCM_ERR("bad objdef for object",obj);
+ newdef = scm_newcell(SOBJ_T_OBJDEF);
+ d = objdef_append_fields(SCM_OBJDEF_AUX(olddef), 1);
+- SCM_OBJDEF_AUX(newdef) = d;
++ /*SCM_OBJDEF_AUX_SET(newdef) = d;*/
++ SCM_OBJDEF_AUX_SET(newdef, d);
+
+ slotnr = object_new_slot(obj); /* alloc new slot and get index */
+
+@@ -424,7 +437,8 @@
+ d->def[i].type = type;
+ d->def[i].index= slotnr;
+
+- SCM_OBJECT_DEF(obj) = newdef; /* adjust object def pointer */
++ /*SCM_OBJECT_DEF(obj) = newdef;*/
++ SCM_OBJECT_DEF_SET(obj, newdef); /* adjust object def pointer */
+ SCM_OBJECT_SLOT(obj,slotnr) = value;
+ return(obj);
+ }