aboutsummaryrefslogtreecommitdiff
path: root/frontend/Heap.dcl
diff options
context:
space:
mode:
authorronny1999-10-05 13:09:14 +0000
committerronny1999-10-05 13:09:14 +0000
commitdb9e59813541e06caece64592854862bab9c0138 (patch)
treeae7cef5982a377261188aed09dc0f0cc95c50f8c /frontend/Heap.dcl
parentStandard project directories initialized by cvs2svn. (diff)
Initial import
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/Heap.dcl')
-rw-r--r--frontend/Heap.dcl31
1 files changed, 31 insertions, 0 deletions
diff --git a/frontend/Heap.dcl b/frontend/Heap.dcl
new file mode 100644
index 0000000..bf855d9
--- /dev/null
+++ b/frontend/Heap.dcl
@@ -0,0 +1,31 @@
+definition module Heap
+
+import StdEnv
+
+:: Heap v = {heap::!.HeapN v}
+:: HeapN v
+:: Ptr v = {pointer::!.(PtrN v)};
+:: PtrN v = Ptr !v !(HeapN v);
+
+newHeap :: .Heap v
+
+nilPtr :: Ptr v
+
+isNilPtr :: !(Ptr v) -> Bool
+
+newPtr :: !v !*(Heap v) -> (!.Ptr v,!.Heap v)
+
+readPtr :: !(Ptr v) !*(Heap v) -> (!v,!.Heap v)
+
+writePtr :: !(Ptr v) !v !*(Heap v) -> .Heap v
+
+sreadPtr :: !(Ptr v) !(Heap v) -> v
+
+ptrToInt :: !(Ptr w) -> Int
+
+(<:=) infixl
+(<:=) heap ptr_and_val :== writePtr ptr val heap
+where
+ (ptr, val) = ptr_and_val
+
+instance == Ptr a