From 88de5784428bec9a4b32bdf447c160da29b3745e Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 4 Jan 2021 20:27:45 +0100 Subject: Make up to date --- Sil/Check.icl | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'Sil/Check.icl') diff --git a/Sil/Check.icl b/Sil/Check.icl index e17c378..b3ad1af 100644 --- a/Sil/Check.icl +++ b/Sil/Check.icl @@ -4,6 +4,7 @@ import StdBool import StdFile from StdFunc import flip, o import StdList +import StdMaybe import StdOverloaded import StdString import StdTuple @@ -11,7 +12,6 @@ import StdTuple import Data.Error from Data.Func import $, mapSt, seqSt import Data.List -import Data.Maybe import Data.Tuple from Text import <+ @@ -20,7 +20,7 @@ import Sil.Syntax import Sil.Types import Sil.Util.Parser -checkProgram :: *(Maybe *File) Program -> *([Error], *Maybe *File) +checkProgram :: *(? *File) Program -> *([Error], * ? *File) checkProgram err prog = checkErrors [ checkFunctionNames @@ -47,7 +47,7 @@ where \\ g <- p.p_globals | (typeSize g.init_type).bsize <> 0] -checkFunction :: *(Maybe *File) Function -> *([Error], *Maybe *File) +checkFunction :: *(? *File) Function -> *([Error], * ? *File) checkFunction err f = checkErrors [ checkLocals , checkReturnAndVoid @@ -57,19 +57,19 @@ checkFunction err f = checkErrors where checkReturnAndVoid :: Function -> [Error] checkReturnAndVoid f = case f.f_type of - TVoid -> [Ck_ReturnExpressionFromVoid (errpos st) f.f_name \\ st=:(Return _ (Just _)) <- allStatements f] + TVoid -> [Ck_ReturnExpressionFromVoid (errpos st) f.f_name \\ st=:(Return _ (?Just _)) <- allStatements f] _ -> if (sureToReturn f.f_code) [] [Ck_NoReturnFromNonVoid (errpos f) f.f_name] where sureToReturn :: CodeBlock -> Bool sureToReturn cb = case cb.cb_content of [] -> False sts -> case last sts of - Return _ _ -> True - While _ _ cb` -> sureToReturn cb` - If _ bs (Just e) -> all sureToReturn [e:map snd bs] - If _ bs Nothing -> all (sureToReturn o snd) bs - MachineStm _ _ -> True // Let's assume the user is not stupid - _ -> False + Return _ _ -> True + While _ _ cb` -> sureToReturn cb` + If _ bs (?Just e) -> all sureToReturn [e:map snd bs] + If _ bs ?None -> all (sureToReturn o snd) bs + MachineStm _ _ -> True // Let's assume the user is not stupid + _ -> False checkMainFunctionType :: Function -> [Error] checkMainFunctionType {f_name="main",f_args=[]} @@ -96,8 +96,8 @@ where findCBs (Declaration _ _ _) = [] findCBs (Application _ _) = [] findCBs (Return _ _) = [] - findCBs (If _ bs (Just e)) = [e:map snd bs] - findCBs (If _ bs Nothing) = map snd bs + findCBs (If _ bs (?Just e)) = [e:map snd bs] + findCBs (If _ bs ?None) = map snd bs findCBs (While _ _ cb) = [cb] findCBs (MachineStm _ _) = [] @@ -105,15 +105,15 @@ where checkVoid (TVoid, n) = [Ck_LocalVoid (errpos f) n] checkVoid _ = [] -checkErrors :: [(a -> [Error])] a *([Error], Maybe *File) -> *([Error], *Maybe *File) +checkErrors :: [(a -> [Error])] a *([Error], ? *File) -> *([Error], * ? *File) checkErrors cks x st = seqSt error (concatMap (flip ($) x) cks) st -error :: Error *([Error], *Maybe *File) -> *([Error], *Maybe *File) +error :: Error *([Error], * ? *File) -> *([Error], * ? *File) error e (es, err) = ([e:es], err *([Error], *Maybe *File) +noErrors :: *(? *File) -> *([Error], * ? *File) noErrors f = ([], f) -( *Maybe *File | <<< a -( * ? *File | <<< a +(