Sockeye: Implement proper module instantiation check
[barrelfish] / tools / sockeye / SockeyeASTDecodingNet.hs
1 {-
2   SockeyeASTDecodingNet.hs: Decoding net AST for Sockeye
3
4   Part of Sockeye
5
6   Copyright (c) 2017, ETH Zurich.
7
8   All rights reserved.
9
10   This file is distributed under the terms in the attached LICENSE file.
11   If you do not find this file, copies can be found by writing to:
12   ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
13   Attn: Systems Group.
14 -}
15
16 module SockeyeASTDecodingNet where
17
18 import Data.List (intercalate)
19 import Data.Map (Map)
20
21 newtype NetSpec =
22     NetSpec
23         { net :: Map NodeId NodeSpec }
24     deriving (Show)
25
26 data NodeId = NodeId
27     { namespace :: Namespace
28     , name      :: !String
29     } deriving (Eq, Ord)
30
31 instance Show NodeId where
32     show (NodeId namespace name) = 
33         case ns namespace of
34             [] -> name
35             _  -> concat [show namespace, ".", name]
36
37 newtype Namespace = Namespace
38     { ns :: [String] }
39     deriving (Eq, Ord)
40
41 instance Show Namespace where
42     show (Namespace ns) = intercalate "." ns
43
44 data NodeSpec
45     = NodeSpec
46         { nodeType  :: NodeType
47         , accept    :: [BlockSpec]
48         , translate :: [MapSpec]
49         , overlay   :: Maybe NodeId
50         }
51     | AliasSpec (Maybe NodeId)
52     deriving (Show)
53
54 data NodeType
55     = Memory
56     | Device
57     | Other
58     deriving (Show)
59
60 data BlockSpec = BlockSpec
61     { base  :: Address
62     , limit :: Address
63     } deriving (Show)
64
65 data MapSpec = MapSpec
66     { srcBlock :: BlockSpec
67     , destNode :: NodeId
68     , destBase :: Address
69     } deriving (Show)
70
71 newtype Address =
72     Address
73         { address :: Word }
74     deriving (Show)