aboutsummaryrefslogtreecommitdiff
path: root/Sil/Check.icl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Check.icl')
-rw-r--r--Sil/Check.icl36
1 files changed, 18 insertions, 18 deletions
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 <?< e)
-noErrors :: *(Maybe *File) -> *([Error], *Maybe *File)
+noErrors :: *(? *File) -> *([Error], * ? *File)
noErrors f = ([], f)
-(<?<) infixl :: !*(Maybe *File) !a -> *Maybe *File | <<< a
-(<?<) (Just f) x = Just (f <<< x)
-(<?<) Nothing _ = Nothing
+(<?<) infixl :: !*(? *File) !a -> * ? *File | <<< a
+(<?<) (?Just f) x = ?Just (f <<< x)
+(<?<) ?None _ = ?None