aboutsummaryrefslogtreecommitdiff
path: root/CleanC.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'CleanC.dcl')
-rw-r--r--CleanC.dcl60
1 files changed, 60 insertions, 0 deletions
diff --git a/CleanC.dcl b/CleanC.dcl
new file mode 100644
index 0000000..1a83056
--- /dev/null
+++ b/CleanC.dcl
@@ -0,0 +1,60 @@
+definition module CleanC
+
+from StdClass import class toInt, class toString, class toReal,
+ class fromInt, class fromString, class fromReal
+
+:: State
+
+:: CType = Int | String | Real
+:: CParam = CI Int | CS String | CR Real
+
+cNewState :: *State
+
+instance toInt CParam
+instance toString CParam
+instance toReal CParam
+
+class fromCParam a :: CParam -> a
+instance fromCParam Int
+instance fromCParam String
+instance fromCParam Real
+
+instance fromInt CParam
+instance fromString CParam
+instance fromReal CParam
+
+class toCParam a :: a -> CParam
+instance toCParam Int
+instance toCParam String
+instance toCParam Real
+
+class toCParamList a :: a -> [CParam]
+instance toCParamList [CParam]
+instance toCParamList Int
+instance toCParamList String
+instance toCParamList Real
+instance toCParamList (a,b) | toCParam a & toCParam b
+instance toCParamList (a,b,c) | toCParam a & toCParam b & toCParam c
+instance toCParamList (a,b,c,d) | toCParam a & toCParam b & toCParam c & toCParam d
+instance toCParamList (a,b,c,d,e) | toCParam a & toCParam b & toCParam c & toCParam d & toCParam e
+instance toCParamList (a,b,c,d,e,f) | toCParam a & toCParam b & toCParam c & toCParam d & toCParam e & toCParam f
+instance toCParamList (a,b,c,d,e,f,g) | toCParam a & toCParam b & toCParam c & toCParam d & toCParam e & toCParam f & toCParam g
+
+cInit :: !*State -> *State
+
+cPuti :: !Int !*State -> *State
+cPuts :: !String !*State -> *State
+cPutr :: !Real !*State -> *State
+
+cPutParam :: !CParam -> *State -> *State
+
+cSetReturnType :: !CType -> *State -> *State
+
+cCall_ :: !String !*State -> *State
+
+cGeti :: !*State -> (!Int, !*State)
+cGets :: !*State -> (!String, !*State)
+cGetr :: !*State -> (!Real, !*State)
+
+cCall :: !CType !String !a !*State -> (!CParam, !*State) | toCParamList a
+