diff options
author | ronny | 2001-07-25 13:34:00 +0000 |
---|---|---|
committer | ronny | 2001-07-25 13:34:00 +0000 |
commit | 7a8301859b66a82f980c653c153250fbc7258f7d (patch) | |
tree | 537a85f87c2c452a711f5e3b9f28e485f834a92e /frontend/scanner.icl | |
parent | renamed ss_useLayout to ss_scanOptions (diff) |
bug fix parse_bug_forbidden_symbols
idents that start with an underscore are only allowed in modules for which
the module name starts with an underscore
Because of this bug fix StdEnv has to be updated (_createArray in the Array class)
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@570 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/scanner.icl')
-rw-r--r-- | frontend/scanner.icl | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/frontend/scanner.icl b/frontend/scanner.icl index 505e281..29ea072 100644 --- a/frontend/scanner.icl +++ b/frontend/scanner.icl @@ -1,7 +1,6 @@ implementation module scanner import StdEnv, compare_constructor, StdCompare, general, compilerSwitches -import RWSDebug from utilities import revCharListToString, isSpecialChar @@ -36,9 +35,17 @@ where instance nextToken ScanState where - nextToken context (ScanState scan_state) + nextToken context (ScanState scan_state=:{ss_scanOptions}) # (token,scan_state) = nextToken context scan_state - = (token,ScanState scan_state) + = (replaceUnderscoreToken token ((ss_scanOptions bitand ScanOptionUnderscoreIdentsBit) <> 0), + ScanState scan_state) + where + replaceUnderscoreToken :: Token !Bool -> Token + replaceUnderscoreToken (UnderscoreIdentToken name) underscoreModule + | underscoreModule + = IdentToken name + replaceUnderscoreToken token _ + = token instance currentToken ScanState where @@ -68,6 +75,7 @@ where } ScanOptionUseLayoutBit :== 1 +ScanOptionUnderscoreIdentsBit :== 2 :: * ScanInput = Input Input @@ -104,6 +112,7 @@ ScanOptionUseLayoutBit :== 1 :: Token = IdentToken ! .String // an identifier + | UnderscoreIdentToken !.String// an identifier that starts with a '_' | IntToken !.String // an integer | RealToken !.String // a real | StringToken !.String // a string @@ -609,7 +618,13 @@ Scan c0=:'_' input=:{inp_stream=OldLine i line stream,inp_pos} co //PK .. = scan_underscores (i+1) size line = i | end_i<size && IsIdentChar line.[end_i] co - = ScanIdentFast (end_i-i+1) {input & inp_stream=OldLine end_i line stream} co + = replaceIdentToken (ScanIdentFast (end_i-i+1) {input & inp_stream=OldLine end_i line stream} co) + with + replaceIdentToken :: (Token, *state) -> (Token, *state) + replaceIdentToken (IdentToken name, s) + = (UnderscoreIdentToken name, s) + replaceIdentToken tokenAndState + = tokenAndState | end_i==i = (WildCardToken, input) # pos = {inp_pos & fp_col = inp_pos.fp_col + (end_i-i)} @@ -1280,6 +1295,7 @@ where instance toString Token where toString (IdentToken id) = id // qw id + toString (UnderscoreIdentToken id) = id // qw id toString (IntToken id) = id toString (RealToken id) = id toString (StringToken id) = id @@ -1528,6 +1544,12 @@ setUseLayout b (ScanState ss) = ScanState (setUseLayout_ b ss) setUseLayout_ :: !Bool !RScanState -> RScanState setUseLayout_ b ss=:{ss_scanOptions} = { ss & ss_scanOptions = if b (ss_scanOptions bitor ScanOptionUseLayoutBit) (ss_scanOptions bitand (bitnot ScanOptionUseLayoutBit)) } // -->> ("uselayout set to ",b) +setUseUnderscoreIdents :: !Bool !ScanState -> ScanState +setUseUnderscoreIdents b (ScanState ss) = ScanState (setUseUnderscoreIdents_ b ss) + +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) + checkOffside :: !FilePosition !Int !Token !RScanState -> (Token,RScanState) checkOffside pos index token scanState=:{ss_offsides,ss_scanOptions,ss_input} | (ss_scanOptions bitand ScanOptionUseLayoutBit) == 0 |