aboutsummaryrefslogtreecommitdiff
path: root/frontend/parse.icl
diff options
context:
space:
mode:
authorronny2001-12-12 15:51:59 +0000
committerronny2001-12-12 15:51:59 +0000
commitfdf4a8caf999c3d64c56bb2d3457718f496bf1a7 (patch)
tree22b27005bf1aa1d78a65fa4b5088489fa654c2a6 /frontend/parse.icl
parentenforce consistency of defining symbols in rhs (diff)
don't allow local nodedefs (defined with =:) with a specified type
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@927 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/parse.icl')
-rw-r--r--frontend/parse.icl34
1 files changed, 20 insertions, 14 deletions
diff --git a/frontend/parse.icl b/frontend/parse.icl
index 7ff0b12..8b38c9d 100644
--- a/frontend/parse.icl
+++ b/frontend/parse.icl
@@ -557,8 +557,13 @@ where
| isIclContext parseContext && isLocalContext parseContext && (token == EqualToken || token == DefinesColonToken) &&
/* PK isLowerCaseName name.id_name && */ not (isClassOrInstanceDefsContext parseContext)
# (rhs, _, pState) = wantRhs False (RhsDefiningSymbolExact token) (tokenBack pState)
- = (PD_NodeDef pos (PE_Ident name) rhs, pState)
-
+ | token == EqualToken
+ = (PD_Function pos name False [] rhs FK_NodeDefOrFunction, pState)
+ // otherwise // token == DefinesColonToken
+ | isGlobalContext parseContext
+ = (PD_Function pos name False [] rhs FK_Caf, pState)
+ // otherwise
+ = (PD_NodeDef pos (PE_Ident name) rhs, pState)
want_rhs_of_def parseContext (Yes (name, is_infix), args) token pos pState
# code_allowed = code_block_allowed token
(token, pState) = nextToken FunctionContext pState
@@ -782,21 +787,22 @@ isDefiningSymbol RhsDefiningSymbolRuleOrMacro observed
definingSymbolToFunKind :: RhsDefiningSymbol -> FunKind
definingSymbolToFunKind (RhsDefiningSymbolExact defining_token)
- = token_to_fun_kind defining_token
- where
- token_to_fun_kind ColonDefinesToken
- = FK_Macro
- token_to_fun_kind EqualToken
- = FK_Function cNameNotLocationDependent
- token_to_fun_kind DoubleArrowToken
- = FK_Function cNameNotLocationDependent
- token_to_fun_kind DefinesColonToken
- = FK_Caf
- token_to_fun_kind _
- = FK_Unknown
+ = definingTokenToFunKind defining_token
definingSymbolToFunKind _
= FK_Unknown
+definingTokenToFunKind :: Token -> FunKind
+definingTokenToFunKind ColonDefinesToken
+ = FK_Macro
+definingTokenToFunKind EqualToken
+ = FK_Function cNameNotLocationDependent
+definingTokenToFunKind DoubleArrowToken
+ = FK_Function cNameNotLocationDependent
+definingTokenToFunKind DefinesColonToken
+ = FK_Caf
+definingTokenToFunKind _
+ = FK_Unknown
+
wantRhs :: !Bool !RhsDefiningSymbol !ParseState -> (!Rhs, !RhsDefiningSymbol, !ParseState) // FunctionAltDefRhs
wantRhs localsExpected definingSymbol pState
# (alts, definingSymbol, pState) = want_LetsFunctionBody definingSymbol pState