Sockeye: Allow to instantiate modules with inlined range in name space
authorDaniel Schwyn <schwyda@student.ethz.ch>
Tue, 4 Jul 2017 08:59:46 +0000 (10:59 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Tue, 4 Jul 2017 08:59:46 +0000 (10:59 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye/SockeyeASTFrontend.hs
tools/sockeye/SockeyeParser.hs

index 5b50bf2..f73c63b 100644 (file)
@@ -59,7 +59,9 @@ data ModuleInst
         , nameSpace    :: Identifier
         , arguments    :: [ModuleArg]
         , portMappings :: [PortMap]
-        } deriving (Show)
+        }
+    | MultiModuleInst (For ModuleInst)
+    deriving (Show)
 
 data ModuleArg
     = AddressArg !Word
index e943729..76c14df 100644 (file)
@@ -123,14 +123,18 @@ moduleInst = do
         args <- option [] $ parens (commaSep moduleArg)
         symbol "as"
         return (name, args)
-    nameSpace <- identifier
+    (forFn, nameSpace) <- identifierFor
     portMappings <- option [] $ symbol "with" *> many1 portMapping
-    return AST.ModuleInst
-        { AST.moduleName = name
-        , AST.nameSpace  = nameSpace
-        , AST.arguments  = args 
-        , AST.portMappings = portMappings
-        }
+    return $ let
+        moduleInst = AST.ModuleInst
+            { AST.moduleName = name
+            , AST.nameSpace  = nameSpace
+            , AST.arguments  = args 
+            , AST.portMappings = portMappings
+            }
+        in case forFn of
+            Nothing -> moduleInst
+            Just f  -> AST.MultiModuleInst $ f moduleInst
 
 moduleArg = choice [addressArg, numberArg, paramArg]
     where