beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(A, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, A)
      handleNoType(A)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(C, classOrMixinDeclaration)
    handleNoTypeVariables(extends)
    beginClassDeclaration(class, null, C)
      handleIdentifier(A, typeReference)
      handleNoTypeArguments({)
      handleType(A, null)
      handleClassExtends(extends, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(extension)
  beginMetadataStar(extension)
  endMetadataStar(0)
  beginExtensionDeclarationPrelude(extension)
    handleNoTypeVariables(on)
    beginExtensionDeclaration(extension, null)
      handleIdentifier(C, typeReference)
      handleNoTypeArguments({)
      handleType(C, null)
      beginClassOrMixinBody(DeclarationKind.Extension, {)
        beginMetadataStar(addChild)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, addChild)
            handleNoType({)
            handleIdentifier(addChild, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
              beginMetadataStar(A)
              endMetadataStar(0)
              beginFormalParameter(A, MemberKind.ExtensionNonStaticMethod, null, null, null)
                handleIdentifier(A, typeReference)
                handleNoTypeArguments(child)
                handleType(A, null)
                handleIdentifier(child, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
            endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endExtensionMethod(null, addChild, (, null, })
        endMember()
      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
    endExtensionDeclaration(extension, on, })
  endTopLevelDeclaration()
endCompilationUnit(3, )
