DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(guile.info.gz) Non-immediate objects

Info Catalog (guile.info.gz) Immediate objects (guile.info.gz) Unpacking the SCM type (guile.info.gz) Heap Cell Type Information
 
 18.2.7.3 Non-immediate objects
 ..............................
 
 A Scheme object of type `SCM' that does not fulfill the `SCM_IMP'
 predicate holds an encoded reference to a heap cell.  This reference
 can be decoded to a C pointer to a heap cell using the `SCM2PTR' macro.
 The encoding of a pointer to a heap cell into a `SCM' value is done
 using the `PTR2SCM' macro.
 
  -- Macro: (scm_t_cell *) SCM2PTR (SCM X)
      Extract and return the heap cell pointer from a non-immediate `SCM'
      object X.
 
  -- Macro: SCM PTR2SCM (scm_t_cell * X)
      Return a `SCM' value that encodes a reference to the heap cell
      pointer X.
 
    Note that it is also possible to transform a non-immediate `SCM'
 value by using `SCM_UNPACK' into a `scm_t_bits' variable.  However, the
 result of `SCM_UNPACK' may not be used as a pointer to a `scm_t_cell':
 only `SCM2PTR' is guaranteed to transform a `SCM' object into a valid
 pointer to a heap cell.  Also, it is not allowed to apply `PTR2SCM' to
 anything that is not a valid pointer to a heap cell.
 
 Summary:
    * Only use `SCM2PTR' on `SCM' values for which `SCM_IMP' is false!
 
    * Don't use `(scm_t_cell *) SCM_UNPACK (X)'!  Use `SCM2PTR (X)'
      instead!
 
    * Don't use `PTR2SCM' for anything but a cell pointer!
 
Info Catalog (guile.info.gz) Immediate objects (guile.info.gz) Unpacking the SCM type (guile.info.gz) Heap Cell Type Information
automatically generated byinfo2html