From 81fee2949015094fdbcea50f7113b9162a43ed9e Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 19 Nov 2019 07:59:49 +0000 Subject: [PATCH] Extract some label-related stuff --- src/Mima/Format/SymbolFile.hs | 14 +++----------- src/Mima/Label.hs | 21 +++++++++++++++++++++ src/Mima/Parse/SymbolFile.hs | 3 +-- 3 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 src/Mima/Label.hs diff --git a/src/Mima/Format/SymbolFile.hs b/src/Mima/Format/SymbolFile.hs index 7ef2297..52906ca 100644 --- a/src/Mima/Format/SymbolFile.hs +++ b/src/Mima/Format/SymbolFile.hs @@ -10,24 +10,16 @@ import qualified Data.Text as T import Mima.Format.Common import Mima.Word +import Mima.Label fAddress :: MimaAddress -> T.Text fAddress = fixWidthHex 5 . toHex -type LabelName = T.Text - -combineByAddress :: Map.Map LabelName MimaAddress -> Map.Map MimaAddress (Set.Set LabelName) -combineByAddress = ($ Map.empty ) - . mconcat - . reverse - . map (\(l, a) -> Map.insertWith Set.union a (Set.singleton l)) - . Map.assocs - fLabels :: Set.Set LabelName -> T.Text fLabels = T.intercalate " " . Set.toAscList fLine :: (MimaAddress, Set.Set LabelName) -> T.Text fLine (a, s) = fAddress a <> ": " <> fLabels s <> "\n" -formatSymbolFile :: Map.Map LabelName MimaAddress -> T.Text -formatSymbolFile = mconcat . map fLine . Map.assocs . combineByAddress +formatSymbolFile :: LabelSpec -> T.Text +formatSymbolFile = mconcat . map fLine . Map.assocs . labelsByAddress diff --git a/src/Mima/Label.hs b/src/Mima/Label.hs new file mode 100644 index 0000000..9453f93 --- /dev/null +++ b/src/Mima/Label.hs @@ -0,0 +1,21 @@ +module Mima.Label + ( LabelName + , LabelSpec + , labelsByAddress + ) where + +import qualified Data.Map as Map +import qualified Data.Text as T +import qualified Data.Set as Set + +import Mima.Word + +type LabelName = T.Text +type LabelSpec = Map.Map LabelName MimaAddress + +labelsByAddress :: LabelSpec -> Map.Map MimaAddress (Set.Set LabelName) +labelsByAddress = ($ Map.empty) + . mconcat + . reverse + . map (\(l, a) -> Map.insertWith Set.union a (Set.singleton l)) + . Map.assocs diff --git a/src/Mima/Parse/SymbolFile.hs b/src/Mima/Parse/SymbolFile.hs index 85f6361..630f0d2 100644 --- a/src/Mima/Parse/SymbolFile.hs +++ b/src/Mima/Parse/SymbolFile.hs @@ -11,13 +11,12 @@ import qualified Data.Map as Map import qualified Data.Text as T import Text.Megaparsec +import Mima.Label import Mima.Parse.Common import Mima.Parse.Lexeme import Mima.Parse.Weed import Mima.Word -type LabelName = T.Text - {- Parsing -} lWhitespace :: Parser Char