X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fsearch.c;h=4bf6b503fa72f95db2e93fff9bdb6e6b8ea593f9;hb=df9e151e5c81ac2716011c246c0e62848527b9b3;hp=01de0d1cae94982eb58430b99fbee963164a77a5;hpb=cea4896b2482b7b2b429c1631d774b4cfbc0efba;p=sbcl.git diff --git a/src/runtime/search.c b/src/runtime/search.c index 01de0d1..4bf6b50 100644 --- a/src/runtime/search.c +++ b/src/runtime/search.c @@ -9,23 +9,27 @@ * files for more information. */ -#include "runtime.h" +#include + #include "sbcl.h" +#include "runtime.h" #include "os.h" #include "search.h" +#include "thread.h" +#include "genesis/primitive-objects.h" boolean search_for_type(int type, lispobj **start, int *count) { lispobj obj, *addr; while ((*count == -1 || (*count > 0)) && - is_valid_lisp_addr((os_vm_address_t)*start)) { + is_valid_lisp_addr((os_vm_address_t)*start)) { obj = **start; addr = *start; if (*count != -1) *count -= 2; - if (TypeOf(obj) == type) + if (widetag_of(obj) == type) return 1; (*start) += 2; @@ -38,15 +42,17 @@ boolean search_for_symbol(char *name, lispobj **start, int *count) struct symbol *symbol; struct vector *symbol_name; - while (search_for_type(type_SymbolHeader, start, count)) { - symbol = (struct symbol *)PTR((lispobj)*start); - if (LowtagOf(symbol->name) == type_OtherPointer) { - symbol_name = (struct vector *)PTR(symbol->name); + while (search_for_type(SYMBOL_HEADER_WIDETAG, start, count)) { + symbol = (struct symbol *)native_pointer((lispobj)*start); + if (lowtag_of(symbol->name) == OTHER_POINTER_LOWTAG) { + symbol_name = (struct vector *)native_pointer(symbol->name); if (is_valid_lisp_addr((os_vm_address_t)symbol_name) && - TypeOf(symbol_name->header) == type_SimpleString && - strcmp((char *)symbol_name->data, name) == 0) + /* FIXME: Broken with more than one type of string + (i.e. even broken given (VECTOR NIL) */ + widetag_of(symbol_name->header) == SIMPLE_BASE_STRING_WIDETAG && + strcmp((char *)symbol_name->data, name) == 0) return 1; - } + } (*start) += 2; } return 0;