Problems reported:

parser/general/issue_45703:1:7: Can't use 'Function' as a name here.
class Function {}
      ^^^^^^^^

parser/general/issue_45703:2:9: Can't use 'Function' as a name here.
class C<Function> {}
        ^^^^^^^^

parser/general/issue_45703:4:9: 'Function' can't be used as an identifier because it's a keyword.
typedef Function = int;
        ^^^^^^^^

parser/general/issue_45703:5:11: Can't use 'Function' as a name here.
typedef F<Function> = int;
          ^^^^^^^^

parser/general/issue_45703:7:11: Can't use 'Function' as a name here.
extension Function on List {}
          ^^^^^^^^

parser/general/issue_45703:8:13: Can't use 'Function' as a name here.
extension E<Function> on List<Function> {}
            ^^^^^^^^

parser/general/issue_45703:10:7: Can't use 'Function' as a name here.
mixin Function {}
      ^^^^^^^^

parser/general/issue_45703:11:9: Can't use 'Function' as a name here.
mixin M<Function> implements List<Function> {}
        ^^^^^^^^

beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
    handleIdentifier(Function, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, Function)
      handleNoType(Function)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(C, classOrMixinDeclaration)
    beginTypeVariables(<)
      beginMetadataStar(Function)
      endMetadataStar(0)
      handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
      handleIdentifier(Function, typeVariableDeclaration)
      beginTypeVariable(Function)
        handleTypeVariablesDefined(Function, 1)
        handleNoType(Function)
      endTypeVariable(>, 0, null, null)
    endTypeVariables(<, >)
    beginClassDeclaration(class, null, null, null, C)
      handleNoType(>)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'Function' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: Function}], Function, Function)
      handleIdentifier(Function, typedefDeclaration)
      handleNoTypeVariables(=)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(;)
      handleType(int, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(Function)
        endMetadataStar(0)
        handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
        handleIdentifier(Function, typeVariableDeclaration)
        beginTypeVariable(Function)
          handleTypeVariablesDefined(Function, 1)
          handleNoType(Function)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(;)
      handleType(int, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(extension)
  beginMetadataStar(extension)
  endMetadataStar(0)
  beginExtensionDeclarationPrelude(extension)
    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
    handleNoTypeVariables(on)
    beginExtensionDeclaration(extension, Function)
      handleIdentifier(List, typeReference)
      handleNoTypeArguments({)
      handleType(List, null)
      handleExtensionShowHide(null, 0, null, 0)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 0, {, })
    endExtensionDeclaration(extension, null, on, null, null, })
  endTopLevelDeclaration(extension)
  beginMetadataStar(extension)
  endMetadataStar(0)
  beginExtensionDeclarationPrelude(extension)
    beginTypeVariables(<)
      beginMetadataStar(Function)
      endMetadataStar(0)
      handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
      handleIdentifier(Function, typeVariableDeclaration)
      beginTypeVariable(Function)
        handleTypeVariablesDefined(Function, 1)
        handleNoType(Function)
      endTypeVariable(>, 0, null, null)
    endTypeVariables(<, >)
    beginExtensionDeclaration(extension, E)
      handleIdentifier(List, typeReference)
      beginTypeArguments(<)
        handleIdentifier(Function, typeReference)
        handleNoTypeArguments(>)
        handleType(Function, null)
      endTypeArguments(1, <, >)
      handleType(List, null)
      handleExtensionShowHide(null, 0, null, 0)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 0, {, })
    endExtensionDeclaration(extension, null, on, null, null, })
  endTopLevelDeclaration(mixin)
  beginMetadataStar(mixin)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
    handleIdentifier(Function, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginMixinDeclaration(null, mixin, Function)
      handleMixinOn(null, 0)
      handleImplements(null, 0)
      handleMixinHeader(mixin)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
    endMixinDeclaration(mixin, })
  endTopLevelDeclaration(mixin)
  beginMetadataStar(mixin)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
    handleIdentifier(M, classOrMixinDeclaration)
    beginTypeVariables(<)
      beginMetadataStar(Function)
      endMetadataStar(0)
      handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'Function' as a name here., null, {lexeme: Function}], Function, Function)
      handleIdentifier(Function, typeVariableDeclaration)
      beginTypeVariable(Function)
        handleTypeVariablesDefined(Function, 1)
        handleNoType(Function)
      endTypeVariable(>, 0, null, null)
    endTypeVariables(<, >)
    beginMixinDeclaration(null, mixin, M)
      handleMixinOn(null, 0)
      handleIdentifier(List, typeReference)
      beginTypeArguments(<)
        handleIdentifier(Function, typeReference)
        handleNoTypeArguments(>)
        handleType(Function, null)
      endTypeArguments(1, <, >)
      handleType(List, null)
      handleImplements(implements, 1)
      handleMixinHeader(mixin)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
    endMixinDeclaration(mixin, })
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(}, null, null)
      handleVoidKeyword(void)
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(Function)
        endMetadataStar(0)
        handleIdentifier(Function, typeReference)
        handleNoTypeArguments(ok)
        handleType(Function, null)
        beginVariablesDeclaration(ok, null, null)
          handleIdentifier(ok, localVariableDeclaration)
          beginInitializedIdentifier(ok)
            handleNoVariableInitializer(ok)
          endInitializedIdentifier(ok)
        endVariablesDeclaration(1, ;)
        beginMetadataStar(dynamic)
        endMetadataStar(0)
        handleIdentifier(dynamic, typeReference)
        handleNoTypeArguments(okToo)
        handleType(dynamic, null)
        beginVariablesDeclaration(okToo, null, null)
          handleIdentifier(okToo, localVariableDeclaration)
          beginInitializedIdentifier(okToo)
            handleNoVariableInitializer(okToo)
          endInitializedIdentifier(okToo)
        endVariablesDeclaration(1, ;)
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(9, )
