beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Foo, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, Foo)
      handleNoType(Foo)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType({)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo1, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(a, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(b, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo2, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(a, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(b, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo3, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(a, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(b, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo4, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(a, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(b, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar1, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(a, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(b, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(})
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar2, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(a, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(b, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(})
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar3, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(a, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(b, as)
                  beginAsOperatorType(as)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endAsOperatorType(as)
                  handleAsOperator(as)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(})
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar4, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(a, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(?)
                    handleType(int, ?)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(b, expression)
                  handleNoTypeArguments(is)
                  handleNoArguments(is)
                  handleSend(b, is)
                  beginIsOperatorType(is)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments())
                    handleType(int, null)
                  endIsOperatorType(is)
                  handleIsOperator(is, null)
                endParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
