beginCompilationUnit(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(dynamic)
        endMetadataStar(0)
        handleIdentifier(dynamic, typeReference)
        handleNoTypeArguments(i)
        handleType(dynamic, null)
        beginVariablesDeclaration(i, null, null)
          handleIdentifier(i, localVariableDeclaration)
          beginInitializedIdentifier(i)
            beginVariableInitializer(=)
              handleLiteralInt(10)
            endVariableInitializer(=)
          endInitializedIdentifier(i)
        endVariablesDeclaration(1, ;)
        handleIdentifier(print, expression)
        handleNoTypeArguments(()
        beginArguments(()
          beginLiteralString(')
            handleIdentifier(i, expression)
            handleNoTypeArguments(as)
            handleNoArguments(as)
            handleSend(i, i)
            beginAsOperatorType(as)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(?)
              handleType(int, ?)
            endAsOperatorType(as)
            handleAsOperator(as)
            handleInterpolationExpression(${, })
            handleStringPart(')
          endLiteralString(1, ))
        endArguments(1, (, ))
        handleSend(print, ))
        handleExpressionStatement(print, ;)
        handleIdentifier(print, expression)
        handleNoTypeArguments(()
        beginArguments(()
          beginLiteralString(')
            handleIdentifier(i, expression)
            handleNoTypeArguments(is)
            handleNoArguments(is)
            handleSend(i, i)
            beginIsOperatorType(is)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(?)
              handleType(int, ?)
            endIsOperatorType(is)
            handleIsOperator(is, null)
            handleInterpolationExpression(${, })
            handleStringPart(')
          endLiteralString(1, ))
        endArguments(1, (, ))
        handleSend(print, ))
        handleExpressionStatement(print, ;)
      endBlockFunctionBody(3, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
