1
1
mirror of https://github.com/github/semantic.git synced 2024-12-24 07:25:44 +03:00

Pull uninitializedAddress out to the top level.

This commit is contained in:
Rob Rix 2018-03-15 14:35:02 -04:00
parent d570c854f3
commit 527d157d90

View File

@ -69,10 +69,6 @@ letrec name body = do
-- | 'Precise' locations are always 'alloc'ated a fresh 'Address', and 'deref'erence to the 'Latest' value written.
instance (MonadFail m, LocationFor value ~ Precise, MonadHeap value m) => MonadAddressable Precise value m where
deref = maybe uninitializedAddress (pure . unLatest) <=< flip fmap getHeap . heapLookup
where
-- | Fail with a message denoting an uninitialized address (i.e. one which was 'alloc'ated, but never 'assign'ed a value before being 'deref'erenced).
uninitializedAddress :: MonadFail m => m a
uninitializedAddress = fail "uninitialized address"
alloc _ = fmap (Address . Precise . heapSize) getHeap
@ -82,3 +78,7 @@ instance (Alternative m, LocationFor value ~ Monovariant, MonadHeap value m, Ord
deref = asum . maybe [] (map pure . toList) <=< flip fmap getHeap . heapLookup
alloc = pure . Address . Monovariant
-- | Fail with a message denoting an uninitialized address (i.e. one which was 'alloc'ated, but never 'assign'ed a value before being 'deref'erenced).
uninitializedAddress :: MonadFail m => m a
uninitializedAddress = fail "uninitialized address"