0.8.16.23:
[sbcl.git] / src / runtime / purify.c
index 1cac459..3750895 100644 (file)
@@ -27,6 +27,7 @@
 #include "interrupt.h"
 #include "purify.h"
 #include "interr.h"
+#include "fixnump.h"
 #include "gc.h"
 #include "gc-internal.h"
 #include "thread.h"
@@ -198,11 +199,11 @@ valid_dynamic_space_pointer(lispobj *pointer, lispobj *start_addr)
        /* Is it plausible cons? */
        if ((is_lisp_pointer(start_addr[0])
            || ((start_addr[0] & 3) == 0) /* fixnum */
-           || (widetag_of(start_addr[0]) == BASE_CHAR_WIDETAG)
+           || (widetag_of(start_addr[0]) == CHARACTER_WIDETAG)
            || (widetag_of(start_addr[0]) == UNBOUND_MARKER_WIDETAG))
           && (is_lisp_pointer(start_addr[1])
               || ((start_addr[1] & 3) == 0) /* fixnum */
-              || (widetag_of(start_addr[1]) == BASE_CHAR_WIDETAG)
+              || (widetag_of(start_addr[1]) == CHARACTER_WIDETAG)
               || (widetag_of(start_addr[1]) == UNBOUND_MARKER_WIDETAG))) {
            break;
        } else {
@@ -246,7 +247,7 @@ valid_dynamic_space_pointer(lispobj *pointer, lispobj *start_addr)
        }
        switch (widetag_of(start_addr[0])) {
        case UNBOUND_MARKER_WIDETAG:
-       case BASE_CHAR_WIDETAG:
+       case CHARACTER_WIDETAG:
            if (pointer_filter_verbose) {
                fprintf(stderr,"*Wo3: %x %x %x\n", (unsigned int) pointer, 
                        (unsigned int) start_addr, *start_addr);
@@ -284,6 +285,9 @@ valid_dynamic_space_pointer(lispobj *pointer, lispobj *start_addr)
 #endif
        case SIMPLE_ARRAY_WIDETAG:
        case COMPLEX_BASE_STRING_WIDETAG:
+#ifdef COMPLEX_CHARACTER_STRING_WIDETAG
+       case COMPLEX_CHARACTER_STRING_WIDETAG:
+#endif
        case COMPLEX_VECTOR_NIL_WIDETAG:
        case COMPLEX_BIT_VECTOR_WIDETAG:
        case COMPLEX_VECTOR_WIDETAG:
@@ -300,6 +304,9 @@ valid_dynamic_space_pointer(lispobj *pointer, lispobj *start_addr)
 #endif
        case SIMPLE_ARRAY_NIL_WIDETAG:
        case SIMPLE_BASE_STRING_WIDETAG:
+#ifdef SIMPLE_CHARACTER_STRING_WIDETAG
+       case SIMPLE_CHARACTER_STRING_WIDETAG:
+#endif
        case SIMPLE_BIT_VECTOR_WIDETAG:
        case SIMPLE_ARRAY_UNSIGNED_BYTE_2_WIDETAG:
        case SIMPLE_ARRAY_UNSIGNED_BYTE_4_WIDETAG:
@@ -911,6 +918,9 @@ ptrans_otherptr(lispobj thing, lispobj header, boolean constant)
       case COMPLEX_WIDETAG:
       case SIMPLE_ARRAY_WIDETAG:
       case COMPLEX_BASE_STRING_WIDETAG:
+#ifdef COMPLEX_CHARACTER_STRING_WIDETAG
+    case COMPLEX_CHARACTER_STRING_WIDETAG:
+#endif
       case COMPLEX_BIT_VECTOR_WIDETAG:
       case COMPLEX_VECTOR_NIL_WIDETAG:
       case COMPLEX_VECTOR_WIDETAG:
@@ -930,6 +940,11 @@ ptrans_otherptr(lispobj thing, lispobj header, boolean constant)
       case SIMPLE_BASE_STRING_WIDETAG:
         return ptrans_vector(thing, 8, 1, 0, constant);
 
+#ifdef SIMPLE_CHARACTER_STRING_WIDETAG
+    case SIMPLE_CHARACTER_STRING_WIDETAG:
+       return ptrans_vector(thing, 32, 1, 0, constant);
+#endif
+
       case SIMPLE_BIT_VECTOR_WIDETAG:
         return ptrans_vector(thing, 1, 0, 0, constant);
 
@@ -1151,6 +1166,13 @@ pscav(lispobj *addr, int nwords, boolean constant)
                 count = CEILING(NWORDS(fixnum_value(vector->length)+1,8)+2,2);
                 break;
 
+#ifdef SIMPLE_CHARACTER_STRING_WIDETAG
+           case SIMPLE_CHARACTER_STRING_WIDETAG:
+               vector = (struct vector *)addr;
+               count = CEILING(NWORDS(fixnum_value(vector->length)+1,32)+2,2);
+               break;
+#endif
+
               case SIMPLE_BIT_VECTOR_WIDETAG:
                 vector = (struct vector *)addr;
                 count = CEILING(NWORDS(fixnum_value(vector->length),1)+2,2);