X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fparse.c;h=1edfe1849a8e1430ceaacf07d901bc07bca6943b;hb=5f0bd05a15aaf93f46baf9b8aa3e9b0bfbca26ab;hp=62a0f59b85da7b374da3170644ebe93ecf6cb9c0;hpb=426bde0954ef91387b8ab0d4528fad9ec02fa24c;p=sbcl.git diff --git a/src/runtime/parse.c b/src/runtime/parse.c index 62a0f59..1edfe18 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" @@ -43,10 +49,10 @@ static void skip_ws(char **ptr) (*ptr)++; } -static boolean string_to_long(char *token, long *value) +static boolean string_to_long(char *token, uword_t *value) { int base, digit; - long num; + uword_t num; char *ptr; if (token == 0) @@ -190,11 +196,11 @@ char *token; } #endif -long parse_number(ptr) +uword_t parse_number(ptr) char **ptr; { char *token = parse_token(ptr); - long result; + uword_t result; if (token == NULL) { printf("expected a number\n"); @@ -227,7 +233,7 @@ char **ptr; result &= ~7; } else { - long value; + uword_t value; if (!string_to_long(token, &value)) { printf("invalid number: ``%s''\n", token); throw_to_monitor(); @@ -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; @@ -309,27 +316,27 @@ char **ptr; { struct thread *thread=arch_os_get_current_thread(); char *token = parse_token(ptr); - long pointer; + uword_t pointer; lispobj result; - long value; + uword_t value; if (token == NULL) { printf("expected an object\n"); 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) {