X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fparse.c;h=66292affd4c2c33c8371ebf66590d14836afbdb5;hb=eac461c1f1ca91cfe282c779291d582ed6b336cb;hp=62a0f59b85da7b374da3170644ebe93ecf6cb9c0;hpb=426bde0954ef91387b8ab0d4528fad9ec02fa24c;p=sbcl.git diff --git a/src/runtime/parse.c b/src/runtime/parse.c index 62a0f59..66292af 100644 --- a/src/runtime/parse.c +++ b/src/runtime/parse.c @@ -12,10 +12,15 @@ */ #include +#include #include -#include #include "sbcl.h" +#if defined(LISP_FEATURE_WIN32) && defined(LISP_FEATURE_SB_THREAD) +#include "pthreads_win32.h" +#else +#include +#endif #include "runtime.h" #if defined(LISP_FEATURE_SB_LDB) @@ -31,6 +36,7 @@ #include "arch.h" #include "search.h" #include "thread.h" +#include "pseudo-atomic.h" #include "genesis/simple-fun.h" #include "genesis/fdefn.h" @@ -259,13 +265,14 @@ static boolean lookup_symbol(char *name, lispobj *result) } /* Search dynamic space. */ -#ifndef LISP_FEATURE_GENCGC +#if defined(LISP_FEATURE_GENCGC) + headerptr = (lispobj *)DYNAMIC_SPACE_START; + count = (lispobj *)get_alloc_pointer() - headerptr; +#else headerptr = (lispobj *)current_dynamic_space; count = dynamic_space_free_pointer - headerptr; -#else - headerptr = (lispobj *)DYNAMIC_SPACE_START; - count = ((lispobj *)SymbolValue(ALLOCATION_POINTER,0)) - headerptr; #endif + if (search_for_symbol(name, &headerptr, &count)) { *result = make_lispobj(headerptr, OTHER_POINTER_LOWTAG); return 1; @@ -318,18 +325,18 @@ char **ptr; throw_to_monitor(); } else if (token[0] == '$') { if (isalpha(token[1])) { - int free; + int free_ici; int regnum; os_context_t *context; - free = SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,thread)>>2; + free_ici = fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,thread)); - if (free == 0) { + if (free_ici == 0) { printf("Variable ``%s'' is not valid -- there is no current interrupt context.\n", token); throw_to_monitor(); } - context = thread->interrupt_contexts[free - 1]; + context = thread->interrupt_contexts[free_ici - 1]; regnum = parse_regnum(token); if (regnum < 0) {