beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(final)
        endMetadataStar(0)
        handleNoType(final)
        beginVariablesDeclaration(record, null, final)
          handleIdentifier(record, localVariableDeclaration)
          beginInitializedIdentifier(record)
            beginVariableInitializer(=)
              beginParenthesizedExpressionOrRecordLiteral(()
                beginParenthesizedExpressionOrRecordLiteral(()
                  handleIdentifier(a, namedRecordFieldReference)
                  handleLiteralInt(1)
                  handleNamedRecordField(:)
                  handleIdentifier(b, namedRecordFieldReference)
                  handleLiteralInt(2)
                  handleNamedRecordField(:)
                endRecordLiteral((, 2, null)
                handleLiteralInt(3)
              endRecordLiteral((, 2, null)
            endVariableInitializer(=)
          endInitializedIdentifier(record)
        endVariablesDeclaration(1, ;)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginPattern(final)
          beginPattern(()
            handleNoName(()
            beginPattern(:)
              handleNoType(a)
              handleDeclaredVariablePattern(null, a, false)
            endPattern(a)
            handlePatternField(:)
            handleNoName(,)
            beginPattern(:)
              handleNoType(b)
              handleDeclaredVariablePattern(null, b, false)
            endPattern(b)
            handlePatternField(:)
            handleRecordPattern((, 2)
          endPattern())
          handlePatternField(null)
          beginPattern(,)
            handleNoType(c)
            handleDeclaredVariablePattern(null, c, false)
          endPattern(c)
          handlePatternField(null)
          handleRecordPattern((, 2)
        endPattern())
        handleIdentifier(record, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(record, record)
        handlePatternVariableDeclarationStatement(final, =, ;)
        handleIdentifier(print, expression)
        handleNoTypeArguments(()
        beginArguments(()
          beginLiteralString("a = )
            handleIdentifier(a, expression)
            handleNoTypeArguments(; b = )
            handleNoArguments(; b = )
            handleSend(a, a)
            handleInterpolationExpression($, null)
            handleStringPart(; b = )
            handleIdentifier(b, expression)
            handleNoTypeArguments(, c = )
            handleNoArguments(, c = )
            handleSend(b, b)
            handleInterpolationExpression($, null)
            handleStringPart(, c = )
            handleIdentifier(c, expression)
            handleNoTypeArguments(")
            handleNoArguments(")
            handleSend(c, c)
            handleInterpolationExpression($, null)
            handleStringPart(")
          endLiteralString(3, ))
        endArguments(1, (, ))
        handleSend(print, ))
        handleExpressionStatement(print, ;)
      endBlockFunctionBody(3, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
