Problems reported:

parser/general/function_reference_following_token:38:35: Expected an identifier, but got '&'.
var operators_ampersand = f(a<b,c>&d);
                                  ^

parser/general/function_reference_following_token:44:34: Expected an identifier, but got '*'.
var operators_asterisk = f(a<b,c>*d);
                                 ^

parser/general/function_reference_following_token:56:29: Expected an identifier, but got '|'.
var operators_bar = f(a<b,c>|d);
                            ^

parser/general/function_reference_following_token:57:31: Expected an identifier, but got '^'.
var operators_caret = f(a<b,c>^d);
                              ^

parser/general/function_reference_following_token:58:29: Expected an identifier, but got 'is'.
var operators_is = f(a<b,c> is int);
                            ^^

parser/general/function_reference_following_token:64:29: A comparison expression can't be an operand of another comparison expression.
var operators_lessThan = f<a><b>;
                            ^

parser/general/function_reference_following_token:64:33: Expected '[' before this.
var operators_lessThan = f<a><b>;
                                ^

parser/general/function_reference_following_token:79:46: A comparison expression can't be an operand of another comparison expression.
var operators_openBracket_error = f(a<b,c>[d]>e);
                                             ^

parser/general/function_reference_following_token:85:33: Expected an identifier, but got '%'.
var operators_percent = f(a<b,c>%d);
                                ^

parser/general/function_reference_following_token:86:39: Expected an identifier, but got '..'.
var operators_period_period = f(a<b,c>..toString());
                                      ^^

parser/general/function_reference_following_token:87:30: '+' is not a prefix operator.
var operators_plus = f(a<b,c>+d);
                             ^

parser/general/function_reference_following_token:88:35: Expected an identifier, but got '?'.
var operators_question = f(a<b,c> ? null : null);
                                  ^

parser/general/function_reference_following_token:89:58: Expected an identifier, but got '?.'.
var operators_question_period_methodInvocation = f(a<b,c>?.toString());
                                                         ^^

parser/general/function_reference_following_token:90:66: Expected an identifier, but got '?.'.
var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
                                                                 ^^

parser/general/function_reference_following_token:91:48: Expected an identifier, but got '?..'.
var operators_question_period_period = f(a<b,c>?..toString());
                                               ^^^

parser/general/function_reference_following_token:91:51: Expected ',' before this.
var operators_question_period_period = f(a<b,c>?..toString());
                                                  ^^^^^^^^

parser/general/function_reference_following_token:92:56: Expected an identifier, but got '?.'.
var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
                                                       ^^

parser/general/function_reference_following_token:93:44: Expected an identifier, but got '??'.
var operators_question_question = f(a<b,c> ?? d);
                                           ^^

parser/general/function_reference_following_token:94:31: Expected an identifier, but got '/'.
var operators_slash = f(a<b,c>/d);
                              ^

parser/general/function_reference_following_token:95:37: Expected an identifier, but got '~/'.
var operators_tilde_slash = f(a<b,c>~/d);
                                    ^^

beginCompilationUnit(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
      handleNoType(var)
      handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments({)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralSetOrMap(1, {, null, }, true)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_closeBracket, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments([)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralList(1, [, null, ])
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_closeParen, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(g, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(f, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(f, <)
          beginTypeArguments(<)
            handleIdentifier(a, typeReference)
            handleNoTypeArguments(,)
            handleType(a, null)
            handleIdentifier(b, typeReference)
            handleNoTypeArguments(>)
            handleType(b, null)
          endTypeArguments(2, <, >)
          handleTypeArgumentApplication(<)
        endArguments(1, (, ))
        handleSend(g, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_colon, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments({)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralNull(null)
        handleLiteralMapEntry(:, })
        handleLiteralSetOrMap(1, {, null, }, false)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_comma, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments([)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralNull(null)
        handleLiteralList(2, [, null, ])
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_equals, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(==)
          handleLiteralNull(null)
        endBinaryExpression(==)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(!=)
          handleLiteralNull(null)
        endBinaryExpression(!=)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_openParen, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        beginArguments(()
        endArguments(0, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        beginImplicitCreationExpression(f)
          handleIdentifier(f, constructorReference)
          beginConstructorReference(f)
            beginTypeArguments(<)
              handleIdentifier(a, typeReference)
              handleNoTypeArguments(,)
              handleType(a, null)
              handleIdentifier(b, typeReference)
              handleNoTypeArguments(>)
              handleType(b, null)
            endTypeArguments(2, <, >)
            handleIdentifier(toString, constructorReferenceContinuationAfterTypeArguments)
          endConstructorReference(f, ., (, ConstructorReferenceContext.Implicit)
          beginArguments(()
          endArguments(0, (, ))
        endImplicitCreationExpression(f, <)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_methodInvocation_generic, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(foo, expressionContinuation)
        beginTypeArguments(<)
          handleIdentifier(c, typeReference)
          handleNoTypeArguments(>)
          handleType(c, null)
        endTypeArguments(1, <, >)
        beginArguments(()
        endArguments(0, (, ))
        handleSend(foo, ;)
        handleEndingBinaryExpression(.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(hashCode, expressionContinuation)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(hashCode, ;)
        handleEndingBinaryExpression(.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '&'., Try inserting an identifier before '&'., {lexeme: &}], &, &)
            handleIdentifier(, expression)
            handleNoTypeArguments(&)
            handleNoArguments(&)
            handleSend(, &)
            beginBinaryExpression(&)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(&)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_as, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleIdentifier(as, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(as, ))
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '*'., Try inserting an identifier before '*'., {lexeme: *}], *, *)
            handleIdentifier(, expression)
            handleNoTypeArguments(*)
            handleNoArguments(*)
            handleSend(, *)
            beginBinaryExpression(*)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(*)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_bang_openBracket, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(d, ])
            handleLiteralList(1, [, null, ])
            handleUnaryPrefixExpression(!)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_bang_paren, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleIdentifier(d, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(d, ))
            handleParenthesizedExpression(()
            handleUnaryPrefixExpression(!)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_bar, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '|'., Try inserting an identifier before '|'., {lexeme: |}], |, |)
            handleIdentifier(, expression)
            handleNoTypeArguments(|)
            handleNoArguments(|)
            handleSend(, |)
            beginBinaryExpression(|)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(|)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_caret, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '^'., Try inserting an identifier before '^'., {lexeme: ^}], ^, ^)
            handleIdentifier(, expression)
            handleNoTypeArguments(^)
            handleNoArguments(^)
            handleSend(, ^)
            beginBinaryExpression(^)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(^)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_is, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
            handleIdentifier(, expression)
            handleNoTypeArguments(is)
            handleNoArguments(is)
            handleSend(, is)
          endBinaryExpression(>)
          beginIsOperatorType(is)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
          endIsOperatorType(is)
          handleIsOperator(is, null)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginBinaryExpression(<)
          handleIdentifier(a, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(a, >)
        endBinaryExpression(<)
        handleRecoverableError(EqualityCannotBeEqualityOperand, >, >)
        beginBinaryExpression(>)
          beginTypeArguments(<)
            handleIdentifier(b, typeReference)
            handleNoTypeArguments(>)
            handleType(b, null)
          endTypeArguments(1, <, >)
          handleRecoverableError(Message[ExpectedButGot, Expected '[' before this., null, {string: [}], ;, ;)
          handleLiteralList(0, [, null, ])
        endBinaryExpression(>)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_minus, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleIdentifier(d, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(d, ))
            handleUnaryPrefixExpression(-)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_openBracket, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(d, ])
            handleLiteralList(1, [, null, ])
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_openBracket_error, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(d, ])
            handleLiteralList(1, [, null, ])
          endBinaryExpression(>)
          handleRecoverableError(EqualityCannotBeEqualityOperand, >, >)
          beginBinaryExpression(>)
            handleIdentifier(e, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(e, ))
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_openBracket_unambiguous, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(d, ,)
            handleIdentifier(e, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(e, ])
            handleLiteralList(2, [, null, ])
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_percent, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '%'., Try inserting an identifier before '%'., {lexeme: %}], %, %)
            handleIdentifier(, expression)
            handleNoTypeArguments(%)
            handleNoArguments(%)
            handleSend(, %)
            beginBinaryExpression(%)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(%)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_period_period, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '..'., Try inserting an identifier before '..'., {lexeme: ..}], .., ..)
            handleIdentifier(, expression)
            handleNoTypeArguments(..)
            handleNoArguments(..)
            handleSend(, ..)
          endBinaryExpression(>)
          beginCascade(..)
            handleIdentifier(toString, expressionContinuation)
            handleNoTypeArguments(()
            beginArguments(()
            endArguments(0, (, ))
            handleSend(toString, ))
            handleEndingBinaryExpression(..)
          endCascade()
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_plus, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(UnsupportedPrefixPlus, +, +)
            handleIdentifier(, expression)
            handleNoTypeArguments(+)
            handleNoArguments(+)
            handleSend(, +)
            beginBinaryExpression(+)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(+)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_question, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?'., Try inserting an identifier before '?'., {lexeme: ?}], ?, ?)
            handleIdentifier(, expression)
            handleNoTypeArguments(?)
            handleNoArguments(?)
            handleSend(, ?)
          endBinaryExpression(>)
          beginConditionalExpression(?)
            handleLiteralNull(null)
            handleConditionalExpressionColon()
            handleLiteralNull(null)
          endConditionalExpression(?, :)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
            handleIdentifier(, expression)
            handleNoTypeArguments(?.)
            handleNoArguments(?.)
            handleSend(, ?.)
            handleIdentifier(toString, expressionContinuation)
            handleNoTypeArguments(()
            beginArguments(()
            endArguments(0, (, ))
            handleSend(toString, ))
            handleEndingBinaryExpression(?.)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
            handleIdentifier(, expression)
            handleNoTypeArguments(?.)
            handleNoArguments(?.)
            handleSend(, ?.)
            handleIdentifier(foo, expressionContinuation)
            beginTypeArguments(<)
              handleIdentifier(c, typeReference)
              handleNoTypeArguments(>)
              handleType(c, null)
            endTypeArguments(1, <, >)
            beginArguments(()
            endArguments(0, (, ))
            handleSend(foo, ))
            handleEndingBinaryExpression(?.)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?..'., Try inserting an identifier before '?..'., {lexeme: ?..}], ?.., ?..)
            handleIdentifier(, expression)
            handleNoTypeArguments(toString)
            handleNoArguments(toString)
            handleSend(, toString)
          endBinaryExpression(>)
          handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], toString, toString)
          handleIdentifier(toString, expression)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(toString, ))
        endArguments(3, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
            handleIdentifier(, expression)
            handleNoTypeArguments(?.)
            handleNoArguments(?.)
            handleSend(, ?.)
            handleIdentifier(hashCode, expressionContinuation)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(hashCode, ))
            handleEndingBinaryExpression(?.)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_question_question, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '??'., Try inserting an identifier before '??'., {lexeme: ??}], ??, ??)
            handleIdentifier(, expression)
            handleNoTypeArguments(??)
            handleNoArguments(??)
            handleSend(, ??)
          endBinaryExpression(>)
          beginBinaryExpression(??)
            handleIdentifier(d, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(d, ))
          endBinaryExpression(??)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_slash, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '/'., Try inserting an identifier before '/'., {lexeme: /}], /, /)
            handleIdentifier(, expression)
            handleNoTypeArguments(/)
            handleNoArguments(/)
            handleSend(, /)
            beginBinaryExpression(/)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(/)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
      handleNoType(var)
      handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '~/'., Try inserting an identifier before '~/'., {lexeme: ~/}], ~/, ~/)
            handleIdentifier(, expression)
            handleNoTypeArguments(~/)
            handleNoArguments(~/)
            handleSend(, ~/)
            beginBinaryExpression(~/)
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endBinaryExpression(~/)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration()
endCompilationUnit(36, )
