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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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(>)
            beginParenthesizedExpressionOrRecordLiteral(()
              handleIdentifier(d, expression)
              handleNoTypeArguments())
              handleNoArguments())
              handleSend(d, ))
            endParenthesizedExpression(()
            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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, )
