@@ -155,16 +155,16 @@ ["&&"], ["!="], ["=="], ["<","<=",">",">="], - ["|"], - ["^"], - ["&"], - ["<<", ">>"], +// ["|"], +// ["^"], +// ["&"], +// ["<<", ">>", "<<<", ">>>"], ["+","-"], ["~"], ["*","/","%"], - ["^^","**"], +// ["^^","**"], [".",".?"] ]; AST E(size_t level) @@ -195,9 +195,9 @@ } AST Funcall() { - /// Funcall ::= BaseExpression ["(" Expression%"," ")"]* + /// Funcall ::= BaseExpression ["(" Expression%"," ")" | "{" ENTRIES "}"]* auto e = BaseExpression(); for(;;) if( tryEat("(") ) @@ -225,8 +225,10 @@ } AST parseTableSetAfterBrace(AST e) { + /// TableSet ::= "{" (ID ":" E) % "," "}" + if( tryEat("}") ) return e; auto pos = currentPosition(); for(;;) @@ -317,9 +319,9 @@ } AST parsePatternMatch(LexPosition pos) { - // case( pmExpr )cases + // case "(" pmExpr ")" CASES //==> // let pmVar = pmExpr in (... let pmTryFirst = ... in pmTryFirst()) eat("(", "after case"); AST pmExpr = E(0); @@ -660,5 +662,10 @@ assert_nothrow(parseString(` case( 1 ) when({aaaa:_}){1} `)); + assert_nothrow(parseString(` + case( 1 ) + when({aaaa:@value(x)}){1} + when({aaaa:{bbb:_}, ccc:123}){1} + `)); }