From ff761f8db8050082dede6368d4461a088a052676 Mon Sep 17 00:00:00 2001 From: Robbie Gleichman Date: Wed, 31 Jul 2019 12:01:37 -0700 Subject: [PATCH] Make the embedMap a Map. --- app/Translate.hs | 11 +++++++---- app/TranslateCore.hs | 7 ++++--- test/UnitTests.hs | 4 +++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/Translate.hs b/app/Translate.hs index 220ef5b..cd9272c 100644 --- a/app/Translate.hs +++ b/app/Translate.hs @@ -13,6 +13,7 @@ import Control.Monad.State(State, evalState) import Data.Either(partitionEithers) import qualified Data.Graph.Inductive.PatriciaTree as FGR import Data.List(unzip5, partition, intercalate) +import qualified Data.Map as Map import Data.Maybe(fromMaybe, mapMaybe) import qualified Data.Set as Set @@ -132,13 +133,14 @@ patternArgumentMapper (asGraphAndRef@(graphAndRef, _), port) graphToTuple :: SyntaxGraph - -> ([SgNamedNode], [Edge], [SgSink], [SgBind], [(NodeName, NodeName)]) + -> ([SgNamedNode], [Edge], [SgSink], [SgBind], Map.Map NodeName NodeName) graphToTuple (SyntaxGraph a b c d e) = (a, b, c, d, e) graphsToComponents :: [SyntaxGraph] - -> ([SgNamedNode], [Edge], [SgSink], [SgBind], [(NodeName, NodeName)]) -graphsToComponents graphs = (concat a, concat b, concat c, concat d, concat e) + -> ([SgNamedNode], [Edge], [SgSink], [SgBind], Map.Map NodeName NodeName) +graphsToComponents graphs + = (mconcat a, mconcat b, mconcat c, mconcat d, mconcat e) where (a, b, c, d, e) = unzip5 $ fmap graphToTuple graphs @@ -175,7 +177,8 @@ makeNestedPatternGraph applyIconName funStr argVals = nestedApplyResult asNameBinds = mapMaybe asNameBind argVals allBinds = nestedBinds <> asNameBinds - newEMap = ((\(Named n _) -> (n, applyIconName)) <$> nestedArgs) + newEMap = Map.fromList + ((\(Named n _) -> (n, applyIconName)) <$> nestedArgs) <> nestedEMaps newGraph = SyntaxGraph diff --git a/app/TranslateCore.hs b/app/TranslateCore.hs index 1498dcf..1e96bbe 100644 --- a/app/TranslateCore.hs +++ b/app/TranslateCore.hs @@ -33,6 +33,7 @@ import Data.Either(partitionEithers) import qualified Data.Graph.Inductive.Graph as ING import qualified Data.Graph.Inductive.PatriciaTree as FGR import Data.List(find) +import qualified Data.Map as Map import Data.Semigroup(Semigroup, (<>)) import qualified Data.Set as Set @@ -71,7 +72,7 @@ data SyntaxGraph = SyntaxGraph { sgBinds :: [SgBind], -- sgEmbedMap keeps track of nodes embedded in other nodes. If (child, parent) -- is in the Map, then child is embedded inside parent. - sgEmbedMap :: [(NodeName, NodeName)] + sgEmbedMap :: Map.Map NodeName NodeName } deriving (Show, Eq) instance Semigroup SyntaxGraph where @@ -351,9 +352,9 @@ nestedPatternNodeToIcon str children = NestedPApp makeLNode :: SgNamedNode -> ING.LNode SgNamedNode makeLNode namedNode@(Named (NodeName name) _) = (name, namedNode) -lookupInEmbeddingMap :: NodeName -> [(NodeName, NodeName)] -> NodeName +lookupInEmbeddingMap :: NodeName -> Map.Map NodeName NodeName -> NodeName lookupInEmbeddingMap origName eMap = lookupHelper origName where - lookupHelper name = case lookup name eMap of + lookupHelper name = case Map.lookup name eMap of Nothing -> name Just parent -> if parent == origName then error $ "lookupInEmbeddingMap: Found cycle. Node = " diff --git a/test/UnitTests.hs b/test/UnitTests.hs index 4083c4a..6811048 100644 --- a/test/UnitTests.hs +++ b/test/UnitTests.hs @@ -5,6 +5,7 @@ module UnitTests( import Test.HUnit import Data.List(foldl', sort, sortOn) +import qualified Data.Map as Map import Translate(translateStringToSyntaxGraph) import TranslateCore(SyntaxGraph(..), SgBind(..)) @@ -100,7 +101,8 @@ renameGraph (SyntaxGraph nodes edges sinks sources embedMap) = (renamedNodes, nameMap, _) = foldl' renameNodeFolder ([], [], 0) $ sortOn removeNames nodes renamedEdges = sort $ fmap (renameEdge nameMap) edges renamedSources = sort $ fmap (renameSource nameMap) sources - renamedEmbedMap = sort $ fmap (renameEmbed nameMap) embedMap + renamedEmbedMap + = Map.fromList $ sort $ renameEmbed nameMap <$> Map.toList embedMap -- END renameGraph