X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fparse.c;h=8a2d9e32352e5fb9b29b8a218d68ac2bda70e5dc;hb=c3699db2053ff3b5ac6a98d4431c3789496002d8;hp=bd5cc924c89b8a1ba5e27dabb2a0978660271304;hpb=503a50f07740b52908f630b0492cf56556f1a792;p=sbcl.git diff --git a/src/runtime/parse.c b/src/runtime/parse.c index bd5cc92..8a2d9e3 100644 --- a/src/runtime/parse.c +++ b/src/runtime/parse.c @@ -29,6 +29,12 @@ #include "monitor.h" #include "arch.h" #include "search.h" +#include "thread.h" + +#include "genesis/simple-fun.h" +#include "genesis/fdefn.h" +#include "genesis/symbol.h" +#include "genesis/static-symbols.h" static void skip_ws(char **ptr) { @@ -243,26 +249,26 @@ static boolean lookup_symbol(char *name, lispobj *result) /* Search static space. */ headerptr = (lispobj *)STATIC_SPACE_START; count = - (lispobj *)SymbolValue(STATIC_SPACE_FREE_POINTER) - + (lispobj *)SymbolValue(STATIC_SPACE_FREE_POINTER,0) - (lispobj *)STATIC_SPACE_START; if (search_for_symbol(name, &headerptr, &count)) { - *result = (lispobj)headerptr | OTHER_POINTER_LOWTAG; + *result = make_lispobj(headerptr,OTHER_POINTER_LOWTAG); return 1; } /* Search dynamic space. */ headerptr = (lispobj *)DYNAMIC_SPACE_START; -#if !defined(__i386__) +#if !defined(LISP_FEATURE_X86) count = dynamic_space_free_pointer - (lispobj *)DYNAMIC_SPACE_START; #else count = - (lispobj *)SymbolValue(ALLOCATION_POINTER) - + (lispobj *)SymbolValue(ALLOCATION_POINTER,0) - (lispobj *)DYNAMIC_SPACE_START; #endif if (search_for_symbol(name, &headerptr, &count)) { - *result = (lispobj)headerptr | OTHER_POINTER_LOWTAG; + *result = make_lispobj(headerptr, OTHER_POINTER_LOWTAG); return 1; } @@ -289,7 +295,7 @@ parse_regnum(char *s) for (i = 0; i < NREGS ; i++) if (strcasecmp(s + 1, lisp_register_names[i]) == 0) -#ifdef __i386__ +#ifdef LISP_FEATURE_X86 return i*2; #else return i; @@ -302,6 +308,7 @@ parse_regnum(char *s) lispobj parse_lispobj(ptr) char **ptr; { + struct thread *thread=arch_os_get_current_thread(); char *token = parse_token(ptr); long pointer; lispobj result; @@ -315,14 +322,14 @@ char **ptr; int regnum; os_context_t *context; - free = SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX)>>2; + free = SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,thread)>>2; if (free == 0) { printf("Variable ``%s'' is not valid -- there is no current interrupt context.\n", token); throw_to_monitor(); } - context = lisp_interrupt_contexts[free - 1]; + context = thread->interrupt_contexts[free - 1]; regnum = parse_regnum(token); if (regnum < 0) {