on master help sign in
Merge branch 'master' into old-benchmarks
beca447Evan Czaplicki
elm-compiler.cabal+2−2
@@ -87,10 +87,10 @@ Library
87 Nitpick.PatternMatches,
87 Nitpick.PatternMatches,
88 Nitpick.TopLevelTypes,
88 Nitpick.TopLevelTypes,
89 Optimize,
89 Optimize,
90+ Optimize.Case,
91+ Optimize.DecisionTree,
90 Optimize.Environment,
92 Optimize.Environment,
91 Optimize.Inline,
93 Optimize.Inline,
92− Optimize.Patterns,
93− Optimize.Patterns.DecisionTree,
94 Parse.Binop,
94 Parse.Binop,
95 Parse.Declaration,
95 Parse.Declaration,
96 Parse.Expression,
96 Parse.Expression,
src/AST/Expression/Optimized.hs+1−1
@@ -10,7 +10,7 @@ import qualified AST.Literal as Literal
10import qualified AST.Module.Name as ModuleName
10import qualified AST.Module.Name as ModuleName
11import qualified AST.Type as Type
11import qualified AST.Type as Type
12import qualified AST.Variable as Var
12import qualified AST.Variable as Var
13−import qualified Optimize.Patterns.DecisionTree as DT
13+import qualified Optimize.DecisionTree as DT
14import qualified Reporting.Region as R
14import qualified Reporting.Region as R
15
15
16
16
src/Generate/JavaScript/Expression.hs+1−1
@@ -16,7 +16,7 @@ import qualified Generate.JavaScript.BuiltIn as BuiltIn
16import qualified Generate.JavaScript.Literal as Literal
16import qualified Generate.JavaScript.Literal as Literal
17import qualified Generate.JavaScript.Port as Port
17import qualified Generate.JavaScript.Port as Port
18import qualified Generate.JavaScript.Variable as Var
18import qualified Generate.JavaScript.Variable as Var
19−import qualified Optimize.Patterns.DecisionTree as DT
19+import qualified Optimize.DecisionTree as DT
20
20
21
21
22-- CODE CHUNKS
22-- CODE CHUNKS
src/Nitpick/PatternMatches.hs+2−2
@@ -15,7 +15,7 @@ import qualified AST.Pattern as Pattern
15import qualified AST.Variable as Var
15import qualified AST.Variable as Var
16import Elm.Utils ((|>))
16import Elm.Utils ((|>))
17import Nitpick.Pattern (Pattern(..), fromCanonicalPattern)
17import Nitpick.Pattern (Pattern(..), fromCanonicalPattern)
18−import qualified Optimize.Patterns.DecisionTree as Opt
18+import qualified Optimize.DecisionTree as DT
19import qualified Reporting.Annotation as A
19import qualified Reporting.Annotation as A
20import qualified Reporting.Error.Pattern as Error
20import qualified Reporting.Error.Pattern as Error
21import qualified Reporting.Region as Region
21import qualified Reporting.Region as Region
@@ -25,7 +25,7 @@ import qualified Reporting.Result as Result
25patternMatches
25patternMatches
26 :: Module.Interfaces
26 :: Module.Interfaces
27 -> Module.CanonicalModule
27 -> Module.CanonicalModule
28− -> Result.Result w Error.Error Opt.VariantDict
28+ -> Result.Result w Error.Error DT.VariantDict
29patternMatches interfaces modul =
29patternMatches interfaces modul =
30 let
30 let
31 name = Module.name modul
31 name = Module.name modul
src/Optimize.hs+3−3
@@ -11,10 +11,10 @@ import qualified AST.Module as Module
11import qualified AST.Module.Name as ModuleName
11import qualified AST.Module.Name as ModuleName
12import qualified AST.Pattern as P
12import qualified AST.Pattern as P
13import qualified AST.Variable as Var
13import qualified AST.Variable as Var
14+import qualified Optimize.Case as Case
15+import qualified Optimize.DecisionTree as DT
14import qualified Optimize.Environment as Env
16import qualified Optimize.Environment as Env
15import qualified Optimize.Inline as Inline
17import qualified Optimize.Inline as Inline
16−import qualified Optimize.Patterns as Patterns
17−import qualified Optimize.Patterns.DecisionTree as DT
18import qualified Reporting.Annotation as A
18import qualified Reporting.Annotation as A
19import qualified Reporting.Region as R
19import qualified Reporting.Region as R
20
20
@@ -257,7 +257,7 @@ optimizeExpr context annExpr@(A.A region expression) =
257
257
258 name <- Env.freshName
258 name <- Env.freshName
259 optBranches <- T.traverse (optimizeBranch context name) branches
259 optBranches <- T.traverse (optimizeBranch context name) branches
260− optCase <- Patterns.optimize variantDict region name optBranches
260+ optCase <- Case.optimize variantDict region name optBranches
261 return $ Opt.Let [ Opt.Def Opt.dummyFacts name optExpr ] optCase
261 return $ Opt.Let [ Opt.Def Opt.dummyFacts name optExpr ] optCase
262
262
263 Expr.Data name exprs ->
263 Expr.Data name exprs ->
src/Optimize/Patterns.hs → src/Optimize/Case.hsrenamed+2−2
@@ -1,5 +1,5 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2−module Optimize.Patterns (optimize) where
2+module Optimize.Case (optimize) where
3
3
4import Control.Arrow (second)
4import Control.Arrow (second)
5import qualified Data.Map as Map
5import qualified Data.Map as Map
@@ -8,8 +8,8 @@ import qualified Data.Maybe as Maybe
8
8
9import qualified AST.Expression.Optimized as Opt
9import qualified AST.Expression.Optimized as Opt
10import qualified AST.Pattern as P
10import qualified AST.Pattern as P
11+import qualified Optimize.DecisionTree as DT
11import qualified Optimize.Environment as Env
12import qualified Optimize.Environment as Env
12−import qualified Optimize.Patterns.DecisionTree as DT
13import qualified Reporting.Annotation as A
13import qualified Reporting.Annotation as A
14import qualified Reporting.Region as R
14import qualified Reporting.Region as R
15
15
src/Optimize/Patterns/DecisionTree.hs → src/Optimize/DecisionTree.hsrenamed+9−11
@@ -1,5 +1,5 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2−module Optimize.Patterns.DecisionTree where
2+module Optimize.DecisionTree where
3{- To learn more about how this works, definitely read through:
3{- To learn more about how this works, definitely read through:
4
4
5 "When Do Match-Compilation Heuristics Matter?"
5 "When Do Match-Compilation Heuristics Matter?"
@@ -252,18 +252,16 @@ gatherEdges variantDict branches path =
252 relevantTests =
252 relevantTests =
253 testsAtPath path branches
253 testsAtPath path branches
254
254
255− allRawEdges =
255+ allEdges =
256 map (edgesFor path branches) relevantTests
256 map (edgesFor path branches) relevantTests
257+
258+ fallbacks =
259+ if isComplete variantDict relevantTests then
260+ []
261+ else
262+ filter (isIrrelevantTo path) branches
257 in
263 in
258− if isComplete variantDict relevantTests then
264+ ( allEdges, fallbacks )
259− ( init allRawEdges
260− , snd (last allRawEdges)
261− )
262−
263− else
264− ( allRawEdges
265− , filter (isIrrelevantTo path) branches
266− )
267
265
268
266
269-- FIND RELEVANT TESTS
267-- FIND RELEVANT TESTS
src/Optimize/Environment.hs+1−1
@@ -8,7 +8,7 @@ module Optimize.Environment
8
8
9import qualified Control.Monad.State as State
9import qualified Control.Monad.State as State
10
10
11−import qualified Optimize.Patterns.DecisionTree as DT
11+import qualified Optimize.DecisionTree as DT
12
12
13
13
14type Optimizer a =
14type Optimizer a =
tests/Test/Compiler.hs−1
@@ -6,7 +6,6 @@ import Control.Exception (try, IOException)
6
6
7import qualified Data.Map as Map
7import qualified Data.Map as Map
8import Data.Maybe (isJust)
8import Data.Maybe (isJust)
9−import Data.Traversable (traverse)
10
9
11import System.Directory (createDirectoryIfMissing)
10import System.Directory (createDirectoryIfMissing)
12import System.Environment (lookupEnv)
11import System.Environment (lookupEnv)