X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fparse.c;h=a74b11f906edddb744119db60ab95e4e8d62634f;hb=077b294463eb6819c0eba67bb8ce71ec66d61ba8;hp=80546411a30e1c2bb9b58581a7d2c13876fe2d52;hpb=c01ff86b012283af04641a02e45f066aa7cdb10c;p=sbcl.git diff --git a/src/runtime/parse.c b/src/runtime/parse.c index 8054641..a74b11f 100644 --- a/src/runtime/parse.c +++ b/src/runtime/parse.c @@ -213,29 +213,30 @@ char *parse_addr(ptr) char **ptr; { char *token = parse_token(ptr); - long result; + lispobj result; if (token == NULL) { printf("expected an address\n"); throw_to_monitor(); } else if (token[0] == '$') { - if (!lookup_variable(token+1, (lispobj *)&result)) { + if (!lookup_variable(token+1, &result)) { printf("unknown variable: ``%s''\n", token); throw_to_monitor(); } result &= ~7; } else { - if (!string_to_long(token, &result)) { + long value; + if (!string_to_long(token, &value)) { printf("invalid number: ``%s''\n", token); throw_to_monitor(); } - result &= ~3; + result = (value & ~3); } if (!is_valid_lisp_addr((os_vm_address_t)result)) { - printf("invalid Lisp-level address: 0x%lx\n", result); + printf("invalid Lisp-level address: %p\n", (void *)result); throw_to_monitor(); } @@ -250,23 +251,20 @@ static boolean lookup_symbol(char *name, lispobj *result) /* Search static space. */ headerptr = (lispobj *)STATIC_SPACE_START; count = - (lispobj *)SymbolValue(STATIC_SPACE_FREE_POINTER,0) - - (lispobj *)STATIC_SPACE_START; + (lispobj *)SymbolValue(STATIC_SPACE_FREE_POINTER,0) - + (lispobj *)STATIC_SPACE_START; if (search_for_symbol(name, &headerptr, &count)) { *result = make_lispobj(headerptr,OTHER_POINTER_LOWTAG); return 1; } /* Search dynamic space. */ - headerptr = (lispobj *)DYNAMIC_SPACE_START; -#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) - count = - dynamic_space_free_pointer - - (lispobj *)DYNAMIC_SPACE_START; +#ifndef LISP_FEATURE_GENCGC + headerptr = (lispobj *)current_dynamic_space; + count = dynamic_space_free_pointer - headerptr; #else - count = - (lispobj *)SymbolValue(ALLOCATION_POINTER,0) - - (lispobj *)DYNAMIC_SPACE_START; + 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); @@ -280,29 +278,29 @@ static int parse_regnum(char *s) { if ((s[1] == 'R') || (s[1] == 'r')) { - int regnum; + int regnum; - if (s[2] == '\0') - return -1; + if (s[2] == '\0') + return -1; - /* skip the $R part and call atoi on the number */ - regnum = atoi(s + 2); - if ((regnum >= 0) && (regnum < NREGS)) - return regnum; - else - return -1; + /* skip the $R part and call atoi on the number */ + regnum = atoi(s + 2); + if ((regnum >= 0) && (regnum < NREGS)) + return regnum; + else + return -1; } else { - int i; + int i; - for (i = 0; i < NREGS ; i++) - if (strcasecmp(s + 1, lisp_register_names[i]) == 0) + for (i = 0; i < NREGS ; i++) + if (strcasecmp(s + 1, lisp_register_names[i]) == 0) #ifdef LISP_FEATURE_X86 - return i*2; + return i*2; #else - return i; + return i; #endif - - return -1; + + return -1; } } @@ -313,33 +311,34 @@ char **ptr; char *token = parse_token(ptr); long pointer; lispobj result; + long value; if (token == NULL) { printf("expected an object\n"); throw_to_monitor(); } else if (token[0] == '$') { - if (isalpha(token[1])) { - int free; - int regnum; - os_context_t *context; + if (isalpha(token[1])) { + 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) { - printf("Variable ``%s'' is not valid -- there is no current interrupt context.\n", token); - throw_to_monitor(); - } + 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) { - printf("bogus register: ``%s''\n", token); - throw_to_monitor(); - } + regnum = parse_regnum(token); + if (regnum < 0) { + printf("bogus register: ``%s''\n", token); + throw_to_monitor(); + } - result = *os_context_register_addr(context, regnum); - } else if (!lookup_variable(token+1, &result)) { + result = *os_context_register_addr(context, regnum); + } else if (!lookup_variable(token+1, &result)) { printf("unknown variable: ``%s''\n", token); throw_to_monitor(); } @@ -358,8 +357,8 @@ char **ptr; throw_to_monitor(); } } - else if (string_to_long(token, (long *)&result)) - ; + else if (string_to_long(token, &value)) + result = value; else if (lookup_symbol(token, &result)) ; else {