1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-07 06:22:32 -08:00

Updated manual html

Copied from Perforce
 Change: 182650
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Gareth Rees 2013-06-08 21:31:25 +01:00
parent bfe9eed0db
commit f8ae12a566
184 changed files with 2087 additions and 1846 deletions

View file

@ -1,5 +1,3 @@
.. _design-abq:
Queue design
============

View file

@ -1,9 +1,9 @@
.. _design-alloc-frame:
.. index::
pair: allocation frames; design
.. _design-alloc-frame:
Allocation frame protocol
=========================

View file

@ -1,9 +1,9 @@
.. _design-arena:
.. index::
pair: arena; design
.. _design-arena:
Arena
=====

View file

@ -1,10 +1,10 @@
.. _design-arenavm:
.. index::
pair: virtual memory arena; design
pair: VM arena; design
.. _design-arenavm:
Virtual Memory Arena
====================

View file

@ -1,37 +0,0 @@
.. _design-boot:
The MPS Bootstrap
=================
.. mps:prefix:: design.mps.boot
Introduction
------------
The `Memory Pool System`_ starts with no memory, but must somehow
allocate its own control structures in order to provide memory to the
client program. The MPS is freestanding [ref?] and so it can't get its
memory from the C library's ``malloc``. So how does it get off the
ground? It pulls itself up by its own bootstraps. This document
describes how.
.. note::
This document was written as a prelude to reforming the bootstrap,
so it shouldn't be taken as advocating it as an amazing piece of
design.
Pretty much the first call to the MPS is to ``ArenaCreate``, which calls the
arena class specific ``init`` method. That must create an initialized arena,
except for the "control pool", from which many MPS data structures will be
allocated.
In the case of the VM arena, ``VMArenaInit`` creates a VM large enough to hold
a :c:type:`VMArenaStruct` (which contains the generic :c:type:`ArenaStruct`) and maps
pages into it. It then calls ``ArenaInit`` to initialise the generic part,
before filling in the VM-specific part. Having done that, it adds the initial
``VMChunk`` -- a large area of address space -- that will be used to supply
memory via ``ArenaAlloc``.

View file

@ -1,9 +1,9 @@
.. _design-bt:
.. index::
pair: bit tables; design
.. _design-bt:
Bit tables
==========

View file

@ -1,9 +1,9 @@
.. _design-buffer:
.. index::
pair: buffers; design
.. _design-buffer:
Allocation buffers and allocation points
========================================

View file

@ -1,5 +1,3 @@
.. _design-cbs:
Coalescing block structure
==========================

View file

@ -1,9 +1,9 @@
.. _design-check:
.. index::
pair: checking; design
.. _design-check:
Checking
========

View file

@ -1,9 +1,9 @@
.. _design-class-interface:
.. index::
pair: class interface; design
.. _design-class-interface:
Pool class interface
====================

View file

@ -1,9 +1,9 @@
.. _design-collection:
.. index::
pair: collection framework; design
.. _design-collection:
Collection framework
====================

View file

@ -1,9 +1,9 @@
.. _design-config:
.. index::
pair: configuration; design
.. _design-config:
MPS Configuration
=================

View file

@ -1,11 +1,11 @@
.. _design-critical-path:
.. index::
single: critical path
single: path; critical
single: Memory Pool System; critical path
.. _design-critical-path:
The critical path through the MPS
=================================

View file

@ -1,9 +1,9 @@
.. _design-diag:
.. index::
pair: diagnostic feedback; design
.. _design-diag:
Diagnostic feedback
===================

View file

@ -1,9 +1,9 @@
.. _design-finalize:
.. index::
pair: finalization; design
.. _design-finalize:
Finalization
============

View file

@ -1,9 +1,9 @@
.. _design-fix:
.. index::
pair: fix function; design
.. _design-fix:
The generic fix function
========================

View file

@ -1,5 +1,3 @@
.. _design-freelist:
Free list allocator
===================

View file

@ -1,9 +1,9 @@
.. _design-guide.hex.trans:
.. index::
pair: hexadecimal; transliterating
.. _design-guide.hex.trans:
Transliterating the alphabet into hexadecimal
=============================================

View file

@ -1,10 +1,10 @@
.. _design-guide.impl.c.format:
.. index::
pair: C language; formatting guide
pair: C language formatting; guide
.. _design-guide.impl.c.format:
C Style -- formatting
=====================

View file

@ -1,9 +1,9 @@
.. _design-interface-c:
.. index::
pair: C interface; design
.. _design-interface-c:
C interface design
==================

View file

@ -1,9 +1,9 @@
.. _design-io:
.. index::
pair: I/O subsystem; design
.. _design-io:
I/O subsystem
=============

View file

@ -1,9 +1,9 @@
.. _design-keyword-arguments:
.. index::
pair: keyword arguments; design
.. _design-keyword-arguments:
Keyword arguments in the MPS
============================

View file

@ -1,9 +1,9 @@
.. _design-lib:
.. index::
pair: library interface; design
.. _design-lib:
Library interface
=================

View file

@ -1,9 +1,9 @@
.. _design-lock:
.. index::
pair: locking; design
.. _design-lock:
The lock module
===============

View file

@ -1,9 +1,9 @@
.. _design-locus:
.. index::
pair: locus manager; design
.. _design-locus:
MPS Configuration
=================

View file

@ -1,9 +1,9 @@
.. _design-message-gc:
.. index::
pair: garbage collection messages; design
.. _design-message-gc:
GC messages
===========

View file

@ -1,10 +1,10 @@
.. _design-message:
.. index::
pair: messages; design
single: client message protocol
.. _design-message:
Client message protocol
=======================

View file

@ -1,9 +1,9 @@
.. _design-object-debug:
.. index::
pair: debugging; design
.. _design-object-debug:
Debugging features for client objects
=====================================

View file

@ -40,6 +40,8 @@ Old design
poollo
poolmfs
poolmrg
poolmv
poolmvt
poolmvff
prot
protan
@ -54,7 +56,9 @@ Old design
shield
splay
sso1al
strategy
telemetry
tests
thread-manager
thread-safety
trace

View file

@ -1,9 +1,9 @@
.. _design-pool:
.. index::
pair: pool class mechanism; design
.. _design-pool:
Pool and pool class mechanisms
==============================

View file

@ -1,10 +1,10 @@
.. _design-poolamc:
.. index::
pair: AMC pool class; design
single: pool class; AMC design
.. _design-poolamc:
AMC pool class
==============

View file

@ -1,10 +1,10 @@
.. _design-poolams:
.. index::
pair: AMS pool class; design
single: pool class; AMS design
.. _design-poolams:
AMS pool class
==============

View file

@ -1,10 +1,10 @@
.. _design-poolawl:
.. index::
pair: AWL pool class; design
single: pool class; AWL design
.. _design-poolawl:
AWL pool class
==============

View file

@ -1,10 +1,10 @@
.. _design-poollo:
.. index::
pair: LO pool class; design
single: pool class; LO design
.. _design-poollo:
LO pool class
=============

View file

@ -1,10 +1,10 @@
.. _design-poolmfs:
.. index::
pair: MFS pool class; design
single: pool class; MFS design
.. _design-poolmfs:
MFS pool class
==============

View file

@ -1,10 +1,10 @@
.. _design-poolmrg:
.. index::
pair: MRG pool class; design
single: pool class; MRG design
.. _design-poolmrg:
MRG pool class
==============

View file

@ -1,5 +1,3 @@
.. _design-poolmv:
MV pool class
=============

View file

@ -1,10 +1,10 @@
.. _design-poolmvff:
.. index::
pair: MVFF pool class; design
single: pool class; MVFF design
.. _design-poolmvff:
MVFF pool class
===============

View file

@ -1,5 +1,3 @@
.. _design-poolmvt:
Manual Variable Temporal (MVT) pool design

View file

@ -1,9 +1,9 @@
.. _design-prot:
.. index::
pair: protection interface; design
.. _design-prot:
The protection module
=====================

View file

@ -1,10 +1,10 @@
.. _design-protan:
.. index::
pair: ANSI; protection interface design
pair: ANSI protection interface; design
.. _design-protan:
ANSI implementation of protection module
========================================

View file

@ -1,10 +1,10 @@
.. _design-protli:
.. index::
pair: Linux; protection interface design
pair: Linux protection interface; design
.. _design-protli:
Linux implementation of protection module
=========================================

View file

@ -1,9 +1,9 @@
.. _design-protocol:
.. index::
pair: protocol inheritance; design
.. _design-protocol:
Protocol inheritance
====================

View file

@ -1,10 +1,10 @@
.. _design-protsu:
.. index::
pair: SunOS 4; protection interface design
pair: SunOS 4 protection interface; design
.. _design-protsu:
SunOS 4 protection module
=========================

View file

@ -1,9 +1,9 @@
.. _design-pthreadext:
.. index::
pair: POSIX thread extensions; design
.. _design-pthreadext:
POSIX thread extensions
=======================

View file

@ -1,5 +1,3 @@
.. _design-range:
Ranges
======

View file

@ -1,9 +1,9 @@
.. _design-reservoir:
.. index::
pair: reservoir; design
.. _design-reservoir:
The low-memory reservoir
========================

View file

@ -1,9 +1,9 @@
.. _design-ring:
.. index::
pair: ring structure; design
.. _design-ring:
Ring data structure
===================

View file

@ -1,9 +1,9 @@
.. _design-root:
.. index::
pair: root manager; design
.. _design-root:
Root manager
============

View file

@ -1,9 +1,9 @@
.. _design-scan:
.. index::
pair: generic scanner; design
.. _design-scan:
The generic scanner
===================

View file

@ -1,9 +1,9 @@
.. _design-seg:
.. index::
pair: segments; design
.. _design-seg:
Segment data structure
======================

View file

@ -1,9 +1,9 @@
.. _design-shield:
.. index::
pair: shield; design
.. _design-shield:
Shield
======

View file

@ -1,10 +1,10 @@
.. _design-sig:
.. index::
pair: structure signatures; design
single: signatures
.. _design-sig:
Signatures in the MPS
=====================

View file

@ -1,9 +1,9 @@
.. _design-splay:
.. index::
pair: splay trees; design
.. _design-splay:
Splay trees
===========

View file

@ -1,10 +1,10 @@
.. _design-sso1al:
.. index::
pair: Digital Unix on Alpha stack scanner; design
pair: Digital Unix on Alpha; stack scanner design
.. _design-sso1al:
Stack scanner for Digital Unix on Alpha
=======================================
@ -126,6 +126,8 @@ is lower in memory than the bottom of the stack.
References
----------
.. [DEC_Assembler] Digital Equipment Corporation. 1996; <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/APS31DTE/TITLE.HTM>. .. [DEC_Alpha_Calling_Standard] "Calling Standard for Alpha Systems"; Digital Equipment Corporation. 1996. "`Assembly Language Programmer's Guide <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/APY8ACTE/TITLE.HTM>`__".
.. [DEC_Assembler] Digital Equipment Corporation. 1996. "`Assembly Language Programmer's Guide <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/APS31DTE/TITLE.HTM>`__".
.. [DEC_Alpha_Calling_Standard] Digital Equipment Corporation. 1996. "`Calling Standard for Alpha Systems <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/APY8ACTE/TITLE.HTM>`__".

View file

@ -1,5 +1,3 @@
.. _design-strategy:
MPS Strategy
============

View file

@ -1,9 +1,9 @@
.. _design-telemetry:
.. index::
pair: telemetry; design
.. _design-telemetry:
Telemetry
=========

View file

@ -1,5 +1,3 @@
.. _design-tests:
Tests
=====

View file

@ -1,9 +1,9 @@
.. _design-thread-manager:
.. index::
pair: thread manager; design
.. _design-thread-manager:
Thread Manager
==============

View file

@ -1,9 +1,9 @@
.. _design-thread-safety:
.. index::
pair: thread safety; design
.. _design-thread-safety:
Thread safety in the MPS
========================

View file

@ -1,9 +1,9 @@
.. _design-trace:
.. index::
pair: tracer; design
.. _design-trace:
Tracer
======

View file

@ -1,9 +1,9 @@
.. _design-type:
.. index::
pair: general types; design
.. _design-type:
General MPS types
=================

View file

@ -1,9 +1,9 @@
.. _design-version-library:
.. index::
pair: library version mechanism; design
.. _design-version-library:
Library version mechanism
=========================

View file

@ -1,10 +1,10 @@
.. _design-version:
.. index::
pair: software versions; design
single: versions; design
.. _design-version:
Software versions
=================

View file

@ -1,9 +1,9 @@
.. _design-vm:
.. index::
pair: virtual mapping; design
.. _design-vm:
Virtual mapping
===============

View file

@ -1,9 +1,9 @@
.. _design-vman:
.. index::
pair: ANSI fake VM; design
.. _design-vman:
ANSI fake VM
============

View file

@ -1,9 +1,9 @@
.. _design-vmo1:
.. index::
pair: VM for Digital Unix; design
.. _design-vmo1:
VM for Digital Unix
===================

View file

@ -1,9 +1,9 @@
.. _design-vmso:
.. index::
pair: VM for Solaris; design
.. _design-vmso:
VM for Solaris
==============

View file

@ -1,9 +1,9 @@
.. _design-writef:
.. index::
pair: WriteF function; design
.. _design-writef:
The WriteF function
===================

View file

@ -35,5 +35,6 @@ Appendices
glossary/index
copyright
contact
release
* :ref:`genindex`

View file

@ -20,50 +20,63 @@ of pools, choosing the most appropriate pool class for each.
class in the open source MPS exactly matches your needs, then it
is possible to develop new pool classes. See :ref:`pool-writing`.
First, answer these questions about your data:
First, do you need the MPS to :term:`automatically <automatic memory
management>` :term:`reclaim` :term:`unreachable` blocks? If so, you
need an automatically managed (garbage collected) pool class and you
should consult :ref:`pool-choose-automatic` below.
Otherwise, you need a manually managed pool class and you should
consult :ref:`pool-choose-manual` below.
1. Do you need the MPS to :term:`automatically <automatic memory
management>` :term:`reclaim` :term:`unreachable` blocks?
2. Is it acceptable for the MPS to :term:`move <moving memory
.. _pool-choose-automatic:
Choosing an automatic pool class
--------------------------------
Answer these questions about your data:
1. Is it acceptable for the MPS to :term:`move <moving memory
manager>` blocks in memory and to place :term:`barriers (1)` on
blocks? (For example, it might not be acceptable to move a block if
it has been passed to :term:`foreign code` that remembered its
location.)
3. Do your blocks contain :term:`references` to blocks stored in
2. Do your blocks contain :term:`references` to blocks stored in
automatically managed pools (including references to other blocks
in the same pool, if it's automatically managed)? And if so, are
these references :term:`exact <exact reference>`, :term:`ambiguous
<ambiguous reference>` or :term:`weak <weak reference (1)>`?
these references :term:`exact <exact reference>` or :term:`weak
<weak reference (1)>`?
Second, look up your answers in this table to find the recommended
pool class to use:
========== ====================== =========== ====================================
Automatic? Movable & protectable? References? Use this pool class
========== ====================== =========== ====================================
yes yes none :ref:`pool-amcz`
yes yes exact :ref:`pool-amc`
yes yes ambiguous nothing suitable
yes yes weak :ref:`pool-awl`
yes no none :ref:`pool-lo`
yes no exact :ref:`pool-ams`
yes no ambiguous nothing suitable
yes no weak nothing suitable
no *any* none :ref:`pool-mvff`
no *any* exact :ref:`pool-mvff` [1]_
no *any* ambiguous :ref:`pool-mvff` [1]_
no *any* weak :ref:`pool-mvff` [1]_
========== ====================== =========== ====================================
====================== =========== ===================
Movable & protectable? References? Use this pool class
====================== =========== ===================
yes none :ref:`pool-amcz`
yes exact :ref:`pool-amc`
yes weak :ref:`pool-awl`
no none :ref:`pool-lo`
no exact :ref:`pool-ams`
no weak nothing suitable
====================== =========== ===================
.. note::
.. [1] :ref:`pool-mvff` doesn't scan for references, but you can
work around this by registering your blocks as
:term:`roots` (with the appropriate :term:`rank`) just
after they are allocated, and deregistering them just
before freeing them.
.. _pool-choose-manual:
Choosing a manual pool class
----------------------------
Answer these questions about your data:
1. Are the blocks fixed in size? If so, use :ref:`pool-mfs`.
2. Are the lifetimes of blocks predictable? If so, use
:ref:`pool-mvt`, and arrange that objects that are predicted to die
at about the same time are allocated from the same
:term:`allocation point`.
3. Otherwise, use :ref:`pool-mvff`.
.. Sources:

View file

@ -9,7 +9,7 @@ MV (Manual Variable)
.. deprecated:: starting with version 1.111.
:ref:`pool-mvff` should be used instead.
:ref:`pool-mvff` or :ref:`pool-mvt` should be used instead.
**MV** is a general-purpose :term:`manually managed <manual memory
management>` :term:`pool class` that manages :term:`blocks` of

View file

@ -125,7 +125,7 @@ MVFF interface
efficient if this is wrong, but nothing will break.
* :c:macro:`MPS_KEY_ALIGN` (type :c:type:`mps_align_t`, default is
smallest general purpose alignment for the architecture) is the
:c:macro:`MPS_PF_ALIGN`) is the
:term:`alignment` of addresses for allocation (and freeing) in
the pool. If an unaligned size is passed to :c:func:`mps_alloc` or
:c:func:`mps_free`, it will be rounded up to the pool's alignment.

View file

@ -78,10 +78,6 @@ MVT properties
* Allocations may be variable in size.
* The :term:`alignment` of blocks is not configurable: it is the
:term:`natural alignment` of the platform (see
:c:macro:`MPS_PF_ALIGN`).
* Blocks do not have :term:`dependent objects`.
* Blocks are not automatically :term:`reclaimed`.
@ -116,7 +112,7 @@ MVT interface
six :term:`keyword arguments`:
* :c:macro:`MPS_KEY_ALIGN` (type :c:type:`mps_align_t`, default is
smallest general purpose alignment for the architecture) is the
:c:macro:`MPS_PF_ALIGN`) is the
:term:`alignment` of addresses for allocation (and freeing) in
the pool. If an unaligned size is passed to :c:func:`mps_alloc` or
:c:func:`mps_free`, it will be rounded up to the pool's alignment.
@ -124,7 +120,7 @@ MVT interface
``sizeof(void *)``.
* :c:macro:`MPS_KEY_MIN_SIZE` (type :c:type:`size_t`, default is
smallest general purpose alignment for the architecture) is the
:c:macro:`MPS_PF_ALIGN`) is the
predicted minimum size of blocks that will be allocated from the
pool.
@ -143,9 +139,9 @@ MVT interface
that will break is the partial freeing of large blocks.
* :c:macro:`MPS_KEY_MVT_RESERVE_DEPTH` (type
:c:type:`mps_count_t`) is the expected hysteresis of the
population of the pool. When blocks are freed, the pool will
retain sufficient storage to allocate this many blocks of the
:c:type:`mps_count_t`, default 1024) is the expected hysteresis
of the population of the pool. When blocks are freed, the pool
will retain sufficient storage to allocate this many blocks of the
mean size for near term allocations (rather than immediately
making that storage available to other pools).
@ -167,14 +163,14 @@ MVT interface
object population does vary, at a slight cost in efficiency. The
reserve does not guarantee any particular amount of allocation.
* :c:macro:`MPS_KEY_MVT_FRAG_LIMIT` (type :c:type:`mps_count_t`)
is a double from 0.0 to 1.0 (inclusive). It sets an upper
limit on the space overhead of an MVT pool, in case block death
times and allocations do not correlate well. If the free space
managed by the pool as a ratio of all the space managed by the
pool exceeds the fragmentation limit, the pool falls back to a
first fit allocation policy, exploiting space more efficiently
at a cost in time efficiency. A fragmentation limit of 0.0 would
* :c:macro:`MPS_KEY_MVT_FRAG_LIMIT` (type :c:type:`double`,
default 0.3) is a double from 0.0 to 1.0 (inclusive). It sets an
upper limit on the space overhead of an MVT pool, in case block
death times and allocations do not correlate well. If the free
space managed by the pool as a ratio of all the space managed by
the pool exceeds the fragmentation limit, the pool falls back to a
first fit allocation policy, exploiting space more efficiently at
a cost in time efficiency. A fragmentation limit of 0.0 would
cause the pool to operate as a first-fit pool, at a significant
cost in time efficiency: therefore this is not permitted.

View file

@ -0,0 +1,72 @@
.. _release-notes:
Release notes
=============
.. _release-notes-1.112:
Release 1.112.0
---------------
Interface changes
.................
1. In the :term:`hot` (production) variety, the MPS now prints
assertion messages to standard error but does *not* terminate the
program. This is because most assertions do not indicate *fatal*
error conditions, and continuing gives the application a chance to
shut down safely and save work, or even to limp along indefinitely.
See :ref:`topic-error-assertion-handling`.
2. The behaviour when an assertion is triggered is now configurable in
the standard ANSI :term:`plinth` by installing an assertion
handler. See :c:func:`mps_lib_assert_fail_install`.
3. Functions that take a variable number of arguments
(:c:func:`mps_arena_create`, :c:func:`mps_pool_create`,
:c:func:`mps_fmt_create` and :c:func:`mps_ap_create`) are now
deprecated in favour of functions that use a :term:`keyword
argument` interface (:c:func:`mps_arena_create_k`,
:c:func:`mps_pool_create_k`, :c:func:`mps_fmt_create_k` and
:c:func:`mps_ap_create_k`). The new interface provides better
reporting of errors, provides default values for arguments, and
provides forward compatibility. See :ref:`topic-keyword`.
(The old interface continues to be supported, but new features will
only be available through the keyword interface.)
4. :ref:`pool-mfs` no longer refuses to manage blocks that are smaller
than the platform alignment. It now rounds up smaller sizes
internally if necessary.
5. :ref:`pool-mvt` now allows the client to specify the alignment of
blocks allocated from the pool. Use the keyword argument
:c:macro:`MPS_KEY_ALIGN` when creating a pool of class
:c:func:`mps_class_mvt`.
6. On Windows, you can now request that the MPS allocate address space
from the top down, allowing a 32-bit executable linked with
``/LARGEADDRESSAWARE`` to use the top half of the address space.
Use the keyword argument :c:macro:`MPS_KEY_VMW3_TOP_DOWN` when
creating an arena of class :c:func:`mps_arena_class_vm`.
Other changes
.............
1. On Windows, an execute exception no longer triggers an assertion.
See job003301_.
.. _job003301: https://www.ravenbrook.com/project/mps/issue/job003301/
2. Rehashing of large address-based hash tables no longer provokes a
nursery collection that immediately renders the hash table stale
again. See job003435_.
.. _job003435: https://www.ravenbrook.com/project/mps/issue/job003435/
3. :ref:`pool-mvt` no longer triggers an assertion failure when it
runs out of space on its reserved block queue. See job003486_.
.. _job003486: https://www.ravenbrook.com/project/mps/issue/job003486/

View file

@ -232,6 +232,13 @@ assertion that is listed here but for which you discovered a different
cause), please :ref:`let us know <contact>` so that we can improve
this documentation.
``arenavm.c: BTIsResRange(vmChunk->pageTableMapped, 0, chunk->pageTablePages)``
The client program called :c:func:`mps_arena_destroy` without
having destroyed all pools in that arena first. (The assertion is
from the virtual memory manager which is checking that all pages
have been unmapped.)
``dbgpool.c: fencepost check on free``

View file

@ -13,11 +13,11 @@
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #333333 } /* Generic.Output */
.highlight .go { color: #303030 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */

View file

@ -27,6 +27,7 @@
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="copyright" title="Copyright" href="copyright.html" />
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="index.html" />
<link rel="next" title="Release notes" href="release.html" />
<link rel="prev" title="Memory Pool System Kit Open Source License" href="copyright.html" />
</head>
<body>
@ -36,6 +37,9 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="release.html" title="Release notes"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="copyright.html" title="Memory Pool System Kit Open Source License"
accesskey="P">previous</a> |</li>
@ -80,7 +84,10 @@ Ravenbrook&#8217;s web site</a>.</p>
</a></p>
<h4>Previous topic</h4>
<p class="topless"><a href="copyright.html"
title="previous chapter">Memory Pool System Kit Open Source License</a></p><h4>Downloads</h4>
title="previous chapter">Memory Pool System Kit Open Source License</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="release.html"
title="next chapter">Release notes</a></p><h4>Downloads</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br>
@ -105,6 +112,9 @@ Ravenbrook&#8217;s web site</a>.</p>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="release.html" title="Release notes"
>next</a> |</li>
<li class="right" >
<a href="copyright.html" title="Memory Pool System Kit Open Source License"
>previous</a> |</li>

View file

@ -55,7 +55,7 @@
<div class="body">
<div class="section" id="queue-design">
<span id="design-abq"></span><h1>1. Queue design<a class="headerlink" href="#queue-design" title="Permalink to this headline"></a></h1>
<h1>1. Queue design<a class="headerlink" href="#queue-design" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.abq"></span><h2>1.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.abq.intro"></span><a class="mpstag reference internal" href="#design.mps.abq.intro">.intro:</a> This is the design of the ABQ module, which implements a

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-alloc-frame"></span><div class="section" id="allocation-frame-protocol">
<span id="index-0"></span><h1>1. Allocation frame protocol<a class="headerlink" href="#allocation-frame-protocol" title="Permalink to this headline"></a></h1>
<div class="section" id="allocation-frame-protocol">
<span id="design-alloc-frame"></span><span id="index-0"></span><h1>1. Allocation frame protocol<a class="headerlink" href="#allocation-frame-protocol" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.alloc-frame"></span><h2>1.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.alloc-frame.intro"></span><a class="mpstag reference internal" href="#design.mps.alloc-frame.intro">.intro:</a> This document explains the design of the support for
@ -407,9 +407,9 @@ responding to a <tt class="xref c c-func docutils literal"><span class="pre">Sel
</tbody>
</table>
<p><span class="target" id="design.mps.alloc-frame.lw-frame.state-impl"></span><a class="mpstag reference internal" href="#design.mps.alloc-frame.lw-frame.state-impl">.lw-frame.state-impl:</a> Each AP contains 3 additional fields to hold this state:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_addr_t</span> <span class="n">frameptr</span><span class="p">;</span>
<span class="kt">mps_bool_t</span> <span class="n">enabled</span><span class="p">;</span>
<span class="kt">mps_bool_t</span> <span class="n">lwPopPending</span><span class="p">;</span>
<div class="highlight-c"><div class="highlight"><pre><span class="n">mps_addr_t</span> <span class="n">frameptr</span><span class="p">;</span>
<span class="n">mps_bool_t</span> <span class="n">enabled</span><span class="p">;</span>
<span class="n">mps_bool_t</span> <span class="n">lwPopPending</span><span class="p">;</span>
</pre></div>
</div>
<p><span class="target" id="design.mps.alloc-frame.lw-frame.enabled"></span><a class="mpstag reference internal" href="#design.mps.alloc-frame.lw-frame.enabled">.lw-frame.enabled:</a> The <tt class="docutils literal"><span class="pre">enabled</span></tt> slot holds the following values for

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-arena"></span><div class="section" id="arena">
<span id="index-0"></span><h1>2. Arena<a class="headerlink" href="#arena" title="Permalink to this headline"></a></h1>
<div class="section" id="arena">
<span id="design-arena"></span><span id="index-0"></span><h1>2. Arena<a class="headerlink" href="#arena" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.arena"></span><h2>2.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.arena.intro"></span><a class="mpstag reference internal" href="#design.mps.arena.intro">.intro:</a> This is the design of the arena structure.</p>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-arenavm"></span><div class="section" id="virtual-memory-arena">
<span id="index-0"></span><h1>3. Virtual Memory Arena<a class="headerlink" href="#virtual-memory-arena" title="Permalink to this headline"></a></h1>
<div class="section" id="virtual-memory-arena">
<span id="design-arenavm"></span><span id="index-0"></span><h1>3. Virtual Memory Arena<a class="headerlink" href="#virtual-memory-arena" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.arena.vm"></span><h2>3.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.arena.vm.intro"></span><a class="mpstag reference internal" href="#design.mps.arena.vm.intro">.intro:</a> This document describes the detailed design of the Virtual

View file

@ -1,125 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>The MPS Bootstrap &mdash; Memory Pool System 1.111.0 documentation</title>
<link rel="stylesheet" href="../_static/mps.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.111.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="the-mps-bootstrap">
<span id="design-boot"></span><h1>The MPS Bootstrap<a class="headerlink" href="#the-mps-bootstrap" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.boot"></span><h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p>The <a href="#id1"><span class="problematic" id="id2">`Memory Pool System`_</span></a> starts with no memory, but must somehow
allocate its own control structures in order to provide memory to the
client program. The MPS is freestanding [ref?] and so it can&#8217;t get its
memory from the C library&#8217;s <tt class="docutils literal"><span class="pre">malloc</span></tt>. So how does it get off the
ground? It pulls itself up by its own bootstraps. This document
describes how.</p>
<div class="admonition-note admonition">
<p class="first admonition-title">Note</p>
<p class="last">This document was written as a prelude to reforming the bootstrap,
so it shouldn&#8217;t be taken as advocating it as an amazing piece of
design.</p>
</div>
<p>Pretty much the first call to the MPS is to <tt class="docutils literal"><span class="pre">ArenaCreate</span></tt>, which calls the
arena class specific <tt class="docutils literal"><span class="pre">init</span></tt> method. That must create an initialized arena,
except for the &#8220;control pool&#8221;, from which many MPS data structures will be
allocated.</p>
<p>In the case of the VM arena, <tt class="docutils literal"><span class="pre">VMArenaInit</span></tt> creates a VM large enough to hold
a <tt class="xref c c-type docutils literal"><span class="pre">VMArenaStruct</span></tt> (which contains the generic <tt class="xref c c-type docutils literal"><span class="pre">ArenaStruct</span></tt>) and maps
pages into it. It then calls <tt class="docutils literal"><span class="pre">ArenaInit</span></tt> to initialise the generic part,
before filling in the VM-specific part. Having done that, it adds the initial
<tt class="docutils literal"><span class="pre">VMChunk</span></tt> &#8211; a large area of address space &#8211; that will be used to supply
memory via <tt class="docutils literal"><span class="pre">ArenaAlloc</span></tt>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/logo.png" alt="Logo"/>
</a></p>
<h3><a href="../index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">The MPS Bootstrap</a><ul>
<li><a class="reference internal" href="#introduction">Introduction</a></li>
</ul>
</li>
</ul>
<h4>Downloads</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br>
<a href="http://www.ravenbrook.com/project/mps/release/">All MPS Kit releases</a>
</p>
<h4>Issues</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/issue/?action=list&amp;view=status%3dopen&amp;display=Job:Priority:Title&amp;sort=Priority">Known issues</a><br>
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
</p><h4>Contact us</h4>
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-bt"></span><div class="section" id="bit-tables">
<span id="index-0"></span><h1>4. Bit tables<a class="headerlink" href="#bit-tables" title="Permalink to this headline"></a></h1>
<div class="section" id="bit-tables">
<span id="design-bt"></span><span id="index-0"></span><h1>4. Bit tables<a class="headerlink" href="#bit-tables" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.bt"></span><h2>4.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.bt.intro"></span><a class="mpstag reference internal" href="#design.mps.bt.intro">.intro:</a> This is the design of the Bit Tables module. A Bit Table is a
@ -400,7 +400,7 @@ now return 0 for <tt class="docutils literal"><span class="pre">base</span></tt>
otherwise. Meets <a class="reference internal" href="#design.mps.bt.non-req.ops.test.range.same">.non-req.ops.test.range.same</a>.</p>
<p><span class="target" id="design.mps.bt.if.find.general"></span><a class="mpstag reference internal" href="#design.mps.bt.if.find.general">.if.find.general:</a> There are four functions (below) to find reset
ranges. All the functions have the same prototype (for symmetry):</p>
<div class="highlight-c"><div class="highlight"><pre><span class="n">Bool</span> <span class="nf">find</span><span class="p">(</span><span class="n">Index</span> <span class="o">*</span><span class="n">baseReturn</span><span class="p">,</span> <span class="n">Index</span> <span class="o">*</span><span class="n">limitReturn</span><span class="p">,</span>
<div class="highlight-c"><div class="highlight"><pre><span class="n">Bool</span> <span class="n">find</span><span class="p">(</span><span class="n">Index</span> <span class="o">*</span><span class="n">baseReturn</span><span class="p">,</span> <span class="n">Index</span> <span class="o">*</span><span class="n">limitReturn</span><span class="p">,</span>
<span class="n">BT</span> <span class="n">bt</span><span class="p">,</span>
<span class="n">Index</span> <span class="n">searchBase</span><span class="p">,</span> <span class="n">Index</span> <span class="n">searchLimit</span><span class="p">,</span>
<span class="n">Count</span> <span class="n">length</span><span class="p">);</span>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-buffer"></span><div class="section" id="allocation-buffers-and-allocation-points">
<span id="index-0"></span><h1>5. Allocation buffers and allocation points<a class="headerlink" href="#allocation-buffers-and-allocation-points" title="Permalink to this headline"></a></h1>
<div class="section" id="allocation-buffers-and-allocation-points">
<span id="design-buffer"></span><span id="index-0"></span><h1>5. Allocation buffers and allocation points<a class="headerlink" href="#allocation-buffers-and-allocation-points" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.buffer"></span><h2>5.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.buffer.scope"></span><a class="mpstag reference internal" href="#design.mps.buffer.scope">.scope:</a> This document describes the design of allocation buffers

View file

@ -55,7 +55,7 @@
<div class="body">
<div class="section" id="coalescing-block-structure">
<span id="design-cbs"></span><h1>2. Coalescing block structure<a class="headerlink" href="#coalescing-block-structure" title="Permalink to this headline"></a></h1>
<h1>2. Coalescing block structure<a class="headerlink" href="#coalescing-block-structure" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.cbs"></span><h2>2.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.cbs.intro"></span><a class="mpstag reference internal" href="#design.mps.cbs.intro">.intro:</a> This is the design for impl.c.cbs, which implements a data

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-check"></span><div class="section" id="checking">
<span id="index-0"></span><h1>6. Checking<a class="headerlink" href="#checking" title="Permalink to this headline"></a></h1>
<div class="section" id="checking">
<span id="design-check"></span><span id="index-0"></span><h1>6. Checking<a class="headerlink" href="#checking" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.check"></span><h2>6.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.check.intro"></span><a class="mpstag reference internal" href="#design.mps.check.intro">.intro:</a> This documents the design of structure checking within the

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-class-interface"></span><div class="section" id="pool-class-interface">
<span id="index-0"></span><h1>7. Pool class interface<a class="headerlink" href="#pool-class-interface" title="Permalink to this headline"></a></h1>
<div class="section" id="pool-class-interface">
<span id="design-class-interface"></span><span id="index-0"></span><h1>7. Pool class interface<a class="headerlink" href="#pool-class-interface" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.class-interface"></span><h2>7.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.class-interface.intro"></span><a class="mpstag reference internal" href="#design.mps.class-interface.intro">.intro:</a> This document describes the interface and protocols between

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-collection"></span><div class="section" id="collection-framework">
<span id="index-0"></span><h1>8. Collection framework<a class="headerlink" href="#collection-framework" title="Permalink to this headline"></a></h1>
<div class="section" id="collection-framework">
<span id="design-collection"></span><span id="index-0"></span><h1>8. Collection framework<a class="headerlink" href="#collection-framework" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.collection"></span><h2>8.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.collection.intro"></span><a class="mpstag reference internal" href="#design.mps.collection.intro">.intro:</a> This document describes the Collection Framework. It&#8217;s a

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-config"></span><div class="section" id="mps-configuration">
<span id="index-0"></span><h1>3. MPS Configuration<a class="headerlink" href="#mps-configuration" title="Permalink to this headline"></a></h1>
<div class="section" id="mps-configuration">
<span id="design-config"></span><span id="index-0"></span><h1>3. MPS Configuration<a class="headerlink" href="#mps-configuration" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.config"></span><h2>3.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.config.intro"></span><a class="mpstag reference internal" href="#design.mps.config.intro">.intro:</a> This document describes how the <a class="reference external" href="http://www.ravenbrook.com/project/mps/">Memory Pool System</a> source code is configured so
@ -440,19 +440,19 @@ possibly their types, depending on the protocol defined</li>
configuration parameter. However, the concrete interface may vary.</p>
<p>For example, this isn&#8217;t allowed, because there is a change in the interface:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="cp">#if defined(PROT_FOO)</span>
<span class="kt">void</span> <span class="nf">ProtSpong</span><span class="p">(</span><span class="n">Foo</span> <span class="n">foo</span><span class="p">,</span> <span class="n">Bar</span> <span class="n">bar</span><span class="p">);</span>
<span class="kt">void</span> <span class="n">ProtSpong</span><span class="p">(</span><span class="n">Foo</span> <span class="n">foo</span><span class="p">,</span> <span class="n">Bar</span> <span class="n">bar</span><span class="p">);</span>
<span class="cp">#else</span>
<span class="kt">int</span> <span class="nf">ProtSpong</span><span class="p">(</span><span class="n">Bar</span> <span class="n">bar</span><span class="p">,</span> <span class="n">Foo</span> <span class="n">foo</span><span class="p">);</span>
<span class="kt">int</span> <span class="n">ProtSpong</span><span class="p">(</span><span class="n">Bar</span> <span class="n">bar</span><span class="p">,</span> <span class="n">Foo</span> <span class="n">foo</span><span class="p">);</span>
<span class="cp">#endif</span>
</pre></div>
</div>
<p>This example shows how:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="cp">#ifdef PROTECTION</span>
<span class="kt">void</span> <span class="nf">ProtSync</span><span class="p">(</span><span class="n">Space</span> <span class="n">space</span><span class="p">);</span>
<span class="cm">/* more decls. */</span>
<span class="kt">void</span> <span class="n">ProtSync</span><span class="p">(</span><span class="n">Space</span> <span class="n">space</span><span class="p">);</span>
<span class="cp">/* more decls. */</span>
<span class="cp">#else </span><span class="cm">/* PROTECTION not */</span><span class="cp"></span>
<span class="cp">#define ProtSync(space) NOOP</span>
<span class="cm">/* more decls. */</span>
<span class="cp">/* more decls. */</span>
<span class="cp">#endif </span><span class="cm">/* PROTECTION */</span><span class="cp"></span>
</pre></div>
</div>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-critical-path"></span><div class="section" id="the-critical-path-through-the-mps">
<span id="index-0"></span><h1>4. The critical path through the MPS<a class="headerlink" href="#the-critical-path-through-the-mps" title="Permalink to this headline"></a></h1>
<div class="section" id="the-critical-path-through-the-mps">
<span id="design-critical-path"></span><span id="index-0"></span><h1>4. The critical path through the MPS<a class="headerlink" href="#the-critical-path-through-the-mps" title="Permalink to this headline"></a></h1>
<blockquote>
<div>single: critical path
single: path; critical
@ -181,18 +181,18 @@ registered with one of the <tt class="xref c c-func docutils literal"><span clas
<p>Here is an example of part of a format scanner for scanning contiguous
runs of pointers, from <a class="reference external" href="../code/fmtdy.c">fmtdy.c</a>, the scanner for the <a class="reference external" href="http://opendylan.org/">Open Dylan</a>
runtime:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">dylan_scan_contig</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">mps_ss</span><span class="p">,</span>
<span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">limit</span><span class="p">)</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">dylan_scan_contig</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">mps_ss</span><span class="p">,</span>
<span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">limit</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span>
<span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> <span class="cm">/* reference cursor */</span>
<span class="kt">mps_addr_t</span> <span class="n">r</span><span class="p">;</span> <span class="cm">/* reference to be fixed */</span>
<span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span>
<span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> <span class="cm">/* reference cursor */</span>
<span class="n">mps_addr_t</span> <span class="n">r</span><span class="p">;</span> <span class="cm">/* reference to be fixed */</span>
<span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">)</span> <span class="p">{</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span>
<span class="nl">loop:</span> <span class="k">if</span><span class="p">(</span><span class="n">p</span> <span class="o">&gt;=</span> <span class="n">limit</span><span class="p">)</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span>
<span class="n">r</span> <span class="o">=</span> <span class="o">*</span><span class="n">p</span><span class="o">++</span><span class="p">;</span>
<span class="k">if</span><span class="p">(((</span><span class="kt">mps_word_t</span><span class="p">)</span><span class="n">r</span><span class="o">&amp;</span><span class="mi">3</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="cm">/* pointers tagged with 0 */</span>
<span class="k">if</span><span class="p">(((</span><span class="n">mps_word_t</span><span class="p">)</span><span class="n">r</span><span class="o">&amp;</span><span class="mi">3</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="cm">/* pointers tagged with 0 */</span>
<span class="k">goto</span> <span class="n">loop</span><span class="p">;</span> <span class="cm">/* not a pointer */</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">,</span> <span class="n">r</span><span class="p">))</span> <span class="k">goto</span> <span class="n">loop</span><span class="p">;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-diag"></span><div class="section" id="diagnostic-feedback">
<span id="index-0"></span><h1>9. Diagnostic feedback<a class="headerlink" href="#diagnostic-feedback" title="Permalink to this headline"></a></h1>
<div class="section" id="diagnostic-feedback">
<span id="design-diag"></span><span id="index-0"></span><h1>9. Diagnostic feedback<a class="headerlink" href="#diagnostic-feedback" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.diag"></span><h2>9.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.diag.intro"></span><a class="mpstag reference internal" href="#design.mps.diag.intro">.intro:</a> This document describes how to use the diagnostic feedback
@ -99,33 +99,34 @@ places where you want to inspect data structures (or wait for the
debugger to be entered via an <tt class="xref c c-func docutils literal"><span class="pre">abort()</span></tt> call or unhandled
segmentation fault). Then at the debugger command prompt, run
<tt class="xref c c-func docutils literal"><span class="pre">Describe()</span></tt> commands of your choice. For example:</p>
<div class="highlight-c"><pre>(gdb) run
Starting program: mv2test
Reading symbols for shared libraries +............................. done
cbs.c:94: MPS ASSERTION FAILED: !cbs-&gt;inCBS
<div class="highlight-c"><div class="highlight"><pre><span class="p">(</span><span class="n">gdb</span><span class="p">)</span> <span class="n">run</span>
<span class="n">Starting</span> <span class="n">program</span><span class="o">:</span> <span class="n">mv2test</span>
<span class="n">Reading</span> <span class="n">symbols</span> <span class="k">for</span> <span class="n">shared</span> <span class="n">libraries</span> <span class="o">+</span><span class="p">.............................</span> <span class="n">done</span>
<span class="n">cbs</span><span class="p">.</span><span class="n">c</span><span class="o">:</span><span class="mi">94</span><span class="o">:</span> <span class="n">MPS</span> <span class="n">ASSERTION</span> <span class="n">FAILED</span><span class="o">:</span> <span class="o">!</span><span class="n">cbs</span><span class="o">-&gt;</span><span class="n">inCBS</span>
Program received signal SIGABRT, Aborted.
0x00007fff83e42d46 in __kill ()
(gdb) frame 12
#12 0x000000010000b1fc in MVTFree (pool=0x103ffe160, base=0x101dfd000, size=5024) at poolmv2.c:711
711 Res res = CBSInsert(MVTCBS(mvt), base, limit);
(gdb) p MVTDescribe(mvt, mps_lib_get_stdout())
MVT 0000000103FFE160
{
minSize: 8
meanSize: 42
maxSize: 8192
fragLimit: 30
reuseSize: 16384
fillSize: 8192
availLimit: 1110835
abqOverflow: FALSE
splinter: TRUE
splinterSeg: 0000000103FEE780
splinterBase: 0000000101D7ABB8
splinterLimit: 0000000101D7B000
# ... etc ...
}</pre>
<span class="n">Program</span> <span class="n">received</span> <span class="n">signal</span> <span class="n">SIGABRT</span><span class="p">,</span> <span class="n">Aborted</span><span class="p">.</span>
<span class="mh">0x00007fff83e42d46</span> <span class="n">in</span> <span class="n">__kill</span> <span class="p">()</span>
<span class="p">(</span><span class="n">gdb</span><span class="p">)</span> <span class="n">frame</span> <span class="mi">12</span>
<span class="cp">#12 0x000000010000b1fc in MVTFree (pool=0x103ffe160, base=0x101dfd000, size=5024) at poolmv2.c:711</span>
<span class="mi">711</span> <span class="n">Res</span> <span class="n">res</span> <span class="o">=</span> <span class="n">CBSInsert</span><span class="p">(</span><span class="n">MVTCBS</span><span class="p">(</span><span class="n">mvt</span><span class="p">),</span> <span class="n">base</span><span class="p">,</span> <span class="n">limit</span><span class="p">);</span>
<span class="p">(</span><span class="n">gdb</span><span class="p">)</span> <span class="n">p</span> <span class="n">MVTDescribe</span><span class="p">(</span><span class="n">mvt</span><span class="p">,</span> <span class="n">mps_lib_get_stdout</span><span class="p">())</span>
<span class="n">MVT</span> <span class="mf">0000000103FF</span><span class="n">E160</span>
<span class="p">{</span>
<span class="nl">minSize:</span> <span class="mi">8</span>
<span class="nl">meanSize:</span> <span class="mi">42</span>
<span class="nl">maxSize:</span> <span class="mi">8192</span>
<span class="nl">fragLimit:</span> <span class="mi">30</span>
<span class="nl">reuseSize:</span> <span class="mi">16384</span>
<span class="nl">fillSize:</span> <span class="mi">8192</span>
<span class="nl">availLimit:</span> <span class="mi">1110835</span>
<span class="nl">abqOverflow:</span> <span class="n">FALSE</span>
<span class="nl">splinter:</span> <span class="n">TRUE</span>
<span class="nl">splinterSeg:</span> <span class="mf">0000000103F</span><span class="n">EE780</span>
<span class="nl">splinterBase:</span> <span class="mo">0000000101</span><span class="n">D7ABB8</span>
<span class="nl">splinterLimit:</span> <span class="mo">0000000101</span><span class="n">D7B000</span>
<span class="cp"> # ... etc ...</span>
<span class="p">}</span>
</pre></div>
</div>
</li>
</ol>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-finalize"></span><div class="section" id="finalization">
<span id="index-0"></span><h1>10. Finalization<a class="headerlink" href="#finalization" title="Permalink to this headline"></a></h1>
<div class="section" id="finalization">
<span id="design-finalize"></span><span id="index-0"></span><h1>10. Finalization<a class="headerlink" href="#finalization" title="Permalink to this headline"></a></h1>
<div class="section" id="overview">
<span id="design.mps.finalize"></span><h2>10.1. Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.finalize.overview"></span><a class="mpstag reference internal" href="#design.mps.finalize.overview">.overview:</a> Finalization is implemented internally using the

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-fix"></span><div class="section" id="the-generic-fix-function">
<span id="index-0"></span><h1>11. The generic fix function<a class="headerlink" href="#the-generic-fix-function" title="Permalink to this headline"></a></h1>
<div class="section" id="the-generic-fix-function">
<span id="design-fix"></span><span id="index-0"></span><h1>11. The generic fix function<a class="headerlink" href="#the-generic-fix-function" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.fix"></span><h2>11.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.fix.intro"></span><a class="mpstag reference internal" href="#design.mps.fix.intro">.intro:</a> Fix is the interface through which the existence of

View file

@ -55,7 +55,7 @@
<div class="body">
<div class="section" id="free-list-allocator">
<span id="design-freelist"></span><h1>5. Free list allocator<a class="headerlink" href="#free-list-allocator" title="Permalink to this headline"></a></h1>
<h1>5. Free list allocator<a class="headerlink" href="#free-list-allocator" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.freelist"></span><h2>5.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.freelist.intro"></span><a class="mpstag reference internal" href="#design.mps.freelist.intro">.intro:</a> This document describes the free list allocator for the

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-guide-hex-trans"></span><div class="section" id="transliterating-the-alphabet-into-hexadecimal">
<span id="index-0"></span><h1>6. Transliterating the alphabet into hexadecimal<a class="headerlink" href="#transliterating-the-alphabet-into-hexadecimal" title="Permalink to this headline"></a></h1>
<div class="section" id="transliterating-the-alphabet-into-hexadecimal">
<span id="design-guide-hex-trans"></span><span id="index-0"></span><h1>6. Transliterating the alphabet into hexadecimal<a class="headerlink" href="#transliterating-the-alphabet-into-hexadecimal" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="guide.hex.trans"></span><h2>6.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="guide.hex.trans.scope"></span><a class="mpstag reference internal" href="#guide.hex.trans.scope">.scope:</a> This document explains how to represent the alphabet as

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-guide-impl-c-format"></span><div class="section" id="c-style-formatting">
<span id="index-0"></span><h1>7. C Style &#8211; formatting<a class="headerlink" href="#c-style-formatting" title="Permalink to this headline"></a></h1>
<div class="section" id="c-style-formatting">
<span id="design-guide-impl-c-format"></span><span id="index-0"></span><h1>7. C Style &#8211; formatting<a class="headerlink" href="#c-style-formatting" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="guide.impl.c.format"></span><h2>7.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="guide.impl.c.format.scope"></span><a class="mpstag reference internal" href="#guide.impl.c.format.scope">.scope:</a> This document describes the Ravenbrook conventions for the

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-interface-c"></span><div class="section" id="c-interface-design">
<span id="index-0"></span><h1>12. C interface design<a class="headerlink" href="#c-interface-design" title="Permalink to this headline"></a></h1>
<div class="section" id="c-interface-design">
<span id="design-interface-c"></span><span id="index-0"></span><h1>12. C interface design<a class="headerlink" href="#c-interface-design" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.interface.c"></span><h2>12.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.interface.c.scope"></span><a class="mpstag reference internal" href="#design.mps.interface.c.scope">.scope:</a> This document is the design for the Memory Pool System
@ -175,19 +175,19 @@ as pointer to function) are declared a prototype should be used and
the parameters to the function should not be named. This includes the
case where you are declaring the prototype for an interface function.</p>
<p><span class="target" id="design.mps.interface.c.type.fun.example"></span><a class="mpstag reference internal" href="#design.mps.interface.c.type.fun.example">.type.fun.example:</a> So use:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">extern</span> <span class="kt">mps_res_t</span> <span class="nf">mps_alloc</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="o">*</span><span class="p">,</span> <span class="kt">mps_pool_t</span><span class="p">,</span> <span class="kt">size_t</span><span class="p">,</span> <span class="p">...);</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">extern</span> <span class="n">mps_res_t</span> <span class="n">mps_alloc</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="o">*</span><span class="p">,</span> <span class="n">mps_pool_t</span><span class="p">,</span> <span class="kt">size_t</span><span class="p">,</span> <span class="p">...);</span>
</pre></div>
</div>
<p>rather than:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">extern</span> <span class="kt">mps_res_t</span> <span class="nf">mps_alloc</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">addr_return</span><span class="p">,</span> <span class="kt">mps_pool_t</span> <span class="n">pool</span> <span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">,</span> <span class="p">...);</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">extern</span> <span class="n">mps_res_t</span> <span class="n">mps_alloc</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">addr_return</span><span class="p">,</span> <span class="n">mps_pool_t</span> <span class="n">pool</span> <span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">,</span> <span class="p">...);</span>
</pre></div>
</div>
<p>and:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="nf">mps_addr_t</span> <span class="p">(</span><span class="o">*</span><span class="kt">mps_fmt_class_t</span><span class="p">)(</span><span class="kt">mps_addr_t</span><span class="p">);</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="n">mps_addr_t</span> <span class="p">(</span><span class="o">*</span><span class="n">mps_fmt_class_t</span><span class="p">)(</span><span class="n">mps_addr_t</span><span class="p">);</span>
</pre></div>
</div>
<p>rather than:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="nf">mps_addr_t</span> <span class="p">(</span><span class="o">*</span><span class="kt">mps_fmt_class_t</span><span class="p">)(</span><span class="kt">mps_addr_t</span> <span class="n">object</span><span class="p">);</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="n">mps_addr_t</span> <span class="p">(</span><span class="o">*</span><span class="n">mps_fmt_class_t</span><span class="p">)(</span><span class="n">mps_addr_t</span> <span class="n">object</span><span class="p">);</span>
</pre></div>
</div>
<p>See guide.impl.c.misc.prototype.parameters.</p>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-io"></span><div class="section" id="i-o-subsystem">
<span id="index-0"></span><h1>13. I/O subsystem<a class="headerlink" href="#i-o-subsystem" title="Permalink to this headline"></a></h1>
<div class="section" id="i-o-subsystem">
<span id="design-io"></span><span id="index-0"></span><h1>13. I/O subsystem<a class="headerlink" href="#i-o-subsystem" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.io"></span><h2>13.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.io.intro"></span><a class="mpstag reference internal" href="#design.mps.io.intro">.intro:</a> This document is the design of the MPS I/O Subsystem, a
@ -190,7 +190,7 @@ liberty to define this structure.</p>
several different types. It will probably choose to send them to
different destinations based on their type: telemetry to the
measurement tool, debugging output to the debugger, etc.</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="kt">int</span> <span class="kt">mps_io_type_t</span><span class="p">;</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="kt">int</span> <span class="n">mps_io_type_t</span><span class="p">;</span>
<span class="k">enum</span> <span class="p">{</span>
<span class="n">MPS_IO_TYPE_TELEMETRY</span><span class="p">,</span>
<span class="n">MPS_IO_TYPE_DEBUG</span>
@ -293,11 +293,11 @@ just a few old messages. What can you do with it?</p>
<span class="k">struct</span> <span class="n">sockaddr_in</span> <span class="n">debugging</span><span class="p">;</span>
<span class="p">}</span> <span class="n">mps_io_s</span><span class="p">;</span>
<span class="k">static</span> <span class="kt">mps_bool_t</span> <span class="n">inited</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">static</span> <span class="n">mps_bool_t</span> <span class="n">inited</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">static</span> <span class="n">mps_io_s</span> <span class="n">state</span><span class="p">;</span>
<span class="kt">mps_res_t</span> <span class="nf">mps_io_create</span><span class="p">(</span><span class="kt">mps_io_t</span> <span class="o">*</span><span class="n">mps_io_o</span><span class="p">)</span>
<span class="n">mps_res_t</span> <span class="nf">mps_io_create</span><span class="p">(</span><span class="n">mps_io_t</span> <span class="o">*</span><span class="n">mps_io_o</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">sock</span><span class="p">,</span> <span class="n">r</span><span class="p">;</span>
@ -329,7 +329,7 @@ just a few old messages. What can you do with it?</p>
<span class="p">}</span>
<span class="kt">void</span> <span class="nf">mps_io_destroy</span><span class="p">(</span><span class="kt">mps_io_t</span> <span class="n">mps_io</span><span class="p">)</span>
<span class="kt">void</span> <span class="nf">mps_io_destroy</span><span class="p">(</span><span class="n">mps_io_t</span> <span class="n">mps_io</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">assert</span><span class="p">(</span><span class="n">mps_io</span> <span class="o">==</span> <span class="o">&amp;</span><span class="n">state</span><span class="p">);</span>
<span class="n">assert</span><span class="p">(</span><span class="n">inited</span><span class="p">);</span>
@ -340,7 +340,7 @@ just a few old messages. What can you do with it?</p>
<span class="p">}</span>
<span class="kt">mps_res_t</span> <span class="nf">mps_io_send</span><span class="p">(</span><span class="kt">mps_io_t</span> <span class="n">mps_io</span><span class="p">,</span> <span class="kt">mps_type_t</span> <span class="n">type</span><span class="p">,</span>
<span class="n">mps_res_t</span> <span class="nf">mps_io_send</span><span class="p">(</span><span class="n">mps_io_t</span> <span class="n">mps_io</span><span class="p">,</span> <span class="n">mps_type_t</span> <span class="n">type</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">sockaddr</span> <span class="o">*</span><span class="n">toaddr</span><span class="p">;</span>
@ -368,7 +368,7 @@ just a few old messages. What can you do with it?</p>
<span class="p">}</span>
<span class="kt">mps_res_t</span> <span class="nf">mps_io_receive</span><span class="p">(</span><span class="kt">mps_io_t</span> <span class="n">mps_io</span><span class="p">,</span>
<span class="n">mps_res_t</span> <span class="nf">mps_io_receive</span><span class="p">(</span><span class="n">mps_io_t</span> <span class="n">mps_io</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">message_o</span><span class="p">,</span> <span class="kt">size_t</span> <span class="o">**</span><span class="n">size_o</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">r</span><span class="p">;</span>

View file

@ -54,8 +54,8 @@
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-keyword-arguments"></span><div class="section" id="keyword-arguments-in-the-mps">
<span id="index-0"></span><h1>8. Keyword arguments in the MPS<a class="headerlink" href="#keyword-arguments-in-the-mps" title="Permalink to this headline"></a></h1>
<div class="section" id="keyword-arguments-in-the-mps">
<span id="design-keyword-arguments"></span><span id="index-0"></span><h1>8. Keyword arguments in the MPS<a class="headerlink" href="#keyword-arguments-in-the-mps" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<h2>8.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p>Up to version 1.111, the <a class="reference external" href="http://www.ravenbrook.com/project/mps/">Memory Pool System</a> used varags to pass arguments
@ -70,9 +70,9 @@ parameters.</p>
<h2>8.2. Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>The basic design is not specific to the MPS. The keyword argument list is
passed as an array of argument structures which look like this:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_key_s</span> <span class="o">*</span><span class="kt">mps_key_t</span><span class="p">;</span>
<div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_key_s</span> <span class="o">*</span><span class="n">mps_key_t</span><span class="p">;</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_arg_s</span> <span class="p">{</span>
<span class="kt">mps_key_t</span> <span class="n">key</span><span class="p">;</span>
<span class="n">mps_key_t</span> <span class="n">key</span><span class="p">;</span>
<span class="k">union</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
<span class="kt">char</span> <span class="n">c</span><span class="p">;</span>
@ -127,7 +127,7 @@ a checking method for the argument, like this:</p>
<span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_key_s</span> <span class="p">{</span>
<span class="n">Sig</span> <span class="n">sig</span><span class="p">;</span> <span class="cm">/* Always KeySig */</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span>
<span class="n">Bool</span> <span class="nf">check</span><span class="p">(</span><span class="n">Arg</span> <span class="n">arg</span><span class="p">);</span>
<span class="n">Bool</span> <span class="n">check</span><span class="p">(</span><span class="n">Arg</span> <span class="n">arg</span><span class="p">);</span>
<span class="p">}</span> <span class="n">KeyStruct</span><span class="p">;</span>
</pre></div>
</div>

Some files were not shown because too many files have changed in this diff Show more