diff options
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/parse.icl | 6 | ||||
-rw-r--r-- | frontend/syntax.dcl | 5 | ||||
-rw-r--r-- | frontend/syntax.icl | 12 |
3 files changed, 9 insertions, 14 deletions
diff --git a/frontend/parse.icl b/frontend/parse.icl index 157512b..6e401c6 100644 --- a/frontend/parse.icl +++ b/frontend/parse.icl @@ -2665,16 +2665,14 @@ where (lhs_expr, pState) = wantExpression cIsAPattern pState (token, pState) = nextToken FunctionContext pState | token == LeftArrowToken -//MW3 was: = want_generators IsListGenerator (toLineAndColumn qual_position) lhs_expr pState = want_generators IsListGenerator (toLineAndColumn qual_position) qual_filename lhs_expr pState | token == LeftArrowColonToken -//MW3 was: = want_generators IsArrayGenerator (toLineAndColumn qual_position) lhs_expr pState = want_generators IsArrayGenerator (toLineAndColumn qual_position) qual_filename lhs_expr pState + | token == LeftArrowWithBarToken + = want_generators IsOverloadedListGenerator (toLineAndColumn qual_position) qual_filename lhs_expr pState = ({qual_generators = [], qual_filter = No, qual_position = {lc_line = 0, lc_column = 0}, qual_filename = "" }, parseError "comprehension: qualifier" (Yes token) "qualifier(s)" pState) -//MW3 was: want_generators :: !GeneratorKind !LineAndColumn !ParsedExpr !ParseState -> (!Qualifier, !ParseState) -//MW3 was: want_generators gen_kind qual_position pattern_exp pState want_generators :: !GeneratorKind !LineAndColumn !FileName !ParsedExpr !ParseState -> (!Qualifier, !ParseState) want_generators gen_kind qual_position qual_filename pattern_exp pState # (gen_position, pState) = getPosition pState diff --git a/frontend/syntax.dcl b/frontend/syntax.dcl index 5437bfb..5de820b 100644 --- a/frontend/syntax.dcl +++ b/frontend/syntax.dcl @@ -1055,10 +1055,7 @@ cNonUniqueSelection :== False | PS_Array !ParsedExpr | PS_Erroneous -:: GeneratorKind :== Bool - -IsListGenerator :== True -IsArrayGenerator :== False +:: GeneratorKind = IsListGenerator | IsOverloadedListGenerator | IsArrayGenerator :: LineAndColumn = {lc_line :: !Int, lc_column :: !Int} diff --git a/frontend/syntax.icl b/frontend/syntax.icl index 63d0a91..1e9ad0b 100644 --- a/frontend/syntax.icl +++ b/frontend/syntax.icl @@ -1050,11 +1050,7 @@ cNonUniqueSelection :== False | PS_Array !ParsedExpr | PS_Erroneous - -:: GeneratorKind :== Bool - -IsListGenerator :== True -IsArrayGenerator :== False +:: GeneratorKind = IsListGenerator | IsOverloadedListGenerator | IsArrayGenerator :: LineAndColumn = {lc_line :: !Int, lc_column :: !Int} @@ -1524,7 +1520,11 @@ where instance <<< Generator where (<<<) file {gen_kind,gen_pattern,gen_expr} - = file <<< gen_pattern <<< (if gen_kind "<-" "<-:") <<< gen_expr + = file <<< gen_pattern <<< (gen_kind_to_string gen_kind) <<< gen_expr + where + gen_kind_to_string IsListGenerator = "<-" + gen_kind_to_string IsOverloadedListGenerator = "<|-" + gen_kind_to_string IsArrayGenerator = "<-:" instance <<< BasicValue where |