git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Avoid overlaps during type renaming in errors
commit630fb195f7ec5cb4e0ab825cb41a2b2657beed94 authorPhil Freeman <paf31@cantab.net> dateSun 22 May 2016, 11:01 (10 years ago) parent3ca81cc
1 file changed+12−9
src/Language/PureScript/Errors.hs+12−9
src/Language/PureScript/Errors.hs+12−9
@@ -340,14 +340,17 @@ addHint hint = onErrorMessages $ \(ErrorMessage hints se) -> ErrorMessage (hint
340340
341341-- | A map from rigid type variable name/unknown variable pairs to new variables.
342342data TypeMap = TypeMap
343− { umSkolemMap :: M.Map Int (String, Int, Maybe SourceSpan)
344− , umNextSkolem :: Int
345− , umUnknownMap :: M.Map Int Int
346− , umNextUnknown :: Int
343+ { umSkolemMap :: M.Map Int (String, Int, Maybe SourceSpan)
344+ -- ^ a map from skolems to their new names, including source and naming info
345+ , umUnknownMap :: M.Map Int Int
346+ -- ^ a map from unification variables to their new names
347+ , umNextIndex :: Int
348+ -- ^ unknowns and skolems share a source of names during renaming, to
349+ -- avoid overlaps in error messages. This is the next label for either case.
347350 } deriving Show
348351
349352defaultUnknownMap :: TypeMap
350−defaultUnknownMap = TypeMap M.empty 0 M.empty 0
353+defaultUnknownMap = TypeMap M.empty M.empty 0
351354
352355-- | How critical the issue is
353356data Level = Error | Warning deriving Show
@@ -366,16 +369,16 @@ replaceUnknowns = everywhereOnTypesM replaceTypes
366369 m <- get
367370 case M.lookup u (umUnknownMap m) of
368371 Nothing -> do
369− let u' = umNextUnknown m
370− put $ m { umUnknownMap = M.insert u u' (umUnknownMap m), umNextUnknown = u' + 1 }
372+ let u' = umNextIndex m
373+ put $ m { umUnknownMap = M.insert u u' (umUnknownMap m), umNextIndex = u' + 1 }
371374 return (TUnknown u')
372375 Just u' -> return (TUnknown u')
373376 replaceTypes (Skolem name s sko ss) = do
374377 m <- get
375378 case M.lookup s (umSkolemMap m) of
376379 Nothing -> do
377− let s' = umNextSkolem m
378− put $ m { umSkolemMap = M.insert s (name, s', ss) (umSkolemMap m), umNextSkolem = s' + 1 }
380+ let s' = umNextIndex m
381+ put $ m { umSkolemMap = M.insert s (name, s', ss) (umSkolemMap m), umNextIndex = s' + 1 }
379382 return (Skolem name s' sko ss)
380383 Just (_, s', _) -> return (Skolem name s' sko ss)
381384 replaceTypes other = return other