1{- 
2  Type name: qualified names for register types
3   
4  Part of Mackerel: a strawman device definition DSL for Barrelfish
5   
6  Copyright (c) 2011, ETH Zurich.
7  All rights reserved.
8  
9  This file is distributed under the terms in the attached LICENSE file.
10  If you do not find this file, copies can be found by writing to:
11  ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
12-}  
13
14module TypeName where
15
16import MackerelParser
17
18{--------------------------------------------------------------------
19
20--------------------------------------------------------------------}
21
22-- Fully-qualified name of a type
23data Name = Name String String
24          deriving (Show, Eq)
25
26fromParts :: String -> String -> Name
27fromParts dev typename = Name dev typename
28                   
29fromRef :: AST -> String -> Name                   
30fromRef (TypeRef tname (Just dname)) _ = Name dname tname
31fromRef (TypeRef tname Nothing) dname  = Name dname tname
32
33toString :: Name -> String
34toString (Name d t) =  d ++ "." ++ t
35
36devName :: Name -> String
37devName (Name d _) = d
38
39typeName :: Name -> String
40typeName (Name _ t) = t
41
42
43is_builtin_type :: Name -> Bool
44is_builtin_type (Name _ "uint8") = True
45is_builtin_type (Name _ "uint16") = True
46is_builtin_type (Name _ "uint32") = True
47is_builtin_type (Name _ "uint64") = True
48is_builtin_type _ = False
49
50null :: Name
51null = Name "" ""