1
0
Fork 0
cl-sites/guile.html_node/The-SCM-Type.html

111 lines
5.9 KiB
HTML
Raw Normal View History

2024-12-17 12:49:28 +01:00
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
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 no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>The SCM Type (Guile Reference Manual)</title>
<meta name="description" content="The SCM Type (Guile Reference Manual)">
<meta name="keywords" content="The SCM Type (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="API-Reference.html" rel="up" title="API Reference">
<link href="Initialization.html" rel="next" title="Initialization">
<link href="Deprecation.html" rel="prev" title="Deprecation">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
strong.def-name {font-family: monospace; font-weight: bold; font-size: larger}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="section-level-extent" id="The-SCM-Type">
<div class="nav-panel">
<p>
Next: <a href="Initialization.html" accesskey="n" rel="next">Initializing Guile</a>, Previous: <a href="Deprecation.html" accesskey="p" rel="prev">Deprecation</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h3 class="section" id="The-SCM-Type-1"><span>6.3 The SCM Type<a class="copiable-link" href="#The-SCM-Type-1"> &para;</a></span></h3>
<p>Guile represents all Scheme values with the single C type <code class="code">SCM</code>.
For an introduction to this topic, See <a class="xref" href="Dynamic-Types.html">Dynamic Types</a>.
</p>
<dl class="first-deftp">
<dt class="deftp" id="index-SCM"><span class="category-def">C Type: </span><span><strong class="def-name">SCM</strong><a class="copiable-link" href="#index-SCM"> &para;</a></span></dt>
<dd><p><code class="code">SCM</code> is the user level abstract C type that is used to represent
all of Guile&rsquo;s Scheme objects, no matter what the Scheme object type is.
No C operation except assignment is guaranteed to work with variables of
type <code class="code">SCM</code>, so you should only use macros and functions to work
with <code class="code">SCM</code> values. Values are converted between C data types and
the <code class="code">SCM</code> type with utility functions and macros.
</p></dd></dl>
<a class="index-entry-id" id="index-SCM-data-type"></a>
<dl class="first-deftp">
<dt class="deftp" id="index-scm_005ft_005fbits"><span class="category-def">C Type: </span><span><strong class="def-name">scm_t_bits</strong><a class="copiable-link" href="#index-scm_005ft_005fbits"> &para;</a></span></dt>
<dd><p><code class="code">scm_t_bits</code> is an unsigned integral data type that is guaranteed
to be large enough to hold all information that is required to
represent any Scheme object. While this data type is mostly used to
implement Guile&rsquo;s internals, the use of this type is also necessary to
write certain kinds of extensions to Guile.
</p></dd></dl>
<dl class="first-deftp">
<dt class="deftp" id="index-scm_005ft_005fsigned_005fbits"><span class="category-def">C Type: </span><span><strong class="def-name">scm_t_signed_bits</strong><a class="copiable-link" href="#index-scm_005ft_005fsigned_005fbits"> &para;</a></span></dt>
<dd><p>This is a signed integral type of the same size as <code class="code">scm_t_bits</code>.
</p></dd></dl>
<dl class="first-deftypefn">
<dt class="deftypefn" id="index-SCM_005fUNPACK"><span class="category-def">C Macro: </span><span><code class="def-type">scm_t_bits</code> <strong class="def-name">SCM_UNPACK</strong> <code class="def-code-arguments">(SCM <var class="var">x</var>)</code><a class="copiable-link" href="#index-SCM_005fUNPACK"> &para;</a></span></dt>
<dd><p>Transforms the <code class="code">SCM</code> value <var class="var">x</var> into its representation as an
integral type. Only after applying <code class="code">SCM_UNPACK</code> it is possible to
access the bits and contents of the <code class="code">SCM</code> value.
</p></dd></dl>
<dl class="first-deftypefn">
<dt class="deftypefn" id="index-SCM_005fPACK"><span class="category-def">C Macro: </span><span><code class="def-type">SCM</code> <strong class="def-name">SCM_PACK</strong> <code class="def-code-arguments">(scm_t_bits <var class="var">x</var>)</code><a class="copiable-link" href="#index-SCM_005fPACK"> &para;</a></span></dt>
<dd><p>Takes a valid integral representation of a Scheme object and transforms
it into its representation as a <code class="code">SCM</code> value.
</p></dd></dl>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Initialization.html">Initializing Guile</a>, Previous: <a href="Deprecation.html">Deprecation</a>, Up: <a href="API-Reference.html">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>