Commit 6dfe9828 authored by Facundo Domínguez's avatar Facundo Domínguez Committed by Ben Gamari

StaticPointers: Clarify documentation

 * Document requirement to use the same binaries.
 * Fix some code comments.

Test Plan: ./validate

Reviewers: bgamari, mboes, hvr

Reviewed By: bgamari, mboes

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D4172
parent f5dc8ccc
......@@ -60,13 +60,13 @@ Here is a running example:
in ...(static k)...
* The renamer looks for out-of-scope names in the body of the static
form, as always If all names are in scope, the free variables of the
form, as always. If all names are in scope, the free variables of the
body are stored in AST at the location of the static form.
* The typechecker verifies that all free variables occurring in the
static form are floatable to top level (see Note [Meaning of
IdBindingInfo] in TcRnTypes). In our example, 'k' is floatable, even
though it is bound in a nested let, we are fine.
IdBindingInfo] in TcRnTypes). In our example, 'k' is floatable.
Even though it is bound in a nested let, we are fine.
* The desugarer replaces the static form with an application of the
function 'makeStatic' (defined in module GHC.StaticPtr.Internal of
......
......@@ -371,9 +371,9 @@ rnExpr e@(ELazyPat {}) = patSynErr e empty
* *
************************************************************************
For the static form we check that the free variables are all top-level
value bindings. This is done by checking that the name is external or
wired-in. See the Notes about the NameSorts in Name.hs.
For the static form we check that it is not used in splices.
We also collect the free variables of the term which come from
this module. See Note [Grand plan for static forms] in StaticPtrTable.
-}
rnExpr e@(HsStatic _ expr) = do
......
......@@ -1176,8 +1176,8 @@ ClosedLet means that
- For the ClosedTypeId field see Note [Bindings with closed types]
For (static e) to be valid, we need for every 'x' free in 'e',
x's binding must be floatable to top level. Specifically:
* x's RhsNames must be non-empty
that x's binding is floatable to the top level. Specifically:
* x's RhsNames must be empty
* x's type has no free variables
See Note [Grand plan for static forms] in StaticPtrTable.hs.
This test is made in TcExpr.checkClosedInStaticForm.
......
......@@ -12937,6 +12937,13 @@ While the following definitions are rejected: ::
entered on the REPL may not. This is a limitation of GHCi; see
:ghc-ticket:`12356` for details.
.. note::
The set of keys used for locating static pointers in the Static Pointer
Table is not guaranteed to remain stable for different program binaries.
Or in other words, only processes launched from the same program binary
are guaranteed to use the same set of keys.
.. _typechecking-static-pointers:
Static semantics of static pointers
......
......@@ -28,6 +28,11 @@
-- table is known as the Static Pointer Table. The reference can then be
-- dereferenced to obtain the value.
--
-- The various communicating processes need to aggree on the keys used to refer
-- to the values in the Static Pointer Table, or lookups will fail. Only
-- processes launched from the same program binary are guaranteed to use the
-- same set of keys.
--
-----------------------------------------------------------------------------
module GHC.StaticPtr
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment