Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit a04ccbb

Browse files
committed
Write record fields to the heap in the abstract analyses.
1 parent c7bee13 commit a04ccbb

3 files changed

Lines changed: 19 additions & 5 deletions

File tree

semantic-core/src/Analysis/ImportGraph.hs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import Control.Effect.Reader
1515
import Control.Effect.State
1616
import Control.Monad ((>=>))
1717
import Data.File
18-
import Data.Foldable (fold)
18+
import Data.Foldable (fold, for_)
1919
import Data.Function (fix)
2020
import Data.List.NonEmpty (nonEmpty)
2121
import Data.Loc
@@ -118,5 +118,9 @@ importGraphAnalysis = Analysis{..}
118118
string s = pure (Value (String s) mempty)
119119
asString (Value (String s) _) = pure s
120120
asString _ = pure mempty
121-
record fields = pure (Value Abstract (foldMap (valueGraph . snd) fields))
121+
record fields = do
122+
for_ fields $ \ (k, v) -> do
123+
addr <- alloc k
124+
assign addr v
125+
pure (Value Abstract (foldMap (valueGraph . snd) fields))
122126
_ ... m = pure (Just m)

semantic-core/src/Analysis/ScopeGraph.hs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Control.Effect.Reader
1616
import Control.Effect.State
1717
import Control.Monad ((>=>))
1818
import Data.File
19-
import Data.Foldable (fold)
19+
import Data.Foldable (fold, for_)
2020
import Data.Function (fix)
2121
import Data.List.NonEmpty
2222
import Data.Loc
@@ -104,5 +104,9 @@ scopeGraphAnalysis = Analysis{..}
104104
asBool _ = pure True <|> pure False
105105
string _ = pure mempty
106106
asString _ = pure mempty
107-
record fields = pure (foldMap snd fields)
107+
record fields = do
108+
for_ fields $ \ (k, v) -> do
109+
addr <- alloc k
110+
assign addr v
111+
pure (foldMap snd fields)
108112
_ ... m = pure (Just m)

semantic-core/src/Analysis/Typecheck.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import Data.Scope
3333
import Data.Semigroup (Last (..))
3434
import qualified Data.Set as Set
3535
import Data.Term
36+
import Data.Traversable (for)
3637
import Data.Void
3738
import GHC.Generics (Generic1)
3839
import Prelude hiding (fail)
@@ -173,7 +174,12 @@ typecheckingAnalysis = Analysis{..}
173174
asBool b = unify (Term Bool) b >> pure True <|> pure False
174175
string _ = pure (Term String)
175176
asString s = unify (Term String) s $> mempty
176-
record fields = pure (Term (Record (Map.fromList fields)))
177+
record fields = do
178+
fields' <- for fields $ \ (k, v) -> do
179+
addr <- alloc k
180+
(k, v) <$ assign addr v
181+
-- FIXME: should records reference types by address instead?
182+
pure (Term (Record (Map.fromList fields')))
177183
_ ... m = pure (Just m)
178184

179185

0 commit comments

Comments
 (0)