fix implicit type extraction

This commit is contained in:
Ilya Rezvov
2018-04-08 10:25:05 -07:00
parent 43feccbf08
commit d7641bcee2
3 changed files with 23 additions and 16 deletions
+8 -2
View File
@@ -1421,7 +1421,7 @@ data FunCtx = FunCtx {
desugarize :: [ModuleField] -> S.Module
desugarize fields =
let mod = Module {
types = extract extractTypeDef fields,
types = reverse $ foldl' extractTypeDef (explicitTypeDefs fields) fields,
functions = extract extractFunction fields,
tables = extract extractTable fields,
imports = extract extractImport fields,
@@ -1457,8 +1457,14 @@ desugarize fields =
synTypeDefToStruct (TypeDef _ FuncType { params, results }) =
S.FuncType (map paramType params) results
explicitTypeDefs :: [ModuleField] -> [TypeDef]
explicitTypeDefs = map (\(MFType def) -> def) . filter isTypeDef
where
isTypeDef (MFType _) = True
isTypeDef _ = False
extractTypeDef :: [TypeDef] -> ModuleField -> [TypeDef]
extractTypeDef defs (MFType def) = def : defs
extractTypeDef defs (MFType _) = defs -- should be extracted before implicit defs
extractTypeDef defs (MFImport Import { desc = ImportFunc _ typeUse }) =
matchTypeUse defs typeUse
extractTypeDef defs (MFFunc Function { funcType, body }) =