diff options
Diffstat (limited to 'gdb/scm-exp.c')
-rw-r--r-- | gdb/scm-exp.c | 238 |
1 files changed, 160 insertions, 78 deletions
diff --git a/gdb/scm-exp.c b/gdb/scm-exp.c index 63995639dcf..bacc29a8541 100644 --- a/gdb/scm-exp.c +++ b/gdb/scm-exp.c @@ -1,21 +1,22 @@ /* Scheme/Guile language support routines for GDB, the GNU debugger. Copyright 1995 Free Software Foundation, Inc. -This file is part of GDB. + This file is part of GDB. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "defs.h" #include "symtab.h" @@ -38,7 +39,7 @@ static LONGEST scm_istr2int PARAMS ((char *, int, int)); static void scm_lreadr PARAMS ((int)); static LONGEST -scm_istr2int(str, len, radix) +scm_istr2int (str, len, radix) char *str; int len; int radix; @@ -48,42 +49,65 @@ scm_istr2int(str, len, radix) int c; int sign = 0; - if (0 >= len) return SCM_BOOL_F; /* zero scm_length */ + if (0 >= len) + return SCM_BOOL_F; /* zero scm_length */ switch (str[0]) - { /* leading sign */ + { /* leading sign */ case '-': case '+': sign = str[0]; - if (++i==len) - return SCM_BOOL_F; /* bad if lone `+' or `-' */ + if (++i == len) + return SCM_BOOL_F; /* bad if lone `+' or `-' */ } - do { - switch (c = str[i++]) { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - c = c - '0'; - goto accumulate; - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - c = c-'A'+10; - goto accumulate; - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - c = c-'a'+10; - accumulate: - if (c >= radix) return SCM_BOOL_F; /* bad digit for radix */ - inum *= radix; - inum += c; - break; - default: - return SCM_BOOL_F; /* not a digit */ + do + { + switch (c = str[i++]) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + c = c - '0'; + goto accumulate; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + c = c - 'A' + 10; + goto accumulate; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + c = c - 'a' + 10; + accumulate: + if (c >= radix) + return SCM_BOOL_F; /* bad digit for radix */ + inum *= radix; + inum += c; + break; + default: + return SCM_BOOL_F; /* not a digit */ + } } - } while (i < len); + while (i < len); if (sign == '-') inum = -inum; return SCM_MAKINUM (inum); } static LONGEST -scm_istring2number(str, len, radix) +scm_istring2number (str, len, radix) char *str; int len; int radix; @@ -94,33 +118,68 @@ scm_istring2number(str, len, radix) #if 0 SCM res; #endif - if (len==1) - if (*str=='+' || *str=='-') /* Catches lone `+' and `-' for speed */ + if (len == 1) + if (*str == '+' || *str == '-') /* Catches lone `+' and `-' for speed */ return SCM_BOOL_F; - while ((len-i) >= 2 && str[i]=='#' && ++i) - switch (str[i++]) { - case 'b': case 'B': if (rx_p++) return SCM_BOOL_F; radix = 2; break; - case 'o': case 'O': if (rx_p++) return SCM_BOOL_F; radix = 8; break; - case 'd': case 'D': if (rx_p++) return SCM_BOOL_F; radix = 10; break; - case 'x': case 'X': if (rx_p++) return SCM_BOOL_F; radix = 16; break; - case 'i': case 'I': if (ex_p++) return SCM_BOOL_F; ex = 2; break; - case 'e': case 'E': if (ex_p++) return SCM_BOOL_F; ex = 1; break; - default: return SCM_BOOL_F; - } + while ((len - i) >= 2 && str[i] == '#' && ++i) + switch (str[i++]) + { + case 'b': + case 'B': + if (rx_p++) + return SCM_BOOL_F; + radix = 2; + break; + case 'o': + case 'O': + if (rx_p++) + return SCM_BOOL_F; + radix = 8; + break; + case 'd': + case 'D': + if (rx_p++) + return SCM_BOOL_F; + radix = 10; + break; + case 'x': + case 'X': + if (rx_p++) + return SCM_BOOL_F; + radix = 16; + break; + case 'i': + case 'I': + if (ex_p++) + return SCM_BOOL_F; + ex = 2; + break; + case 'e': + case 'E': + if (ex_p++) + return SCM_BOOL_F; + ex = 1; + break; + default: + return SCM_BOOL_F; + } - switch (ex) { - case 1: - return scm_istr2int(&str[i], len-i, radix); - case 0: - return scm_istr2int(&str[i], len-i, radix); + switch (ex) + { + case 1: + return scm_istr2int (&str[i], len - i, radix); + case 0: + return scm_istr2int (&str[i], len - i, radix); #if 0 - if NFALSEP(res) return res; + if NFALSEP + (res) return res; #ifdef FLOATS - case 2: return scm_istr2flo(&str[i], len-i, radix); + case 2: + return scm_istr2flo (&str[i], len - i, radix); #endif #endif - } + } return SCM_BOOL_F; } @@ -140,11 +199,14 @@ scm_read_token (c, weird) case ')': case '\"': case ';': - case ' ': case '\t': case '\r': case '\f': + case ' ': + case '\t': + case '\r': + case '\f': case '\n': if (weird) goto default_case; - case '\0': /* End of line */ + case '\0': /* End of line */ eof_case: --lexptr; return; @@ -180,7 +242,7 @@ scm_read_token (c, weird) } } -static int +static int scm_skip_ws () { register int c; @@ -201,7 +263,11 @@ scm_skip_ws () case '\n': break; } - case ' ': case '\t': case '\r': case '\f': case '\n': + case ' ': + case '\t': + case '\r': + case '\f': + case '\n': break; default: return c; @@ -231,7 +297,7 @@ scm_lreadr (skipping) int c, j; struct stoken str; LONGEST svalue = 0; - tryagain: +tryagain: c = *lexptr++; switch (c) { @@ -274,28 +340,36 @@ scm_lreadr (skipping) case '(': scm_lreadparen (skipping); return; - case 't': case 'T': + case 't': + case 'T': svalue = SCM_BOOL_T; goto handle_immediate; - case 'f': case 'F': + case 'f': + case 'F': svalue = SCM_BOOL_F; goto handle_immediate; - case 'b': case 'B': - case 'o': case 'O': - case 'd': case 'D': - case 'x': case 'X': - case 'i': case 'I': - case 'e': case 'E': + case 'b': + case 'B': + case 'o': + case 'O': + case 'd': + case 'D': + case 'x': + case 'X': + case 'i': + case 'I': + case 'e': + case 'E': lexptr--; c = '#'; goto num; - case '*': /* bitvector */ + case '*': /* bitvector */ scm_read_token (c, 0); return; case '{': scm_read_token (c, 1); return; - case '\\': /* character */ + case '\\': /* character */ c = *lexptr++; scm_read_token (c, 0); return; @@ -352,14 +426,22 @@ scm_lreadr (skipping) } } return; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case '.': case '-': case '+': num: { - str.ptr = lexptr-1; + str.ptr = lexptr - 1; scm_read_token (c, 0); if (!skipping) { @@ -377,7 +459,7 @@ scm_lreadr (skipping) do_symbol: #endif default: - str.ptr = lexptr-1; + str.ptr = lexptr - 1; scm_read_token (c, 0); tok: if (!skipping) @@ -394,7 +476,7 @@ scm_lreadr (skipping) } return; } - handle_immediate: +handle_immediate: if (!skipping) { write_exp_elt_opcode (OP_LONG); @@ -407,7 +489,7 @@ scm_lreadr (skipping) int scm_parse () { - char* start; + char *start; while (*lexptr == ' ') lexptr++; start = lexptr; |