X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=CoreTools.hs;h=9c75bcc7b61caa6289fbec13e6e03257435e08ad;hb=78b45072fc36c7311bee97f2d9195bbc33b994cf;hp=3569d53b06e98b1c155cee605cd96e626067d69f;hpb=65d99830e416463d66f97581ece93da49f746778;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/CoreTools.hs b/CoreTools.hs index 3569d53..9c75bcc 100644 --- a/CoreTools.hs +++ b/CoreTools.hs @@ -61,18 +61,38 @@ eval_tfp_int ty = -- | Get the width of a SizedWord type sized_word_len :: Type.Type -> Int -sized_word_len ty = - eval_tfp_int len - where - (tycon, args) = Type.splitTyConApp ty - [len] = args +sized_word_len ty = eval_tfp_int (sized_word_len_ty ty) + +sized_word_len_ty :: Type.Type -> Type.Type +sized_word_len_ty ty = len + where + args = case Type.splitTyConApp_maybe ty of + Just (tycon, args) -> args + Nothing -> error $ "\nCoreTools.sized_word_len_ty: Not a sized word type: " ++ (pprString ty) + [len] = args + +-- | Get the width of a SizedInt type +sized_int_len :: Type.Type -> Int +sized_int_len ty = eval_tfp_int (sized_int_len_ty ty) + +sized_int_len_ty :: Type.Type -> Type.Type +sized_int_len_ty ty = len + where + args = case Type.splitTyConApp_maybe ty of + Just (tycon, args) -> args + Nothing -> error $ "\nCoreTools.sized_int_len_ty: Not a sized int type: " ++ (pprString ty) + [len] = args -- | Get the upperbound of a RangedWord type ranged_word_bound :: Type.Type -> Int -ranged_word_bound ty = - eval_tfp_int len +ranged_word_bound ty = eval_tfp_int (ranged_word_bound_ty ty) + +ranged_word_bound_ty :: Type.Type -> Type.Type +ranged_word_bound_ty ty = len where - (tycon, args) = Type.splitTyConApp ty + args = case Type.splitTyConApp_maybe ty of + Just (tycon, args) -> args + Nothing -> error $ "\nCoreTools.ranged_word_bound_ty: Not a sized word type: " ++ (pprString ty) [len] = args -- | Evaluate a core Type representing type level int from the TypeLevel