<html lang="en">
<head>
<title>Guile Types Module - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Guile-Modules.html#Guile-Modules" title="Guile Modules">
<link rel="prev" href="Guile-Printing-Module.html#Guile-Printing-Module" title="Guile Printing Module">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.

(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
</head>
<body>
<div class="node">
<a name="Guile-Types-Module"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Guile-Printing-Module.html#Guile-Printing-Module">Guile Printing Module</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Guile-Modules.html#Guile-Modules">Guile Modules</a>
<hr>
</div>

<h5 class="subsubsection">23.3.5.2 Guile Types Module</h5>

<p>This module provides a collection of utilities for working with
<code>&lt;gdb:type&gt;</code> objects.

   <p>Usage:

<pre class="smallexample">     (use-modules (gdb types))
</pre>
   <div class="defun">
&mdash; Scheme Procedure: <b>get-basic-type</b><var> type<a name="index-get_002dbasic_002dtype-2879"></a></var><br>
<blockquote><p>Return <var>type</var> with const and volatile qualifiers stripped,
and with typedefs and C<tt>++</tt> references converted to the underlying type.

        <p>C<tt>++</tt> example:

     <pre class="smallexample">          typedef const int const_int;
          const_int foo (3);
          const_int&amp; foo_ref (foo);
          int main () { return 0; }
</pre>
        <p>Then in gdb:

     <pre class="smallexample">          (gdb) start
          (gdb) guile (use-modules (gdb) (gdb types))
          (gdb) guile (define foo-ref (parse-and-eval "foo_ref"))
          (gdb) guile (get-basic-type (value-type foo-ref))
          int
</pre>
        </blockquote></div>

<div class="defun">
&mdash; Scheme Procedure: <b>type-has-field-deep?</b><var> type field<a name="index-type_002dhas_002dfield_002ddeep_003f-2880"></a></var><br>
<blockquote><p>Return <code>#t</code> if <var>type</var>, assumed to be a type with fields
(e.g., a structure or union), has field <var>field</var>. 
Otherwise return <code>#f</code>. 
This searches baseclasses, whereas <code>type-has-field?</code> does not. 
</p></blockquote></div>

<div class="defun">
&mdash; Scheme Procedure: <b>make-enum-hashtable</b><var> enum-type<a name="index-make_002denum_002dhashtable-2881"></a></var><br>
<blockquote><p>Return a Guile hash table produced from <var>enum-type</var>. 
Elements in the hash table are referenced with <code>hashq-ref</code>. 
</p></blockquote></div>

   </body></html>

