From 515bac31de8d149f0a1c07d8132cc40766550af3 Mon Sep 17 00:00:00 2001 From: Lukasz Czajka Date: Wed, 4 Oct 2023 11:39:26 +0200 Subject: [PATCH] fix record creation error message --- .../Concrete/Translation/FromParsed/Analysis/Scoping.hs | 9 +++++---- .../FromParsed/Analysis/Scoping/Error/Types.hs | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs b/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs index bfc7f369ea..3d8568bca3 100644 --- a/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs +++ b/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs @@ -2088,7 +2088,7 @@ checkRecordCreation RecordCreation {..} = do Just ci -> do let name = NameUnqualified (ci ^. constructorInfoTypeName . nameConcrete) nameId = ci ^. constructorInfoTypeName . S.nameId - info <- getRecordInfo' name nameId + info <- getRecordInfo' (getLoc _recordCreationConstructor) name nameId let sig = info ^. recordInfoSignature (vars', fields') <- withLocalScope $ localBindings $ ignoreSyntax $ do vs <- mapM (reserveFunctionSymbol . (^. fieldDefineFunDef)) _recordCreationFields @@ -2201,19 +2201,20 @@ getRecordInfo :: (Members '[State ScoperState, Error ScoperError] r) => ScopedIden -> Sem r RecordInfo -getRecordInfo indTy = getRecordInfo' (indTy ^. scopedIdenFinal . nameConcrete) (indTy ^. scopedIdenFinal . S.nameId) +getRecordInfo indTy = getRecordInfo' (getLoc indTy) (indTy ^. scopedIdenFinal . nameConcrete) (indTy ^. scopedIdenFinal . S.nameId) getRecordInfo' :: forall r. (Members '[State ScoperState, Error ScoperError] r) => + Interval -> Name -> NameId -> Sem r RecordInfo -getRecordInfo' name nameId = +getRecordInfo' loc name nameId = fromMaybeM err (gets (^. scoperRecordFields . at nameId)) where err :: Sem r a - err = throw (ErrNotARecord (NotARecord name)) + err = throw (ErrNotARecord (NotARecord name loc)) getNameSignature :: (Members '[State ScoperState, Error ScoperError] r) => ScopedIden -> Sem r NameSignature getNameSignature s = do diff --git a/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping/Error/Types.hs b/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping/Error/Types.hs index 172974eba2..9711e9f391 100644 --- a/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping/Error/Types.hs +++ b/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping/Error/Types.hs @@ -751,8 +751,9 @@ instance ToGenericError ConstructorNotARecord where i :: Interval i = getLoc _constructorNotARecord -newtype NotARecord = NotARecord - { _notARecord :: Name +data NotARecord = NotARecord + { _notARecord :: Name, + _notARecordLocation :: Interval } deriving stock (Show) @@ -771,7 +772,7 @@ instance ToGenericError NotARecord where } where i :: Interval - i = getLoc _notARecord + i = _notARecordLocation newtype UnexpectedField = UnexpectedField { _unexpectedField :: Symbol