OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [scm-valprint.c] - Diff between revs 227 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 227 Rev 816
/* Scheme/Guile language support routines for GDB, the GNU debugger.
/* Scheme/Guile language support routines for GDB, the GNU debugger.
 
 
   Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2005, 2007, 2008, 2009,
   Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2005, 2007, 2008, 2009,
   2010 Free Software Foundation, Inc.
   2010 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
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
#include "defs.h"
#include "defs.h"
#include "symtab.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "gdbtypes.h"
#include "expression.h"
#include "expression.h"
#include "parser-defs.h"
#include "parser-defs.h"
#include "language.h"
#include "language.h"
#include "value.h"
#include "value.h"
#include "scm-lang.h"
#include "scm-lang.h"
#include "valprint.h"
#include "valprint.h"
#include "gdbcore.h"
#include "gdbcore.h"
#include "c-lang.h"
#include "c-lang.h"
#include "infcall.h"
#include "infcall.h"
#include "objfiles.h"
#include "objfiles.h"
 
 
static void scm_ipruk (char *, struct type *, LONGEST, struct ui_file *);
static void scm_ipruk (char *, struct type *, LONGEST, struct ui_file *);
static void scm_scmval_print (struct type *, LONGEST, struct ui_file *,
static void scm_scmval_print (struct type *, LONGEST, struct ui_file *,
                              int, const struct value_print_options *);
                              int, const struct value_print_options *);
static void scm_scmlist_print (struct type *, LONGEST, struct ui_file *,
static void scm_scmlist_print (struct type *, LONGEST, struct ui_file *,
                               int, const struct value_print_options *);
                               int, const struct value_print_options *);
static int scm_inferior_print (struct type *, LONGEST, struct ui_file *,
static int scm_inferior_print (struct type *, LONGEST, struct ui_file *,
                               int, const struct value_print_options *);
                               int, const struct value_print_options *);
 
 
/* Prints the SCM value VALUE by invoking the inferior, if appropraite.
/* Prints the SCM value VALUE by invoking the inferior, if appropraite.
   Returns >= 0 on success;  return -1 if the inferior cannot/should not
   Returns >= 0 on success;  return -1 if the inferior cannot/should not
   print VALUE. */
   print VALUE. */
 
 
static int
static int
scm_inferior_print (struct type *type, LONGEST value, struct ui_file *stream,
scm_inferior_print (struct type *type, LONGEST value, struct ui_file *stream,
                    int recurse, const struct value_print_options *options)
                    int recurse, const struct value_print_options *options)
{
{
  struct value *func, *arg, *result;
  struct value *func, *arg, *result;
  struct symbol *gdb_output_sym, *gdb_output_len_sym;
  struct symbol *gdb_output_sym, *gdb_output_len_sym;
  char *output;
  char *output;
  int ret, output_len;
  int ret, output_len;
 
 
  func = find_function_in_inferior ("gdb_print", NULL);
  func = find_function_in_inferior ("gdb_print", NULL);
  arg = value_from_longest (type, value);
  arg = value_from_longest (type, value);
 
 
  result = call_function_by_hand (func, 1, &arg);
  result = call_function_by_hand (func, 1, &arg);
  ret = (int) value_as_long (result);
  ret = (int) value_as_long (result);
  if (ret == 0)
  if (ret == 0)
    {
    {
      /* XXX: Should we cache these symbols?  */
      /* XXX: Should we cache these symbols?  */
      gdb_output_sym =
      gdb_output_sym =
        lookup_symbol_global ("gdb_output", NULL, NULL, VAR_DOMAIN);
        lookup_symbol_global ("gdb_output", NULL, NULL, VAR_DOMAIN);
      gdb_output_len_sym =
      gdb_output_len_sym =
        lookup_symbol_global ("gdb_output_length", NULL, NULL, VAR_DOMAIN);
        lookup_symbol_global ("gdb_output_length", NULL, NULL, VAR_DOMAIN);
 
 
      if ((gdb_output_sym == NULL) || (gdb_output_len_sym == NULL))
      if ((gdb_output_sym == NULL) || (gdb_output_len_sym == NULL))
        ret = -1;
        ret = -1;
      else
      else
        {
        {
          struct value *remote_buffer;
          struct value *remote_buffer;
 
 
          read_memory (SYMBOL_VALUE_ADDRESS (gdb_output_len_sym),
          read_memory (SYMBOL_VALUE_ADDRESS (gdb_output_len_sym),
                       (char *) &output_len, sizeof (output_len));
                       (char *) &output_len, sizeof (output_len));
 
 
          output = (char *) alloca (output_len);
          output = (char *) alloca (output_len);
          remote_buffer = value_at (type,
          remote_buffer = value_at (type,
                                    SYMBOL_VALUE_ADDRESS (gdb_output_sym));
                                    SYMBOL_VALUE_ADDRESS (gdb_output_sym));
          read_memory (value_as_address (remote_buffer),
          read_memory (value_as_address (remote_buffer),
                       output, output_len);
                       output, output_len);
 
 
          ui_file_write (stream, output, output_len);
          ui_file_write (stream, output, output_len);
        }
        }
    }
    }
 
 
  return ret;
  return ret;
}
}
 
 
/* {Names of immediate symbols}
/* {Names of immediate symbols}
 * This table must agree with the declarations in scm.h: {Immediate Symbols}.*/
 * This table must agree with the declarations in scm.h: {Immediate Symbols}.*/
 
 
static char *scm_isymnames[] =
static char *scm_isymnames[] =
{
{
  /* This table must agree with the declarations */
  /* This table must agree with the declarations */
  "and",
  "and",
  "begin",
  "begin",
  "case",
  "case",
  "cond",
  "cond",
  "do",
  "do",
  "if",
  "if",
  "lambda",
  "lambda",
  "let",
  "let",
  "let*",
  "let*",
  "letrec",
  "letrec",
  "or",
  "or",
  "quote",
  "quote",
  "set!",
  "set!",
  "define",
  "define",
#if 0
#if 0
  "literal-variable-ref",
  "literal-variable-ref",
  "literal-variable-set!",
  "literal-variable-set!",
#endif
#endif
  "apply",
  "apply",
  "call-with-current-continuation",
  "call-with-current-continuation",
 
 
 /* user visible ISYMS */
 /* user visible ISYMS */
 /* other keywords */
 /* other keywords */
 /* Flags */
 /* Flags */
 
 
  "#f",
  "#f",
  "#t",
  "#t",
  "#<undefined>",
  "#<undefined>",
  "#<eof>",
  "#<eof>",
  "()",
  "()",
  "#<unspecified>"
  "#<unspecified>"
};
};
 
 
static void
static void
scm_scmlist_print (struct type *type, LONGEST svalue,
scm_scmlist_print (struct type *type, LONGEST svalue,
                   struct ui_file *stream, int recurse,
                   struct ui_file *stream, int recurse,
                   const struct value_print_options *options)
                   const struct value_print_options *options)
{
{
#define SCM_SIZE (TYPE_LENGTH (type))
#define SCM_SIZE (TYPE_LENGTH (type))
#define SCM_BYTE_ORDER (gdbarch_byte_order (get_type_arch (type)))
#define SCM_BYTE_ORDER (gdbarch_byte_order (get_type_arch (type)))
  unsigned int more = options->print_max;
  unsigned int more = options->print_max;
  if (recurse > 6)
  if (recurse > 6)
    {
    {
      fputs_filtered ("...", stream);
      fputs_filtered ("...", stream);
      return;
      return;
    }
    }
  scm_scmval_print (type, SCM_CAR (svalue), stream, recurse + 1, options);
  scm_scmval_print (type, SCM_CAR (svalue), stream, recurse + 1, options);
  svalue = SCM_CDR (svalue);
  svalue = SCM_CDR (svalue);
  for (; SCM_NIMP (svalue); svalue = SCM_CDR (svalue))
  for (; SCM_NIMP (svalue); svalue = SCM_CDR (svalue))
    {
    {
      if (SCM_NECONSP (svalue))
      if (SCM_NECONSP (svalue))
        break;
        break;
      fputs_filtered (" ", stream);
      fputs_filtered (" ", stream);
      if (--more == 0)
      if (--more == 0)
        {
        {
          fputs_filtered ("...", stream);
          fputs_filtered ("...", stream);
          return;
          return;
        }
        }
      scm_scmval_print (type, SCM_CAR (svalue), stream, recurse + 1, options);
      scm_scmval_print (type, SCM_CAR (svalue), stream, recurse + 1, options);
    }
    }
  if (SCM_NNULLP (svalue))
  if (SCM_NNULLP (svalue))
    {
    {
      fputs_filtered (" . ", stream);
      fputs_filtered (" . ", stream);
      scm_scmval_print (type, svalue, stream, recurse + 1, options);
      scm_scmval_print (type, svalue, stream, recurse + 1, options);
    }
    }
#undef SCM_BYTE_ORDER
#undef SCM_BYTE_ORDER
#undef SCM_SIZE
#undef SCM_SIZE
}
}
 
 
static void
static void
scm_ipruk (char *hdr, struct type *type, LONGEST ptr,
scm_ipruk (char *hdr, struct type *type, LONGEST ptr,
           struct ui_file *stream)
           struct ui_file *stream)
{
{
#define SCM_SIZE (TYPE_LENGTH (type))
#define SCM_SIZE (TYPE_LENGTH (type))
#define SCM_BYTE_ORDER (gdbarch_byte_order (get_type_arch (type)))
#define SCM_BYTE_ORDER (gdbarch_byte_order (get_type_arch (type)))
  fprintf_filtered (stream, "#<unknown-%s", hdr);
  fprintf_filtered (stream, "#<unknown-%s", hdr);
  if (SCM_CELLP (ptr))
  if (SCM_CELLP (ptr))
    fprintf_filtered (stream, " (0x%lx . 0x%lx) @",
    fprintf_filtered (stream, " (0x%lx . 0x%lx) @",
                      (long) SCM_CAR (ptr), (long) SCM_CDR (ptr));
                      (long) SCM_CAR (ptr), (long) SCM_CDR (ptr));
  fprintf_filtered (stream, " 0x%s>", phex_nz (ptr, SCM_SIZE));
  fprintf_filtered (stream, " 0x%s>", phex_nz (ptr, SCM_SIZE));
#undef SCM_BYTE_ORDER
#undef SCM_BYTE_ORDER
#undef SCM_SIZE
#undef SCM_SIZE
}
}
 
 
static void
static void
scm_scmval_print (struct type *type, LONGEST svalue,
scm_scmval_print (struct type *type, LONGEST svalue,
                  struct ui_file *stream, int recurse,
                  struct ui_file *stream, int recurse,
                  const struct value_print_options *options)
                  const struct value_print_options *options)
{
{
  struct gdbarch *gdbarch = get_type_arch (type);
  struct gdbarch *gdbarch = get_type_arch (type);
 
 
#define SCM_SIZE (TYPE_LENGTH (type))
#define SCM_SIZE (TYPE_LENGTH (type))
#define SCM_BYTE_ORDER (gdbarch_byte_order (gdbarch))
#define SCM_BYTE_ORDER (gdbarch_byte_order (gdbarch))
taloop:
taloop:
  switch (7 & (int) svalue)
  switch (7 & (int) svalue)
    {
    {
    case 2:
    case 2:
    case 6:
    case 6:
      print_longest (stream,
      print_longest (stream,
                     options->format ? options->format : 'd',
                     options->format ? options->format : 'd',
                     1, svalue >> 2);
                     1, svalue >> 2);
      break;
      break;
    case 4:
    case 4:
      if (SCM_ICHRP (svalue))
      if (SCM_ICHRP (svalue))
        {
        {
          svalue = SCM_ICHR (svalue);
          svalue = SCM_ICHR (svalue);
          scm_printchar (svalue, builtin_type (gdbarch)->builtin_char,
          scm_printchar (svalue, builtin_type (gdbarch)->builtin_char,
                         stream);
                         stream);
          break;
          break;
        }
        }
      else if (SCM_IFLAGP (svalue)
      else if (SCM_IFLAGP (svalue)
               && (SCM_ISYMNUM (svalue)
               && (SCM_ISYMNUM (svalue)
                   < (sizeof scm_isymnames / sizeof (char *))))
                   < (sizeof scm_isymnames / sizeof (char *))))
        {
        {
          fputs_filtered (SCM_ISYMCHARS (svalue), stream);
          fputs_filtered (SCM_ISYMCHARS (svalue), stream);
          break;
          break;
        }
        }
      else if (SCM_ILOCP (svalue))
      else if (SCM_ILOCP (svalue))
        {
        {
          fprintf_filtered (stream, "#@%ld%c%ld",
          fprintf_filtered (stream, "#@%ld%c%ld",
                            (long) SCM_IFRAME (svalue),
                            (long) SCM_IFRAME (svalue),
                            SCM_ICDRP (svalue) ? '-' : '+',
                            SCM_ICDRP (svalue) ? '-' : '+',
                            (long) SCM_IDIST (svalue));
                            (long) SCM_IDIST (svalue));
          break;
          break;
        }
        }
      else
      else
        goto idef;
        goto idef;
      break;
      break;
    case 1:
    case 1:
      /* gloc */
      /* gloc */
      svalue = SCM_CAR (svalue - 1);
      svalue = SCM_CAR (svalue - 1);
      goto taloop;
      goto taloop;
    default:
    default:
    idef:
    idef:
      scm_ipruk ("immediate", type, svalue, stream);
      scm_ipruk ("immediate", type, svalue, stream);
      break;
      break;
    case 0:
    case 0:
 
 
      switch (SCM_TYP7 (svalue))
      switch (SCM_TYP7 (svalue))
        {
        {
        case scm_tcs_cons_gloc:
        case scm_tcs_cons_gloc:
          if (SCM_CDR (SCM_CAR (svalue) - 1L) == 0)
          if (SCM_CDR (SCM_CAR (svalue) - 1L) == 0)
            {
            {
#if 0
#if 0
              SCM name;
              SCM name;
#endif
#endif
              fputs_filtered ("#<latte ", stream);
              fputs_filtered ("#<latte ", stream);
#if 1
#if 1
              fputs_filtered ("???", stream);
              fputs_filtered ("???", stream);
#else
#else
              name = ((SCM n *) (STRUCT_TYPE (exp)))[struct_i_name];
              name = ((SCM n *) (STRUCT_TYPE (exp)))[struct_i_name];
              scm_lfwrite (CHARS (name),
              scm_lfwrite (CHARS (name),
                           (sizet) sizeof (char),
                           (sizet) sizeof (char),
                             (sizet) LENGTH (name),
                             (sizet) LENGTH (name),
                           port);
                           port);
#endif
#endif
              fprintf_filtered (stream, " #X%s>", phex_nz (svalue, SCM_SIZE));
              fprintf_filtered (stream, " #X%s>", phex_nz (svalue, SCM_SIZE));
              break;
              break;
            }
            }
        case scm_tcs_cons_imcar:
        case scm_tcs_cons_imcar:
        case scm_tcs_cons_nimcar:
        case scm_tcs_cons_nimcar:
          fputs_filtered ("(", stream);
          fputs_filtered ("(", stream);
          scm_scmlist_print (type, svalue, stream, recurse + 1, options);
          scm_scmlist_print (type, svalue, stream, recurse + 1, options);
          fputs_filtered (")", stream);
          fputs_filtered (")", stream);
          break;
          break;
        case scm_tcs_closures:
        case scm_tcs_closures:
          fputs_filtered ("#<CLOSURE ", stream);
          fputs_filtered ("#<CLOSURE ", stream);
          scm_scmlist_print (type, SCM_CODE (svalue), stream,
          scm_scmlist_print (type, SCM_CODE (svalue), stream,
                             recurse + 1, options);
                             recurse + 1, options);
          fputs_filtered (">", stream);
          fputs_filtered (">", stream);
          break;
          break;
        case scm_tc7_string:
        case scm_tc7_string:
          {
          {
            int len = SCM_LENGTH (svalue);
            int len = SCM_LENGTH (svalue);
            CORE_ADDR addr = (CORE_ADDR) SCM_CDR (svalue);
            CORE_ADDR addr = (CORE_ADDR) SCM_CDR (svalue);
            int i;
            int i;
            int done = 0;
            int done = 0;
            int buf_size;
            int buf_size;
            gdb_byte buffer[64];
            gdb_byte buffer[64];
            int truncate = options->print_max && len > (int) options->print_max;
            int truncate = options->print_max && len > (int) options->print_max;
            if (truncate)
            if (truncate)
              len = options->print_max;
              len = options->print_max;
            fputs_filtered ("\"", stream);
            fputs_filtered ("\"", stream);
            for (; done < len; done += buf_size)
            for (; done < len; done += buf_size)
              {
              {
                buf_size = min (len - done, 64);
                buf_size = min (len - done, 64);
                read_memory (addr + done, buffer, buf_size);
                read_memory (addr + done, buffer, buf_size);
 
 
                for (i = 0; i < buf_size; ++i)
                for (i = 0; i < buf_size; ++i)
                  switch (buffer[i])
                  switch (buffer[i])
                    {
                    {
                    case '\"':
                    case '\"':
                    case '\\':
                    case '\\':
                      fputs_filtered ("\\", stream);
                      fputs_filtered ("\\", stream);
                    default:
                    default:
                      fprintf_filtered (stream, "%c", buffer[i]);
                      fprintf_filtered (stream, "%c", buffer[i]);
                    }
                    }
              }
              }
            fputs_filtered (truncate ? "...\"" : "\"", stream);
            fputs_filtered (truncate ? "...\"" : "\"", stream);
            break;
            break;
          }
          }
          break;
          break;
        case scm_tcs_symbols:
        case scm_tcs_symbols:
          {
          {
            int len = SCM_LENGTH (svalue);
            int len = SCM_LENGTH (svalue);
 
 
            char *str = alloca (len);
            char *str = alloca (len);
            read_memory (SCM_CDR (svalue), (gdb_byte *) str, len + 1);
            read_memory (SCM_CDR (svalue), (gdb_byte *) str, len + 1);
            /* Should handle weird characters FIXME */
            /* Should handle weird characters FIXME */
            str[len] = '\0';
            str[len] = '\0';
            fputs_filtered (str, stream);
            fputs_filtered (str, stream);
            break;
            break;
          }
          }
        case scm_tc7_vector:
        case scm_tc7_vector:
          {
          {
            int len = SCM_LENGTH (svalue);
            int len = SCM_LENGTH (svalue);
            int i;
            int i;
            LONGEST elements = SCM_CDR (svalue);
            LONGEST elements = SCM_CDR (svalue);
            LONGEST val;
            LONGEST val;
            fputs_filtered ("#(", stream);
            fputs_filtered ("#(", stream);
            for (i = 0; i < len; ++i)
            for (i = 0; i < len; ++i)
              {
              {
                if (i > 0)
                if (i > 0)
                  fputs_filtered (" ", stream);
                  fputs_filtered (" ", stream);
                val = scm_get_field (elements, i, SCM_SIZE, SCM_BYTE_ORDER);
                val = scm_get_field (elements, i, SCM_SIZE, SCM_BYTE_ORDER);
                scm_scmval_print (type, val, stream, recurse + 1, options);
                scm_scmval_print (type, val, stream, recurse + 1, options);
              }
              }
            fputs_filtered (")", stream);
            fputs_filtered (")", stream);
          }
          }
          break;
          break;
#if 0
#if 0
        case tc7_lvector:
        case tc7_lvector:
          {
          {
            SCM result;
            SCM result;
            SCM hook;
            SCM hook;
            hook = scm_get_lvector_hook (exp, LV_PRINT_FN);
            hook = scm_get_lvector_hook (exp, LV_PRINT_FN);
            if (hook == BOOL_F)
            if (hook == BOOL_F)
              {
              {
                scm_puts ("#<locked-vector ", port);
                scm_puts ("#<locked-vector ", port);
                scm_intprint (CDR (exp), 16, port);
                scm_intprint (CDR (exp), 16, port);
                scm_puts (">", port);
                scm_puts (">", port);
              }
              }
            else
            else
              {
              {
                result
                result
                  = scm_apply (hook,
                  = scm_apply (hook,
                               scm_listify (exp, port,
                               scm_listify (exp, port,
                                            (writing ? BOOL_T : BOOL_F),
                                            (writing ? BOOL_T : BOOL_F),
                                            SCM_UNDEFINED),
                                            SCM_UNDEFINED),
                               EOL);
                               EOL);
                if (result == BOOL_F)
                if (result == BOOL_F)
                  goto punk;
                  goto punk;
              }
              }
            break;
            break;
          }
          }
          break;
          break;
        case tc7_bvect:
        case tc7_bvect:
        case tc7_ivect:
        case tc7_ivect:
        case tc7_uvect:
        case tc7_uvect:
        case tc7_fvect:
        case tc7_fvect:
        case tc7_dvect:
        case tc7_dvect:
        case tc7_cvect:
        case tc7_cvect:
          scm_raprin1 (exp, port, writing);
          scm_raprin1 (exp, port, writing);
          break;
          break;
#endif
#endif
        case scm_tcs_subrs:
        case scm_tcs_subrs:
          {
          {
            int index = SCM_CAR (svalue) >> 8;
            int index = SCM_CAR (svalue) >> 8;
#if 1
#if 1
            char str[20];
            char str[20];
            sprintf (str, "#%d", index);
            sprintf (str, "#%d", index);
#else
#else
            char *str = index ? SCM_CHARS (scm_heap_org + index) : "";
            char *str = index ? SCM_CHARS (scm_heap_org + index) : "";
#define SCM_CHARS(x) ((char *)(SCM_CDR(x)))
#define SCM_CHARS(x) ((char *)(SCM_CDR(x)))
            char *str = CHARS (SNAME (exp));
            char *str = CHARS (SNAME (exp));
#endif
#endif
            fprintf_filtered (stream, "#<primitive-procedure %s>",
            fprintf_filtered (stream, "#<primitive-procedure %s>",
                              str);
                              str);
          }
          }
          break;
          break;
#if 0
#if 0
#ifdef CCLO
#ifdef CCLO
        case tc7_cclo:
        case tc7_cclo:
          scm_puts ("#<compiled-closure ", port);
          scm_puts ("#<compiled-closure ", port);
          scm_iprin1 (CCLO_SUBR (exp), port, writing);
          scm_iprin1 (CCLO_SUBR (exp), port, writing);
          scm_putc ('>', port);
          scm_putc ('>', port);
          break;
          break;
#endif
#endif
        case tc7_contin:
        case tc7_contin:
          fprintf_filtered (stream, "#<continuation %d @ #X%lx >",
          fprintf_filtered (stream, "#<continuation %d @ #X%lx >",
                            LENGTH (svalue),
                            LENGTH (svalue),
                            (long) CHARS (svalue));
                            (long) CHARS (svalue));
          break;
          break;
        case tc7_port:
        case tc7_port:
          i = PTOBNUM (exp);
          i = PTOBNUM (exp);
          if (i < scm_numptob
          if (i < scm_numptob
              && scm_ptobs[i].print
              && scm_ptobs[i].print
              && (scm_ptobs[i].print) (exp, port, writing))
              && (scm_ptobs[i].print) (exp, port, writing))
            break;
            break;
          goto punk;
          goto punk;
        case tc7_smob:
        case tc7_smob:
          i = SMOBNUM (exp);
          i = SMOBNUM (exp);
          if (i < scm_numsmob && scm_smobs[i].print
          if (i < scm_numsmob && scm_smobs[i].print
              && (scm_smobs[i].print) (exp, port, writing))
              && (scm_smobs[i].print) (exp, port, writing))
            break;
            break;
          goto punk;
          goto punk;
#endif
#endif
        default:
        default:
#if 0
#if 0
        punk:
        punk:
#endif
#endif
          scm_ipruk ("type", type, svalue, stream);
          scm_ipruk ("type", type, svalue, stream);
        }
        }
      break;
      break;
    }
    }
#undef SCM_BYTE_ORDER
#undef SCM_BYTE_ORDER
#undef SCM_SIZE
#undef SCM_SIZE
}
}
 
 
int
int
scm_val_print (struct type *type, const gdb_byte *valaddr,
scm_val_print (struct type *type, const gdb_byte *valaddr,
               int embedded_offset, CORE_ADDR address,
               int embedded_offset, CORE_ADDR address,
               struct ui_file *stream, int recurse,
               struct ui_file *stream, int recurse,
               const struct value_print_options *options)
               const struct value_print_options *options)
{
{
  if (is_scmvalue_type (type))
  if (is_scmvalue_type (type))
    {
    {
      enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
      enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
      LONGEST svalue
      LONGEST svalue
        = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
        = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
 
 
      if (scm_inferior_print (type, svalue, stream, recurse, options) >= 0)
      if (scm_inferior_print (type, svalue, stream, recurse, options) >= 0)
        {
        {
        }
        }
      else
      else
        {
        {
          scm_scmval_print (type, svalue, stream, recurse, options);
          scm_scmval_print (type, svalue, stream, recurse, options);
        }
        }
 
 
      gdb_flush (stream);
      gdb_flush (stream);
      return (0);
      return (0);
    }
    }
  else
  else
    {
    {
      return c_val_print (type, valaddr, 0, address, stream, recurse, options);
      return c_val_print (type, valaddr, 0, address, stream, recurse, options);
    }
    }
}
}
 
 
int
int
scm_value_print (struct value *val, struct ui_file *stream,
scm_value_print (struct value *val, struct ui_file *stream,
                 const struct value_print_options *options)
                 const struct value_print_options *options)
{
{
  struct value_print_options opts = *options;
  struct value_print_options opts = *options;
  opts.deref_ref = 1;
  opts.deref_ref = 1;
  return (common_val_print (val, stream, 0, &opts, current_language));
  return (common_val_print (val, stream, 0, &opts, current_language));
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.