aboutsummaryrefslogtreecommitdiff
path: root/frontend/syntax.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/syntax.icl')
-rw-r--r--frontend/syntax.icl27
1 files changed, 17 insertions, 10 deletions
diff --git a/frontend/syntax.icl b/frontend/syntax.icl
index e73457c..440f23f 100644
--- a/frontend/syntax.icl
+++ b/frontend/syntax.icl
@@ -1020,8 +1020,10 @@ cNotVarNumber :== -1
:: LocalDef :== ParsedDefinition
-cUniqueSelection :== True
-cNonUniqueSelection :== False
+:: ParsedSelectorKind
+ = ParsedNormalSelector // .
+ | ParsedUniqueSelector // !
+ !Bool // is result element unique?
:: ParsedExpr = PE_List ![ParsedExpr]
| PE_Ident !Ident
@@ -1033,7 +1035,7 @@ cNonUniqueSelection :== False
| PE_ArrayPattern ![ElemAssignment]
| PE_UpdateComprehension !ParsedExpr !ParsedExpr !ParsedExpr ![Qualifier]
| PE_ArrayDenot ![ParsedExpr]
- | PE_Selection !Bool !ParsedExpr ![ParsedSelection]
+ | PE_Selection !ParsedSelectorKind !ParsedExpr ![ParsedSelection]
| PE_Update !ParsedExpr [ParsedSelection] ParsedExpr
| PE_Case !Ident !ParsedExpr [CaseAlt]
| PE_If !Ident !ParsedExpr !ParsedExpr !ParsedExpr
@@ -1093,10 +1095,10 @@ cIsStrict :== True
cIsNotStrict :== False
:: SelectorKind
- = NormalSelector // .
+ = NormalSelector
+ | NormalSelectorUniqueElementResult
| UniqueSelector // !
(Global DefinedSymbol) // tuple type
- !Bool // is result element unique?
:: Expression = Var !BoundVar
| App !App
@@ -1661,9 +1663,9 @@ where
instance <<< SelectorKind
where
- (<<<) file NormalSelector = file <<< "!"
- (<<<) file (UniqueSelector _ False) = file <<< "!"
- (<<<) file (UniqueSelector _ True) = file <<< "!*"
+ (<<<) file NormalSelector = file <<< "."
+ (<<<) file NormalSelectorUniqueElementResult = file <<< "!*"
+ (<<<) file (UniqueSelector _) = file <<< "!"
instance <<< Selection
where
@@ -1695,7 +1697,7 @@ where
(<<<) file (PE_List exprs) = file <<< exprs
(<<<) file (PE_Tuple args) = file <<< '(' <<< args <<< ')'
(<<<) file (PE_Basic basic_value) = file <<< basic_value
- (<<<) file (PE_Selection is_unique expr selectors) = file <<< expr <<< (if is_unique '!' '.') <<< selectors
+ (<<<) file (PE_Selection selector_kind expr selectors) = file <<< expr <<< selector_kind <<< selectors
(<<<) file (PE_Update expr1 selections expr2) = file <<< '{' <<< expr1 <<< " & " <<< selections <<< " = " <<< expr2 <<< '}'
(<<<) file (PE_Record PE_Empty _ fields) = file <<< '{' <<< fields <<< '}'
(<<<) file (PE_Record rec _ fields) = file <<< '{' <<< rec <<< " & " <<< fields <<< '}'
@@ -1718,7 +1720,12 @@ where
-> file <<< "dynamic " <<< expr
(<<<) file _ = file <<< "some expression"
-
+instance <<< ParsedSelectorKind
+where
+ (<<<) file ParsedNormalSelector = file <<< "."
+ (<<<) file (ParsedUniqueSelector False) = file <<< "!"
+ (<<<) file (ParsedUniqueSelector True) = file <<< "!*"
+
instance <<< ParsedSelection
where
(<<<) file (PS_Record selector _) = file <<< selector