aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/parse.icl2
-rw-r--r--frontend/scanner.dcl3
-rw-r--r--frontend/scanner.icl15
3 files changed, 19 insertions, 1 deletions
diff --git a/frontend/parse.icl b/frontend/parse.icl
index 78c967c..a8ca287 100644
--- a/frontend/parse.icl
+++ b/frontend/parse.icl
@@ -2450,7 +2450,9 @@ HeadUnboxedAndTailStrict:==4;
wantListExp :: !Bool !ParseState -> (ParsedExpr, !ParseState)
wantListExp is_pattern pState
+ # pState=appScanState setNoNewOffsideForSeqLetBit pState
# (token, pState) = nextToken FunctionContext pState
+ # pState=appScanState clearNoNewOffsideForSeqLetBit pState
# (head_strictness,token,pState) = wantHeadStrictness token pState
with
wantHeadStrictness :: Token *ParseState -> *(!Int,!Token,!*ParseState)
diff --git a/frontend/scanner.dcl b/frontend/scanner.dcl
index 6bb418c..cfb2acd 100644
--- a/frontend/scanner.dcl
+++ b/frontend/scanner.dcl
@@ -167,3 +167,6 @@ determinePriority :: !Priority !Priority -> Optional Bool
/* ... Sjaak */
+setNoNewOffsideForSeqLetBit :: !ScanState -> ScanState
+
+clearNoNewOffsideForSeqLetBit :: !ScanState -> ScanState
diff --git a/frontend/scanner.icl b/frontend/scanner.icl
index f3e06b9..0df9ee7 100644
--- a/frontend/scanner.icl
+++ b/frontend/scanner.icl
@@ -67,6 +67,8 @@ where
ScanOptionUseLayoutBit :== 1
ScanOptionUnderscoreIdentsBit :== 2
+ScanOptionNoNewOffsideForSeqLetBit:==4;
+
:: * ScanInput
= Input Input
| PushedToken LongToken ScanInput
@@ -1557,6 +1559,12 @@ setUseUnderscoreIdents b (ScanState ss) = ScanState (setUseUnderscoreIdents_ b
setUseUnderscoreIdents_ :: !Bool !RScanState -> RScanState
setUseUnderscoreIdents_ b ss=:{ss_scanOptions} = { ss & ss_scanOptions = if b (ss_scanOptions bitor ScanOptionUnderscoreIdentsBit) (ss_scanOptions bitand (bitnot ScanOptionUnderscoreIdentsBit)) } // -->> ("uselayout set to ",b)
+setNoNewOffsideForSeqLetBit :: !ScanState -> ScanState
+setNoNewOffsideForSeqLetBit (ScanState ss=:{ss_scanOptions}) = ScanState { ss & ss_scanOptions = ss_scanOptions bitor ScanOptionNoNewOffsideForSeqLetBit};
+
+clearNoNewOffsideForSeqLetBit :: !ScanState -> ScanState
+clearNoNewOffsideForSeqLetBit (ScanState ss=:{ss_scanOptions}) = ScanState { ss & ss_scanOptions = ss_scanOptions bitand (bitnot ScanOptionNoNewOffsideForSeqLetBit)};
+
checkOffside :: !FilePosition !Int !Token !RScanState -> (Token,RScanState)
checkOffside pos index token scanState=:{ss_offsides,ss_scanOptions,ss_input}
| (ss_scanOptions bitand ScanOptionUseLayoutBit) == 0
@@ -1629,8 +1637,13 @@ checkOffside pos index token scanState=:{ss_offsides,ss_scanOptions,ss_input}
= (token, { scanState & ss_offsides = tl ss_offsides })
= newOffside token scanState
where
- newOffside token scanState=:{ss_offsides}
+ newOffside token scanState=:{ss_offsides,ss_scanOptions}
| definesOffside token
+ && ((ss_scanOptions bitand ScanOptionNoNewOffsideForSeqLetBit)==0
+ || (case token of
+ SeqLetToken _ -> False
+ _ -> True
+ ))
# ( _, scanState ) = nextToken FunctionContext scanState
( os_pos, scanState ) = getPosition scanState // next token defines offside position
scanState = tokenBack scanState