on master help sign in
fix_js_unexpected_con_as_glob
a9eaa61Rui Barreiro
src/IRTS/JavaScript/Codegen.hs+2−1
@@ -98,7 +98,8 @@ codegenJs :: CGConf -> CodeGenerator
98codegenJs conf ci =
98codegenJs conf ci =
99 do
99 do
100 debug <- isYes <$> lookupEnv "IDRISJS_DEBUG"
100 debug <- isYes <$> lookupEnv "IDRISJS_DEBUG"
101− let defs = Map.fromList $ liftDecls ci
101+ let defs' = Map.fromList $ liftDecls ci
102+ let defs = globlToCon defs'
102 let used = Map.elems $ removeDeadCode defs [sMN 0 "runMain"]
103 let used = Map.elems $ removeDeadCode defs [sMN 0 "runMain"]
103 if debug then
104 if debug then
104 do
105 do
src/IRTS/JavaScript/LangTransforms.hs+13
@@ -8,6 +8,7 @@ Maintainer : The Idris Community.
8{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, StandaloneDeriving #-}
8{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, StandaloneDeriving #-}
9
9
10module IRTS.JavaScript.LangTransforms( removeDeadCode
10module IRTS.JavaScript.LangTransforms( removeDeadCode
11+ , globlToCon
11 ) where
12 ) where
12
13
13
14
@@ -94,3 +95,15 @@ removeDeadCode dcls start =
94 remCons = removeUnusedBranches (getUsedConstructors used) used
95 remCons = removeUnusedBranches (getUsedConstructors used) used
95 in if Map.keys remCons == Map.keys dcls then remCons
96 in if Map.keys remCons == Map.keys dcls then remCons
96 else removeDeadCode remCons start
97 else removeDeadCode remCons start
98+
99+
100+globlToCon :: Map Name LDecl -> Map Name LDecl
101+globlToCon x =
102+ transformBi (f x) x
103+ where
104+ f :: Map Name LDecl -> LExp -> LExp
105+ f y x@(LV (Glob n)) =
106+ case Map.lookup n y of
107+ Just (LConstructor _ conId arity) -> LCon Nothing conId n []
108+ _ -> x
109+ f y x = x