diff options
Diffstat (limited to 'includes/rts/StablePtr.h')
-rw-r--r-- | includes/rts/StablePtr.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/includes/rts/StablePtr.h b/includes/rts/StablePtr.h new file mode 100644 index 0000000000..0d3642fbfe --- /dev/null +++ b/includes/rts/StablePtr.h @@ -0,0 +1,35 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 1998-2009 + * + * Stable Pointers + * + * Do not #include this file directly: #include "Rts.h" instead. + * + * To understand the structure of the RTS headers, see the wiki: + * http://ghc.haskell.org/trac/ghc/wiki/Commentary/SourceTree/Includes + * + * ---------------------------------------------------------------------------*/ + +#pragma once + +EXTERN_INLINE StgPtr deRefStablePtr (StgStablePtr stable_ptr); +StgStablePtr getStablePtr (StgPtr p); + +/* ----------------------------------------------------------------------------- + PRIVATE from here. + -------------------------------------------------------------------------- */ + +typedef struct { + StgPtr addr; // Haskell object when entry is in use, next free + // entry (NULL when this is the last free entry) + // otherwise. +} spEntry; + +extern DLL_IMPORT_RTS spEntry *stable_ptr_table; + +EXTERN_INLINE +StgPtr deRefStablePtr(StgStablePtr sp) +{ + return stable_ptr_table[(StgWord)sp].addr; +} |