diff options
Diffstat (limited to 'lang/qscheme/files/patch-object.c')
-rw-r--r-- | lang/qscheme/files/patch-object.c | 107 |
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); + } |