-- | 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
-- | Get the length of a FSVec type
tfvec_len :: Type.Type -> Int
-tfvec_len ty =
- eval_tfp_int len
+tfvec_len ty = eval_tfp_int (tfvec_len_ty ty)
+
+tfvec_len_ty :: Type.Type -> Type.Type
+tfvec_len_ty ty = len
where
args = case Type.splitTyConApp_maybe ty of
Just (tycon, args) -> args
- Nothing -> error $ "CoreTools.tfvec_len Not a vector type: " ++ (pprString ty)
+ Nothing -> error $ "\nCoreTools.tfvec_len_ty: Not a vector type: " ++ (pprString ty)
[len, el_ty] = args
-- | Get the element type of a TFVec type
where
args = case Type.splitTyConApp_maybe ty of
Just (tycon, args) -> args
- Nothing -> error $ "CoreTools.tfvec_len Not a vector type: " ++ (pprString ty)
+ Nothing -> error $ "\nCoreTools.tfvec_len: Not a vector type: " ++ (pprString ty)
[len, el_ty] = args
-- Is this a wild binder?
-- simple Var CoreExprs, not complexer ones.
exprToVar :: CoreSyn.CoreExpr -> Var.Id
exprToVar (CoreSyn.Var id) = id
-exprToVar expr = error $ "CoreTools.exprToVar Not a var: " ++ show expr
+exprToVar expr = error $ "\nCoreTools.exprToVar: Not a var: " ++ show expr
-- Removes all the type and dictionary arguments from the given argument list,
-- leaving only the normal value arguments. The type given is the type of the