DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(guile.info.gz) Non-immediate Datatypes

Info Catalog (guile.info.gz) Immediate Datatypes (guile.info.gz) How Guile does it (guile.info.gz) Signalling Type Errors
 
 18.2.5 Non-immediate Datatypes
 ------------------------------
 
 A non-immediate datatype is one which lives in the heap, either because
 it cannot fit entirely within a `SCM' word, or because it denotes a
 specific storage location (in the nomenclature of the Revised^5 Report
 on Scheme).
 
    The `SCM_IMP' and `SCM_NIMP' macros will distinguish these from
 immediates; see  Immediates vs Non-immediates.
 
    Given a cell, Guile distinguishes between pairs and other
 non-immediate types by storing special "tag" values in a non-pair
 cell's car, that cannot appear in normal pairs.  A cell with a non-tag
 value in its car is an ordinary pair.  The type of a cell with a tag in
 its car depends on the tag; the non-immediate type predicates test this
 value.  If a tag value appears elsewhere (in a vector, for example),
 the heap may become corrupted.
 
    Note how the type information for a non-immediate object is split
 between the `SCM' word and the cell that the `SCM' word points to.  The
 `SCM' word itself only indicates that the object is non-immediate -- in
 other words stored in a heap cell.  The tag stored in the first word of
 the heap cell indicates more precisely the type of that object.
 
    The type predicates for non-immediate values work correctly on any
 `SCM' value; you do not need to call `SCM_NIMP' first, to establish
 that a value is non-immediate.
 

Menu

 
* Pair Data
* Vector Data
* Procedures
* Closures
* Subrs
* Port Data
 
Info Catalog (guile.info.gz) Immediate Datatypes (guile.info.gz) How Guile does it (guile.info.gz) Signalling Type Errors
automatically generated byinfo2html