aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohnvg2005-11-18 12:29:01 +0000
committerjohnvg2005-11-18 12:29:01 +0000
commit7d15e492a32b13984f0ec3d744a5a913d4cdf87e (patch)
tree8ee96431cb3551a932766c2b57d81010406a736a
parentcorrect the arities in the 'incorrect arity' error message (diff)
make the Buffer unique
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1562 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--frontend/scanner.icl24
1 files changed, 13 insertions, 11 deletions
diff --git a/frontend/scanner.icl b/frontend/scanner.icl
index dfff877..af74a80 100644
--- a/frontend/scanner.icl
+++ b/frontend/scanner.icl
@@ -100,7 +100,8 @@ ScanOptionNoNewOffsideForSeqLetBit:==4;
, lt_context :: ! ScanContext // The context of the token
}
-:: Buffer x
+:: *Buffer x:==SBuffer x
+:: SBuffer x
= Buffer0
| Buffer1 x
| Buffer2 x x
@@ -251,8 +252,8 @@ where
getPosition scanState=:{ss_tokenBuffer}
| isEmptyBuffer ss_tokenBuffer
= getCharPosition scanState
- # (ltok,_) = get ss_tokenBuffer
- = (ltok.lt_position, scanState)
+ # (ltok,ss_tokenBuffer) = head ss_tokenBuffer
+ = (ltok.lt_position, {scanState & ss_tokenBuffer=ss_tokenBuffer})
instance getPosition Input
where
@@ -396,7 +397,8 @@ instance currentToken RScanState
where currentToken scanState=:{ss_tokenBuffer}
| isEmptyBuffer ss_tokenBuffer
= (ErrorToken "dummy", scanState)
- = ((head ss_tokenBuffer).lt_token, scanState)
+ # (ltok,ss_tokenBuffer) = head ss_tokenBuffer
+ = (ltok.lt_token, {scanState & ss_tokenBuffer=ss_tokenBuffer})
/*
class insertToken state :: !Token !ScanContext !*state -> *state
@@ -1753,11 +1755,11 @@ store x (Buffer1 y) = Buffer2 x y
store x (Buffer2 y z) = Buffer3 x y z
store x (Buffer3 y z _) = Buffer3 x y z
-isEmptyBuffer :: !(Buffer x) -> Bool
+isEmptyBuffer :: !(SBuffer x) -> Bool
isEmptyBuffer Buffer0 = True
isEmptyBuffer _ = False
-get :: !(Buffer x) -> (x,Buffer x)
+get :: !(Buffer x) -> (x,!Buffer x)
get Buffer0 = abort "get from empty buffer"
get (Buffer1 x) = (x, Buffer0)
get (Buffer2 x y) = (x, Buffer1 y)
@@ -1769,13 +1771,13 @@ pop (Buffer1 x) = Buffer0
pop (Buffer2 x y) = Buffer1 y
pop (Buffer3 x y z) = Buffer2 y z
-head :: !(Buffer x) -> x
+head :: !(Buffer x) -> (x,!Buffer x);
head Buffer0 = abort "head of empty buffer"
-head (Buffer1 x) = x
-head (Buffer2 x _) = x
-head (Buffer3 x _ _) = x
+head b=:(Buffer1 x) = (x,b)
+head b=:(Buffer2 x _) = (x,b)
+head b=:(Buffer3 x _ _) = (x,b)
-instance <<< (Buffer a) | <<< a
+instance <<< (SBuffer a) | <<< a
where
(<<<) file Buffer0 = file <<< "Empty buffer"
(<<<) file (Buffer1 x) = file <<< "Buffer1 (" <<< x <<< ")"