From 2fb8dc632b4c007033d9a40c6d6ab060d1ea1fe3 Mon Sep 17 00:00:00 2001
From: Camil Staps
Date: Sun, 31 Jan 2016 14:46:55 +0100
Subject: Working version

---
 CleanC.dcl | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 CleanC.dcl

(limited to 'CleanC.dcl')

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
+
-- 
cgit v1.2.3