This repository was archived by the owner on Apr 1, 2025. It is now read-only.
File tree Expand file tree Collapse file tree
semantic-core/src/Analysis Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -15,7 +15,7 @@ import Control.Effect.Reader
1515import Control.Effect.State
1616import Control.Monad ((>=>) )
1717import Data.File
18- import Data.Foldable (fold )
18+ import Data.Foldable (fold , for_ )
1919import Data.Function (fix )
2020import Data.List.NonEmpty (nonEmpty )
2121import 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)
Original file line number Diff line number Diff line change @@ -16,7 +16,7 @@ import Control.Effect.Reader
1616import Control.Effect.State
1717import Control.Monad ((>=>) )
1818import Data.File
19- import Data.Foldable (fold )
19+ import Data.Foldable (fold , for_ )
2020import Data.Function (fix )
2121import Data.List.NonEmpty
2222import 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)
Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ import Data.Scope
3333import Data.Semigroup (Last (.. ))
3434import qualified Data.Set as Set
3535import Data.Term
36+ import Data.Traversable (for )
3637import Data.Void
3738import GHC.Generics (Generic1 )
3839import 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
You can’t perform that action at this time.
0 commit comments