0.7.10.18:
[sbcl.git] / src / runtime / alloc.c
index 78904a9..00a24f1 100644 (file)
 #include "globals.h"
 #include "gc.h"
 #include <stdio.h>
+#include <string.h>
 
 #define GET_FREE_POINTER() dynamic_space_free_pointer
 #define SET_FREE_POINTER(new_value) \
-  (dynamic_space_free_pointer = (new_value))
+    (dynamic_space_free_pointer = (new_value))
 #define GET_GC_TRIGGER() current_auto_gc_trigger
 #define SET_GC_TRIGGER(new_value) \
     clear_auto_gc_trigger(); set_auto_gc_trigger(new_value);
 
 #define ALIGNED_SIZE(n) (n+LOWTAG_MASK) & ~LOWTAG_MASK
 
-#if defined GENCGC
+#if defined LISP_FEATURE_GENCGC
 extern lispobj *alloc(int bytes);
 #else
 static lispobj *
 alloc(int bytes)
 {
-    lispobj *result;
+    char *result;
 
     /* Round to dual word boundary. */
     bytes = (bytes + LOWTAG_MASK) & ~LOWTAG_MASK;
 
-    result = GET_FREE_POINTER();
+    result = (char *)GET_FREE_POINTER();
 
-    SET_FREE_POINTER(result + (bytes / sizeof(lispobj)));
+    SET_FREE_POINTER((lispobj *)(result + bytes));
 
     if (GET_GC_TRIGGER() && GET_FREE_POINTER() > GET_GC_TRIGGER()) {
        SET_GC_TRIGGER((char *)GET_FREE_POINTER()
                       - (char *)current_dynamic_space);
     }
-    return result;
+    return (lispobj *) result;
 }
 #endif
 
-static lispobj *
+lispobj *
 alloc_unboxed(int type, int words)
 {
     lispobj *result;
@@ -73,7 +74,7 @@ alloc_vector(int type, int length, int size)
     result->header = type;
     result->length = make_fixnum(length);
 
-    return ((lispobj)result)|OTHER_POINTER_LOWTAG;
+    return make_lispobj(result,OTHER_POINTER_LOWTAG);
 }
 
 lispobj
@@ -84,7 +85,7 @@ alloc_cons(lispobj car, lispobj cdr)
     ptr->car = car;
     ptr->cdr = cdr;
 
-    return (lispobj)ptr | LIST_POINTER_LOWTAG;
+    return make_lispobj(ptr, LIST_POINTER_LOWTAG);
 }
 
 lispobj
@@ -99,7 +100,7 @@ alloc_number(long n)
 
         ptr->digits[0] = n;
 
-       return (lispobj) ptr | OTHER_POINTER_LOWTAG;
+       return make_lispobj(ptr, OTHER_POINTER_LOWTAG);
     }
 }
 
@@ -119,10 +120,9 @@ alloc_string(char *str)
 lispobj
 alloc_sap(void *ptr)
 {
-    int n_words_to_alloc =
-       (sizeof(struct sap) - sizeof(lispobj)) / sizeof(u32);
-    struct sap *sap =
-       (struct sap *)alloc_unboxed((int)SAP_WIDETAG, n_words_to_alloc);
+    struct sap *sap;
+    sap=(struct sap *)
+       alloc_unboxed((int)SAP_WIDETAG, sizeof(struct sap)/sizeof(lispobj) -1);
     sap->pointer = ptr;
-    return (lispobj) sap | OTHER_POINTER_LOWTAG;
+    return make_lispobj(sap,OTHER_POINTER_LOWTAG);
 }