From bfe4705f525ba2bc5faaa5f2474f3ee994ed7850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 28 Sep 2022 22:06:10 +0200 Subject: Fix parser error position for variable redefinition --- src/Parser.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Parser.hs b/src/Parser.hs index 0f3747d..cd0c028 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -104,14 +104,16 @@ varName = VarName <$> identifier newVarName :: forall a proxy. ExprType a => proxy a -> TestParser VarName newVarName proxy = do + off <- stateOffset <$> getParserState name <- varName - addVarName proxy name + addVarName off proxy name return name -addVarName :: forall a proxy. ExprType a => proxy a -> VarName -> TestParser () -addVarName _ name = do +addVarName :: forall a proxy. ExprType a => Int -> proxy a -> VarName -> TestParser () +addVarName off _ name = do gets (lookup name . testVars) >>= \case - Just _ -> fail $ "variable '" ++ unpackVarName name ++ "' already exists" + Just _ -> parseError $ FancyError off $ S.singleton $ ErrorFail $ T.unpack $ + T.pack "variable '" <> textVarName name <> T.pack "' already exists" Nothing -> return () modify $ \s -> s { testVars = (name, SomeExprType @a Proxy) : testVars s } @@ -299,13 +301,14 @@ letStatement = do line <- getSourceLine indent <- L.indentLevel wsymbol "let" + off <- stateOffset <$> getParserState name <- varName osymbol "=" SomeExpr (e :: Expr a) <- someExpr - void $ eol s <- get - addVarName @a Proxy name + addVarName @a off Proxy name + void $ eol body <- testBlock indent put s -- cgit v1.2.3