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 "" ""