- return 0;
- }
- break;
- default:
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wf3: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
- }
- break;
- case type_ListPointer:
- if ((int)pointer != ((int)start_addr+type_ListPointer)) {
- if (pointer_filter_verbose)
- fprintf(stderr,"*Wl1: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- return 0;
- }
- /* Is it a plausible cons? */
- if((Pointerp(start_addr[0])
- || ((start_addr[0] & 3) == 0) /* fixnum */
- || (TypeOf(start_addr[0]) == type_BaseChar)
- || (TypeOf(start_addr[0]) == type_UnboundMarker))
- && (Pointerp(start_addr[1])
- || ((start_addr[1] & 3) == 0) /* fixnum */
- || (TypeOf(start_addr[1]) == type_BaseChar)
- || (TypeOf(start_addr[1]) == type_UnboundMarker))) {
- break;
- } else {
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wl2: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
- }
- case type_InstancePointer:
- if ((int)pointer != ((int)start_addr+type_InstancePointer)) {
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wi1: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
- }
- if (TypeOf(start_addr[0]) != type_InstanceHeader) {
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wi2: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
- }
- break;
- case type_OtherPointer:
- if ((int)pointer != ((int)start_addr+type_OtherPointer)) {
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wo1: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
- }
- /* Is it plausible? Not a cons. X should check the headers. */
- if(Pointerp(start_addr[0]) || ((start_addr[0] & 3) == 0)) {
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wo2: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
- }
- switch (TypeOf(start_addr[0])) {
- case type_UnboundMarker:
- case type_BaseChar:
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wo3: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
-
- /* only pointed to by function pointers? */
- case type_ClosureHeader:
- case type_FuncallableInstanceHeader:
- case type_ByteCodeFunction:
- case type_ByteCodeClosure:
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wo4: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
-
- case type_InstanceHeader:
- if (pointer_filter_verbose) {
- fprintf(stderr,"*Wo5: %x %x %x\n", (unsigned int) pointer,
- (unsigned int) start_addr, *start_addr);
- }
- return 0;
-
- /* the valid other immediate pointer objects */
- case type_SimpleVector:
- case type_Ratio:
- case type_Complex:
+ break;
+ case type_ListPointer:
+ if ((int)pointer != ((int)start_addr+type_ListPointer)) {
+ if (pointer_filter_verbose)
+ fprintf(stderr,"*Wl1: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ return 0;
+ }
+ /* Is it plausible cons? */
+ if((is_lisp_pointer(start_addr[0])
+ || ((start_addr[0] & 3) == 0) /* fixnum */
+ || (TypeOf(start_addr[0]) == type_BaseChar)
+ || (TypeOf(start_addr[0]) == type_UnboundMarker))
+ && (is_lisp_pointer(start_addr[1])
+ || ((start_addr[1] & 3) == 0) /* fixnum */
+ || (TypeOf(start_addr[1]) == type_BaseChar)
+ || (TypeOf(start_addr[1]) == type_UnboundMarker))) {
+ break;
+ } else {
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wl2: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+ }
+ case type_InstancePointer:
+ if ((int)pointer != ((int)start_addr+type_InstancePointer)) {
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wi1: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+ }
+ if (TypeOf(start_addr[0]) != type_InstanceHeader) {
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wi2: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+ }
+ break;
+ case type_OtherPointer:
+ if ((int)pointer != ((int)start_addr+type_OtherPointer)) {
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wo1: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+ }
+ /* Is it plausible? Not a cons. X should check the headers. */
+ if(is_lisp_pointer(start_addr[0]) || ((start_addr[0] & 3) == 0)) {
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wo2: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+ }
+ switch (TypeOf(start_addr[0])) {
+ case type_UnboundMarker:
+ case type_BaseChar:
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wo3: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+
+ /* only pointed to by function pointers? */
+ case type_ClosureHeader:
+ case type_FuncallableInstanceHeader:
+ case type_ByteCodeFunction:
+ case type_ByteCodeClosure:
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wo4: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+
+ case type_InstanceHeader:
+ if (pointer_filter_verbose) {
+ fprintf(stderr,"*Wo5: %x %x %x\n", (unsigned int) pointer,
+ (unsigned int) start_addr, *start_addr);
+ }
+ return 0;
+
+ /* the valid other immediate pointer objects */
+ case type_SimpleVector:
+ case type_Ratio:
+ case type_Complex: