aboutsummaryrefslogtreecommitdiff
path: root/frontend/parse.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/parse.icl')
-rw-r--r--frontend/parse.icl204
1 files changed, 96 insertions, 108 deletions
diff --git a/frontend/parse.icl b/frontend/parse.icl
index 17cee43..3ac2036 100644
--- a/frontend/parse.icl
+++ b/frontend/parse.icl
@@ -151,20 +151,20 @@ erroneousIdent = { id_name = "", id_info = nilPtr }
Some general overloaded parsing routines
*/
-wantSequence :: !Token !Context !*ParseState -> (!.[a],!*ParseState) | want a
-wantSequence separator context pState
+wantSequence :: !Token !ScanContext !*ParseState -> (!.[a],!*ParseState) | want a
+wantSequence separator scanContext pState
# (first, pState) = want pState
- (token, pState) = nextToken context pState
+ (token, pState) = nextToken scanContext pState
| separator == token
- # (rest, pState) = wantSequence separator context pState
+ # (rest, pState) = wantSequence separator scanContext pState
= ([first : rest], pState)
// otherwise // separator <> token
= ([first], tokenBack pState)
/*
-optionalSequence start_token separator context pState
- # (token, pState) = nextToken context pState
+optionalSequence start_token separator scanContext pState
+ # (token, pState) = nextToken scanContext pState
| token == start_token
- = wantSequence separator context pState
+ = wantSequence separator scanContext pState
= ([], tokenBack pState)
*/
parseList try_fun pState :== parse_list pState // try_fun *
@@ -178,28 +178,28 @@ parseList try_fun pState :== parse_list pState // try_fun *
= ([tree : trees], pState)
= ([], pState)
-//wantSepList msg sep_token context try_fun pState = want_list msg pState
-wantSepList msg sep_token context try_fun pState :== want_list msg pState // try_fun (sep_token tryfun)*
+//wantSepList msg sep_token scanContext try_fun pState = want_list msg pState
+wantSepList msg sep_token scanContext try_fun pState :== want_list msg pState // try_fun (sep_token tryfun)*
where
want_list msg pState
# (succ, tree, pState) = try_fun pState
| succ
- # (token, pState) = nextToken context pState
+ # (token, pState) = nextToken scanContext pState
| token == sep_token
- # (trees, pState) = optSepList sep_token context try_fun pState
+ # (trees, pState) = optSepList sep_token scanContext try_fun pState
= ([tree : trees], pState)
// otherwise // token <> sep_token
= ([tree], tokenBack pState)
# (token, pState) = nextToken GeneralContext pState
= ([tree], parseError ("wantList of "+msg) (Yes token) msg pState)
-//optSepList sep_token context try_fun pState = want_list msg pState
-optSepList sep_token context try_fun pState :== want_list pState // [ try_fun (sep_token tryfun)* ]
+//optSepList sep_token scanContext try_fun pState = want_list msg pState
+optSepList sep_token scanContext try_fun pState :== want_list pState // [ try_fun (sep_token tryfun)* ]
where
want_list pState
# (succ, tree, pState) = try_fun pState
| succ
- # (token, pState) = nextToken context pState
+ # (token, pState) = nextToken scanContext pState
| token == sep_token
# (trees, pState) = want_list pState
= ([tree : trees], pState)
@@ -225,13 +225,13 @@ where
(y, pState) = want pState
= ((x,y), pState)
*/
-wantModuleIdents :: !Context !IdentClass !ParseState -> (![Ident], !ParseState)
-wantModuleIdents context ident_class pState
+wantModuleIdents :: !ScanContext !IdentClass !ParseState -> (![Ident], !ParseState)
+wantModuleIdents scanContext ident_class pState
# (first_name, pState) = wantModuleName pState
(first_ident, pState) = stringToIdent first_name ident_class pState
- (token, pState) = nextToken context pState
+ (token, pState) = nextToken scanContext pState
| token == CommaToken
- # (rest, pState) = wantModuleIdents context ident_class pState
+ # (rest, pState) = wantModuleIdents scanContext ident_class pState
= ([first_ident : rest], pState)
= ([first_ident], tokenBack pState)
@@ -270,20 +270,20 @@ SetGlobalContext iclmodule
= cICLContext bitor cGlobalContext
= cDCLContext bitor cGlobalContext
-SetLocalContext context :== context bitand (bitnot cGlobalContext)
+SetLocalContext parseContext :== parseContext bitand (bitnot cGlobalContext)
// RWS ...
-SetClassOrInstanceDefsContext context :== SetLocalContext (context bitor cClassOrInstanceDefsContext)
+SetClassOrInstanceDefsContext parseContext :== SetLocalContext (parseContext bitor cClassOrInstanceDefsContext)
// ... RWS
-isLocalContext context :== context bitand cGlobalContext == 0
-isGlobalContext context :== not (isLocalContext context)
+isLocalContext parseContext :== parseContext bitand cGlobalContext == 0
+isGlobalContext parseContext :== not (isLocalContext parseContext)
-isDclContext context :== context bitand cICLContext == 0
-isIclContext context :== not (isDclContext context)
+isDclContext parseContext :== parseContext bitand cICLContext == 0
+isIclContext parseContext :== not (isDclContext parseContext)
// RWS ...
-isClassOrInstanceDefsContext context :== context bitand cClassOrInstanceDefsContext <> 0
+isClassOrInstanceDefsContext parseContext :== parseContext bitand cClassOrInstanceDefsContext <> 0
// ... RWS
cWantIclFile :== True
@@ -397,9 +397,9 @@ where
= (False, mod_type, "", tokenBack scanState)
try_module_name (IdentToken name) mod_type scanState
- = (True, mod_type, name, scanState) //-->> ("module",name)
+ = (True, mod_type, name, scanState)
try_module_name (UnderscoreIdentToken name) mod_type scanState
- = (True, mod_type, name, setUseUnderscoreIdents True scanState) //-->> ("module",name)
+ = (True, mod_type, name, setUseUnderscoreIdents True scanState)
try_module_name token mod_type scanState
= (False, mod_type, "", tokenBack scanState)
@@ -418,12 +418,12 @@ where
= appScanState (setUseLayout use_layout) pState
want_definitions :: !ParseContext !ParseState -> (![ParsedDefinition], !ParseState)
- want_definitions context pState
+ want_definitions parseContext pState
= want_acc_definitions [] pState
where
want_acc_definitions :: ![ParsedDefinition] !ParseState -> (![ParsedDefinition], !ParseState)
want_acc_definitions acc pState
- # (defs, pState) = wantDefinitions context pState
+ # (defs, pState) = wantDefinitions parseContext pState
acc = acc ++ defs
pState = wantEndModule pState
(token, pState) = nextToken FunctionContext pState
@@ -437,8 +437,8 @@ where
*/
wantDefinitions :: !ParseContext !ParseState -> (![ParsedDefinition], !ParseState)
-wantDefinitions context pState
- = parseList (tryDefinition context) pState
+wantDefinitions parseContext pState
+ = parseList (tryDefinition parseContext) pState
DummyPriority :== Prio LeftAssoc 9
@@ -446,29 +446,29 @@ cHasPriority :== True
cHasNoPriority :== False
tryDefinition :: !ParseContext !ParseState -> (!Bool, ParsedDefinition, !ParseState)
-tryDefinition context pState
+tryDefinition parseContext pState
# (token, pState) = nextToken GeneralContext pState
(fname, linenr, pState) = getFileAndLineNr pState
- = try_definition context token (LinePos fname linenr) pState
+ = try_definition parseContext token (LinePos fname linenr) pState
where
try_definition :: !ParseContext !Token !Position !ParseState -> (!Bool, ParsedDefinition, !ParseState)
- try_definition context DoubleColonToken pos pState
- | ~(isGlobalContext context)
+ try_definition parseContext DoubleColonToken pos pState
+ | ~(isGlobalContext parseContext)
= (False,abort "no def(3)",parseError "definition" No "type definitions only at the global level" (tokenBack pState))
- # (def, pState) = wantTypeDef context pos pState
+ # (def, pState) = wantTypeDef parseContext pos pState
= (True, def, pState)
try_definition _ ImportToken pos pState
- | ~(isGlobalContext context)
+ | ~(isGlobalContext parseContext)
= (False,abort "no def(3)",parseError "definition" No "imports only at the global level" pState)
# (token, pState) = nextToken FunctionContext pState
- | token == CodeToken && isIclContext context
+ | token == CodeToken && isIclContext parseContext
# (importedObjects, pState) = wantCodeImports pState
= (True, PD_ImportedObjects importedObjects, pState)
# pState = tokenBack pState
# (imports, pState) = wantImports pState
= (True, PD_Import imports, pState)
try_definition _ FromToken pos pState
- | ~(isGlobalContext context)
+ | ~(isGlobalContext parseContext)
= (False,abort "no def(3)",parseError "definition" No "imports only at the global level" pState)
# (imp, pState) = wantFromImports pState
= (True, PD_Import [imp], pState) -->> imp
@@ -477,28 +477,28 @@ where
= (True, PD_Export exports, pState)
try_definition _ ExportAllToken pos pState
= (True, PD_Export ExportAll, pState)
-*/ try_definition context ClassToken pos pState
- | ~(isGlobalContext context)
+*/ try_definition parseContext ClassToken pos pState
+ | ~(isGlobalContext parseContext)
= (False,abort "no def(2)",parseError "definition" No "class definitions are only at the global level" pState)
- # (classdef, pState) = wantClassDefinition context pos pState
+ # (classdef, pState) = wantClassDefinition parseContext pos pState
= (True, classdef, pState)
// AA..
- try_definition context GenericToken pos pState
- | ~(isGlobalContext context)
+ try_definition parseContext GenericToken pos pState
+ | ~(isGlobalContext parseContext)
= (False,abort "no def(2)",parseError "definition" No "generic definitions are only at the global level" pState)
- # (gendef, pState) = wantGenericDefinition context pos pState
+ # (gendef, pState) = wantGenericDefinition parseContext pos pState
= (True, gendef, pState)
// ..AA
- try_definition context InstanceToken pos pState
- | ~(isGlobalContext context)
+ try_definition parseContext InstanceToken pos pState
+ | ~(isGlobalContext parseContext)
= (False,abort "no def(2)",parseError "definition" No "instance declarations are only at the global level" pState)
- # (instdef, pState) = wantInstanceDeclaration context pos pState
+ # (instdef, pState) = wantInstanceDeclaration parseContext pos pState
= (True, instdef, pState)
- try_definition context token pos pState
+ try_definition parseContext token pos pState
| isLhsStartToken token
# (lhs, pState) = want_lhs_of_def token pState
(token, pState) = nextToken FunctionContext pState
- (def, pState) = want_rhs_of_def context lhs token (determine_position lhs pos) pState //-->> token
+ (def, pState) = want_rhs_of_def parseContext lhs token (determine_position lhs pos) pState
= (True, def, pState) -->> def
with
determine_position (Yes (name, _), _) (LinePos f l) = FunPos f l name.id_name
@@ -533,30 +533,29 @@ where
= (False, abort "name", False, tokenBack pState)
want_rhs_of_def :: !ParseContext !(Optional (Ident, Bool), [ParsedExpr]) !Token !Position !ParseState -> (ParsedDefinition, !ParseState)
- want_rhs_of_def context (opt_name, args) DoubleColonToken pos pState
+ want_rhs_of_def parseContext (opt_name, args) DoubleColonToken pos pState
# (name, is_infix, pState) = check_name_and_fixity opt_name cHasNoPriority pState
(tspec, pState) = want pState // SymbolType
- | isDclContext context
+ | isDclContext parseContext
# (specials, pState) = optionalSpecials pState
= (PD_TypeSpec pos name (if is_infix DummyPriority NoPrio) (Yes tspec) specials, wantEndOfDefinition "type definition (1)" pState)
= (PD_TypeSpec pos name (if is_infix DummyPriority NoPrio) (Yes tspec) SP_None, wantEndOfDefinition "type definition (2)" pState)
- want_rhs_of_def context (opt_name, args) (PriorityToken prio) pos pState
+ want_rhs_of_def parseContext (opt_name, args) (PriorityToken prio) pos pState
# (name, _, pState) = check_name_and_fixity opt_name cHasPriority pState
(token, pState) = nextToken TypeContext pState
| token == DoubleColonToken
# (tspec, pState) = want pState
- | isDclContext context
+ | isDclContext parseContext
# (specials, pState) = optionalSpecials pState
= (PD_TypeSpec pos name prio (Yes tspec) specials, wantEndOfDefinition "type definition (3)" pState)
= (PD_TypeSpec pos name prio (Yes tspec) SP_None, wantEndOfDefinition "type definition (4)" pState)
= (PD_TypeSpec pos name prio No SP_None, wantEndOfDefinition "type defenition (5)" (tokenBack pState))
- want_rhs_of_def context (No, args) token pos pState
+ want_rhs_of_def parseContext (No, args) token pos pState
# pState = want_node_def_token pState token
# (ss_useLayout, pState) = accScanState UseLayout pState
-// localsExpected = isNotEmpty args || isGlobalContext context
-// (rhs, pState) = wantRhs isEqualToken False (tokenBack pState) // PK localsExpected -> False
- (rhs, pState) = wantRhs isEqualToken (~ ss_useLayout) (tokenBack pState) // PK localsExpected -> ~ ss_useLayout
- | isGlobalContext context
+ localsExpected = ~ ss_useLayout
+ (rhs, pState) = wantRhs isEqualToken localsExpected (tokenBack pState)
+ | isGlobalContext parseContext
= (PD_NodeDef pos (combine_args args) rhs, parseError "RHS" No "<global definition>" pState)
= (PD_NodeDef pos (combine_args args) rhs, pState)
where
@@ -566,36 +565,27 @@ where
combine_args [arg] = arg
combine_args args = PE_List args
-/* want_rhs_of_def context (Yes (name, False), []) token pos pState
- | isIclContext context && isLocalContext context && (token == DefinesColonToken || token == EqualToken) && isLowerCaseName name.id_name
+ want_rhs_of_def parseContext (Yes (name, False), []) token pos pState
+ | isIclContext parseContext && isLocalContext parseContext && token == EqualToken &&
+ isLowerCaseName name.id_name && not (isClassOrInstanceDefsContext parseContext)
# (rhs, pState) = wantRhs (\_ -> True) False (tokenBack pState)
= (PD_NodeDef pos (PE_Ident name) rhs, pState)
-*/ // PK ..
- want_rhs_of_def context (Yes (name, False), []) token pos pState
- | isIclContext context && isLocalContext context && (token == DefinesColonToken || token == EqualToken) &&
- isLowerCaseName name.id_name
-// RWS ...
- && not (isClassOrInstanceDefsContext context)
-// ... RWS
- # (rhs, pState) = wantRhs (\_ -> True) False (tokenBack pState)
- = (PD_NodeDef pos (PE_Ident name) rhs, pState) // ..PK
- want_rhs_of_def context (Yes (name, is_infix), args) token pos pState
+ want_rhs_of_def parseContext (Yes (name, is_infix), args) token pos pState
# (fun_kind, code_allowed, pState) = token_to_fun_kind pState token
(token, pState) = nextToken FunctionContext pState
- | isIclContext context && token == CodeToken
+ | isIclContext parseContext && token == CodeToken
# (rhs, pState) = wantCodeRhs pState
| code_allowed
= (PD_Function pos name is_infix args rhs fun_kind, pState)
// otherwise // ~ code_allowed
= (PD_Function pos name is_infix args rhs fun_kind, parseError "rhs of def" No "no code" pState)
# pState = tokenBack (tokenBack pState)
-// localsExpected = isNotEmpty args || isGlobalContext context
(ss_useLayout, pState) = accScanState UseLayout pState
- localsExpected = isNotEmpty args || isGlobalContext context || ~ ss_useLayout
- (rhs, pState) = wantRhs isRhsStartToken localsExpected pState
+ localsExpected = isNotEmpty args || isGlobalContext parseContext || ~ ss_useLayout
+ (rhs, pState) = wantRhs (isRhsStartToken parseContext) localsExpected pState
= case fun_kind of
- FK_Function _ | isDclContext context
+ FK_Function _ | isDclContext parseContext
-> (PD_Function pos name is_infix args rhs fun_kind, parseError "RHS" No "<type specification>" pState)
FK_Caf | isNotEmpty args
-> (PD_Function pos name is_infix [] rhs fun_kind, parseError "CAF" No "No arguments for a CAF" pState)
@@ -620,11 +610,11 @@ isEqualToken :: !Token -> Bool
isEqualToken EqualToken = True
isEqualToken _ = False
-isRhsStartToken :: !Token -> Bool
-isRhsStartToken EqualToken = True
-isRhsStartToken ColonDefinesToken = True
-isRhsStartToken DefinesColonToken = True
-isRhsStartToken _ = False
+isRhsStartToken :: !ParseContext !Token -> Bool
+isRhsStartToken parseContext EqualToken = True
+isRhsStartToken parseContext ColonDefinesToken = isGlobalContext parseContext
+isRhsStartToken parseContext DefinesColonToken = isGlobalContext parseContext
+isRhsStartToken parseContext _ = False
optionalSpecials :: !ParseState -> (!Specials, !ParseState)
optionalSpecials pState
@@ -1092,7 +1082,7 @@ cIsNotAClass :== False
wantClassDefinition :: !ParseContext !Position !ParseState -> (!ParsedDefinition, !ParseState)
-wantClassDefinition context pos pState
+wantClassDefinition parseContext pos pState
# (might_be_a_class, class_or_member_name, prio, pState) = want_class_or_member_name pState
(class_variables, pState) = wantList "class variable(s)" try_class_variable pState
(class_arity, class_args, class_cons_vars) = convert_class_variables class_variables 0 0
@@ -1104,8 +1094,8 @@ wantClassDefinition context pos pState
# (begin_members, pState) = begin_member_group token pState
| begin_members
# (class_id, pState) = stringToIdent class_or_member_name IC_Class pState
-// RWS ... (members, pState) = wantDefinitions (SetLocalContext context) pState
- (members, pState) = wantDefinitions (SetClassOrInstanceDefsContext context) pState
+// RWS ... (members, pState) = wantDefinitions (SetLocalContext parseContext) pState
+ (members, pState) = wantDefinitions (SetClassOrInstanceDefsContext parseContext) pState
// ... RWS
class_def = { class_name = class_id, class_arity = class_arity, class_args = class_args,
class_context = contexts, class_pos = pos, class_members = {}, class_cons_vars = class_cons_vars,
@@ -1191,7 +1181,7 @@ wantClassDefinition context pos pState
= (arity, [var : class_vars], cons_vars)
wantInstanceDeclaration :: !ParseContext !Position !ParseState -> (!ParsedDefinition, !ParseState)
-wantInstanceDeclaration context pi_pos pState
+wantInstanceDeclaration parseContext pi_pos pState
# (class_name, pState) = want pState
(pi_class, pState) = stringToIdent class_name IC_Class pState
((pi_types, pi_context), pState) = want_instance_type pState
@@ -1203,17 +1193,17 @@ wantInstanceDeclaration context pi_pos pState
= (PD_Instance {pi_class = pi_class, pi_ident = pi_ident, pi_types = pi_types, pi_context = pi_context,
pi_members = [], pi_specials = SP_None, pi_pos = pi_pos, pi_generate = True}, pState)
// ..AA
- | isIclContext context
+ | isIclContext parseContext
# // PK pState = tokenBack pState // AA
pState = want_begin_group token pState
-// RWS ... (pi_members, pState) = wantDefinitions (SetLocalContext context) pState
- (pi_members, pState) = wantDefinitions (SetClassOrInstanceDefsContext context) pState
+// RWS ... (pi_members, pState) = wantDefinitions (SetLocalContext parseContext) pState
+ (pi_members, pState) = wantDefinitions (SetClassOrInstanceDefsContext parseContext) pState
// ... RWS
pState = wantEndGroup "instance" pState
= (PD_Instance {pi_class = pi_class, pi_ident = pi_ident, pi_types = pi_types, pi_context = pi_context,
pi_members = pi_members, pi_specials = SP_None, pi_pos = pi_pos, pi_generate = False }, pState)
- // otherwise // ~ (isIclContext context)
+ // otherwise // ~ (isIclContext parseContext)
| token == CommaToken
// AA: # (token, pState) = nextToken TypeContext pState
# (pi_types_and_contexts, pState) = want_instance_types pState
@@ -1337,7 +1327,7 @@ optionalCoercions pState
*/
wantGenericDefinition :: !ParseContext !Position !ParseState -> (!ParsedDefinition, !ParseState)
-wantGenericDefinition context pos pState
+wantGenericDefinition parseContext pos pState
| not pState.ps_support_generics
= (PD_Erroneous, parseError "generic definition" No "support for generics is disabled in the compiler. " pState)
# (name, pState) = want_name pState
@@ -1416,10 +1406,10 @@ where
no_type_var = abort "tryAttributedTypeVar: No type var"
wantTypeDef :: !ParseContext !Position !ParseState -> (ParsedDefinition, !ParseState)
-wantTypeDef context pos pState
+wantTypeDef parseContext pos pState
# (type_lhs, annot, pState) = want_type_lhs pos pState
(token, pState) = nextToken TypeContext pState
- (def, pState) = want_type_rhs context type_lhs token annot pState
+ (def, pState) = want_type_rhs parseContext type_lhs token annot pState
pState = wantEndOfDefinition "type definition (6)" pState
= (def, pState)
where
@@ -1433,7 +1423,7 @@ where
= (MakeTypeDef ident args (ConsList []) attr contexts pos, annot, pState)
want_type_rhs :: !ParseContext !ParsedTypeDef !Token !Annotation !ParseState -> (ParsedDefinition, !ParseState)
- want_type_rhs context td=:{td_name,td_attribute} EqualToken annot pState
+ want_type_rhs parseContext td=:{td_name,td_attribute} EqualToken annot pState
# name = td_name.id_name
pState = verify_annot_attr annot td_attribute name pState
(exi_vars, pState) = optionalExistentialQuantifiedVariables pState
@@ -1453,7 +1443,7 @@ where
| annot == AN_None
-> (PD_Type td, pState)
-> (PD_Type td, parseError "Algebraic type" No ("No lhs strictness annotation for the algebraic type "+name) pState)
- want_type_rhs context td=:{td_attribute} ColonDefinesToken annot pState // type Macro
+ want_type_rhs parseContext td=:{td_attribute} ColonDefinesToken annot pState // type Macro
# name = td.td_name.id_name
pState = verify_annot_attr annot td_attribute name pState
(atype, pState) = want pState // Atype
@@ -1461,8 +1451,8 @@ where
| annot == AN_None
= (PD_Type td, pState)
= (PD_Type td, parseError "Type synonym" No ("No lhs strictness annotation for the type synonym "+name) pState)
- want_type_rhs context td=:{td_attribute} token annot pState
- | isIclContext context
+ want_type_rhs parseContext td=:{td_attribute} token annot pState
+ | isIclContext parseContext
= (PD_Erroneous, parseError "type RHS" (Yes token) "type definition" pState)
| td_attribute == TA_Anonymous || td_attribute == TA_Unique || td_attribute == TA_None
# (td_attribute, properties) = determine_properties annot td_attribute
@@ -1477,7 +1467,7 @@ where
= parseError "type definition" No ("No annotation, "+toString annot+", in the lhs of type "+name) pState
| attr == TA_None || attr == TA_Unique
= pState
- = parseError "ty[e definition" No ("No attribute, "+toString attr+", in the lhs of type "+name) pState
+ = parseError "type definition" No ("No attribute, "+toString attr+", in the lhs of type "+name) pState
determine_properties :: !Annotation !TypeAttribute -> (!TypeAttribute, !BITVECT)
determine_properties annot attr
@@ -2156,17 +2146,15 @@ cIsNotAPattern :== False
wantExpression :: !Bool !ParseState -> (!ParsedExpr, !ParseState)
wantExpression is_pattern pState
# (token, pState) = nextToken FunctionContext pState
-// PK ... To produce a better error message
= case token of
- CharListToken charList
+ CharListToken charList // To produce a better error message
-> (PE_Empty, parseError "Expression" No ("List brackets, [ and ], around charlist '"+charList+"'") pState)
-// ... PK
_ | is_pattern
-> wantLhsExpressionT token pState
-> wantRhsExpressionT token pState
wantRhsExpressionT :: !Token !ParseState -> (!ParsedExpr, !ParseState)
-wantRhsExpressionT token pState
+wantRhsExpressionT token pState
# (succ, expr, pState) = trySimpleRhsExpressionT token pState
| succ
# (exprs, pState) = parseList trySimpleRhsExpression pState
@@ -2177,7 +2165,7 @@ wantRhsExpressionT token pState
_ -> (PE_Empty, parseError "RHS expression" (Yes token) "<expression>" pState)
wantLhsExpressionT :: !Token !ParseState -> (!ParsedExpr, !ParseState)
-wantLhsExpressionT (IdentToken name) pState /* PK: to make a=:C x equivalent to a=:(C x) */
+wantLhsExpressionT (IdentToken name) pState /* to make a=:C x equivalent to a=:(C x) */
| isLowerCaseName name
# (id, pState) = stringToIdent name IC_Expression pState
(token, pState) = nextToken FunctionContext pState
@@ -3423,11 +3411,11 @@ where
instance nextToken ParseState
where
- nextToken :: !Context !ParseState -> (!Token, !ParseState)
- nextToken context pState
+ nextToken :: !ScanContext !ParseState -> (!Token, !ParseState)
+ nextToken scanContext pState
| pState.ps_skipping // in error recovery from parse error
= (ErrorToken "Skipping", pState)
- = accScanState (nextToken context) pState
+ = accScanState (nextToken scanContext) pState
instance getPosition ParseState
where
@@ -3485,9 +3473,9 @@ getFileAndLineNr pState =: {ps_scanState}
Simple parse functions
*/
-wantToken :: !Context !{#Char} !Token !ParseState -> ParseState
-wantToken context act dem_token pState
- # (token, pState) = nextToken context pState
+wantToken :: !ScanContext !{#Char} !Token !ParseState -> ParseState
+wantToken scanContext act dem_token pState
+ # (token, pState) = nextToken scanContext pState
| dem_token == token
= pState // -->> (token,"wanted and consumed")
= parseError act (Yes token) (toString dem_token) pState