Files
rr3-apk/smali_classes5/kotlinx/coroutines/channels/BufferedChannel.smali
Daniel Elliott f3960ee359 Add Discord APKTool decompilation (Smali source for modding)
- Imported from https://github.com/supermegamestre/Project-Real-Resurrection-3
- APKTool decompilation (Smali bytecode) for modding and rebuilding APK
- Supports both 32-bit (armeabi-v7a) and 64-bit (arm64-v8a) architectures
- Includes full Smali source, resources, and native libraries
- Ready to rebuild APK after modifications with apktool b command
- Added comprehensive README-apktool.md with modding guide

This branch complements the JADX branches:
- Use JADX (main/discord-community) to UNDERSTAND code (readable Java)
- Use APKTool (this branch) to MODIFY and REBUILD APK (editable Smali)

Total: 44,417 files, 538.51 MB Smali source code
2026-02-18 16:13:44 -08:00

7842 lines
212 KiB
Smali

.class public Lkotlinx/coroutines/channels/BufferedChannel;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Lkotlinx/coroutines/channels/Channel;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
}
.end annotation
# static fields
.field public static final _closeCause$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.field public static final bufferEnd$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.field public static final bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.field public static final closeHandler$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.field public static final completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.field public static final receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.field public static final receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.field public static final sendSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.field public static final sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
# instance fields
.field private volatile _closeCause:Ljava/lang/Object;
.field private volatile bufferEnd:J
.field private volatile bufferEndSegment:Ljava/lang/Object;
.field public final capacity:I
.field private volatile closeHandler:Ljava/lang/Object;
.field private volatile completedExpandBuffersAndPauseFlag:J
.field public final onUndeliveredElement:Lkotlin/jvm/functions/Function1;
.field public final onUndeliveredElementReceiveCancellationConstructor:Lkotlin/jvm/functions/Function3;
.field private volatile receiveSegment:Ljava/lang/Object;
.field private volatile receivers:J
.field private volatile sendSegment:Ljava/lang/Object;
.field private volatile sendersAndCloseStatus:J
# direct methods
.method static constructor <clinit>()V
.locals 3
const-string v0, "sendersAndCloseStatus"
const-class v1, Lkotlinx/coroutines/channels/BufferedChannel;
invoke-static {v1, v0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
const-string v0, "receivers"
invoke-static {v1, v0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
const-string v0, "bufferEnd"
invoke-static {v1, v0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEnd$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
const-string v0, "completedExpandBuffersAndPauseFlag"
invoke-static {v1, v0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
const-string v0, "sendSegment"
const-class v2, Ljava/lang/Object;
invoke-static {v1, v2, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
const-string v0, "receiveSegment"
invoke-static {v1, v2, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
const-string v0, "bufferEndSegment"
invoke-static {v1, v2, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
const-string v0, "_closeCause"
invoke-static {v1, v2, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->_closeCause$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
const-string v0, "closeHandler"
invoke-static {v1, v2, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
sput-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->closeHandler$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
return-void
.end method
.method public constructor <init>(ILkotlin/jvm/functions/Function1;)V
.locals 8
.line 36
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->capacity:I
iput-object p2, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-ltz p1, :cond_2
.line 68
invoke-static {p1}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J
move-result-wide v0
iput-wide v0, p0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEnd:J
.line 87
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v0
iput-wide v0, p0, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag:J
.line 98
new-instance p1, Lkotlinx/coroutines/channels/ChannelSegment;
const-wide/16 v3, 0x0
const/4 v5, 0x0
const/4 v7, 0x3
move-object v2, p1
move-object v6, p0
invoke-direct/range {v2 .. v7}, Lkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V
iput-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->sendSegment:Ljava/lang/Object;
iput-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment:Ljava/lang/Object;
.line 105
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
move-result v0
if-eqz v0, :cond_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object p1
const-string v0, "null cannot be cast to non-null type kotlinx.coroutines.channels.ChannelSegment<E of kotlinx.coroutines.channels.BufferedChannel>"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
:cond_0
iput-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment:Ljava/lang/Object;
if-eqz p2, :cond_1
.line 1542
new-instance p1, Lkotlinx/coroutines/channels/BufferedChannel$onUndeliveredElementReceiveCancellationConstructor$1$1;
invoke-direct {p1, p0}, Lkotlinx/coroutines/channels/BufferedChannel$onUndeliveredElementReceiveCancellationConstructor$1$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V
goto :goto_0
:cond_1
const/4 p1, 0x0
:goto_0
iput-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElementReceiveCancellationConstructor:Lkotlin/jvm/functions/Function3;
.line 1721
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
iput-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->_closeCause:Ljava/lang/Object;
return-void
.line 46
:cond_2
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string v0, "Invalid channel capacity: "
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string p1, ", should be >=0"
invoke-virtual {p2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
new-instance p2, Ljava/lang/IllegalArgumentException;
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p2, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw p2
.end method
.method public static final synthetic access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
.locals 0
.line 36
invoke-virtual {p0, p1, p2, p3}, Lkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object p0
return-object p0
.end method
.method public static final synthetic access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
.locals 0
.line 36
invoke-virtual {p0, p1, p2, p3}, Lkotlinx/coroutines/channels/BufferedChannel;->findSegmentSend(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object p0
return-object p0
.end method
.method public static final synthetic access$getReceiveException(Lkotlinx/coroutines/channels/BufferedChannel;)Ljava/lang/Throwable;
.locals 0
.line 36
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiveException()Ljava/lang/Throwable;
move-result-object p0
return-object p0
.end method
.method public static final synthetic access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.locals 1
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
return-object v0
.end method
.method public static final synthetic access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.locals 1
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
return-object v0
.end method
.method public static final synthetic access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.locals 1
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
return-object v0
.end method
.method public static final synthetic access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.locals 1
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
return-object v0
.end method
.method public static final synthetic access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z
.locals 0
.line 36
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend0(J)Z
move-result p0
return p0
.end method
.method public static final synthetic access$onClosedReceiveCatchingOnNoWaiterSuspend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/CancellableContinuation;)V
.locals 0
.line 36
invoke-virtual {p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedReceiveCatchingOnNoWaiterSuspend(Lkotlinx/coroutines/CancellableContinuation;)V
return-void
.end method
.method public static final synthetic access$onClosedReceiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/CancellableContinuation;)V
.locals 0
.line 36
invoke-virtual {p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedReceiveOnNoWaiterSuspend(Lkotlinx/coroutines/CancellableContinuation;)V
return-void
.end method
.method public static final synthetic access$onClosedSendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
.locals 0
.line 36
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedSendOnNoWaiterSuspend(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
return-void
.end method
.method public static final synthetic access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
.locals 0
.line 36
invoke-virtual {p0, p1, p2, p3}, Lkotlinx/coroutines/channels/BufferedChannel;->prepareReceiverForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
return-void
.end method
.method public static final synthetic access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
.locals 0
.line 36
invoke-virtual {p0, p1, p2, p3}, Lkotlinx/coroutines/channels/BufferedChannel;->prepareSenderForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
return-void
.end method
.method public static final synthetic access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 0
.line 36
invoke-virtual/range {p0 .. p5}, Lkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object p0
return-object p0
.end method
.method public static final synthetic access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
.locals 0
.line 36
invoke-virtual/range {p0 .. p5}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object p0
return-object p0
.end method
.method public static final synthetic access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
.locals 0
.line 36
invoke-virtual/range {p0 .. p7}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellSend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result p0
return p0
.end method
.method public static synthetic incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V
.locals 0
if-nez p4, :cond_1
and-int/lit8 p3, p3, 0x1
if-eqz p3, :cond_0
const-wide/16 p1, 0x1
.line 1368
:cond_0
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V
return-void
:cond_1
new-instance p0, Ljava/lang/UnsupportedOperationException;
const-string p1, "Super calls with default arguments not supported in this target, function: incCompletedExpandBufferAttempts"
invoke-direct {p0, p1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw p0
.end method
.method public static synthetic receive$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 13
const/4 v6, 0x0
.line 667
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
.line 886
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
.line 890
:goto_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
move-result v1
if-nez v1, :cond_6
.line 681
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v1
.line 893
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v10
.line 895
sget v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, v1
div-long v2, v10, v2
int-to-long v4, v1
.line 896
rem-long v4, v10, v4
long-to-int v9, v4
.line 899
iget-wide v4, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v1, v4, v2
if-eqz v1, :cond_1
.line 901
invoke-static {p0, v2, v3, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_0
goto :goto_0
:cond_0
move-object v8, v1
goto :goto_1
:cond_1
move-object v8, v0
:goto_1
move-object v0, p0
move-object v1, v8
move v2, v9
move-wide v3, v10
move-object v5, v6
.line 908
invoke-static/range {v0 .. v5}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 910
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-eq v0, v1, :cond_5
.line 916
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_3
.line 923
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v0
cmp-long v0, v10, v0
if-gez v0, :cond_2
invoke-virtual {v8}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
:cond_2
move-object v0, v8
goto :goto_0
.line 926
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_4
move-object v7, p0
move-object v12, p1
.line 685
invoke-virtual/range {v7 .. v12}, Lkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object p0
return-object p0
.line 935
:cond_4
invoke-virtual {v8}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
return-object v0
.line 914
:cond_5
new-instance p0, Ljava/lang/IllegalStateException;
const-string p1, "unexpected"
.line 679
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p0, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p0
.line 681
:cond_6
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiveException()Ljava/lang/Throwable;
move-result-object p0
invoke-static {p0}, Lkotlinx/coroutines/internal/StackTraceRecoveryKt;->recoverStackTrace(Ljava/lang/Throwable;)Ljava/lang/Throwable;
move-result-object p0
throw p0
.end method
.method public static synthetic receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 14
instance-of v0, p1, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;
if-eqz v0, :cond_0
move-object v0, p1
check-cast v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;
iget v1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->label:I
const/high16 v2, -0x80000000
and-int v3, v1, v2
if-eqz v3, :cond_0
sub-int/2addr v1, v2
iput v1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->label:I
:goto_0
move-object v6, v0
goto :goto_1
:cond_0
new-instance v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;
invoke-direct {v0, p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V
goto :goto_0
:goto_1
iget-object p1, v6, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->result:Ljava/lang/Object;
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v0
.line 731
iget v1, v6, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->label:I
const/4 v2, 0x1
if-eqz v1, :cond_2
if-ne v1, v2, :cond_1
invoke-static {p1}, Lkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
check-cast p1, Lkotlinx/coroutines/channels/ChannelResult;
invoke-virtual {p1}, Lkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object;
move-result-object p0
goto/16 :goto_4
:cond_1
new-instance p0, Ljava/lang/IllegalStateException;
const-string p1, "call to \'resume\' before \'invoke\' with coroutine"
invoke-direct {p0, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p0
:cond_2
invoke-static {p1}, Lkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
const/4 p1, 0x0
.line 732
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v1
.line 886
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lkotlinx/coroutines/channels/ChannelSegment;
.line 890
:goto_2
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
move-result v3
if-eqz v3, :cond_3
.line 738
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object p0
invoke-virtual {p1, p0}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p0
goto/16 :goto_4
.line 890
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v3
.line 893
invoke-virtual {v3, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v4
.line 895
sget v3, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v7, v3
div-long v7, v4, v7
int-to-long v9, v3
.line 896
rem-long v9, v4, v9
long-to-int v3, v9
.line 899
iget-wide v9, v1, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v9, v9, v7
if-eqz v9, :cond_5
.line 901
invoke-static {p0, v7, v8, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v7
if-nez v7, :cond_4
goto :goto_2
:cond_4
move-object v13, v7
goto :goto_3
:cond_5
move-object v13, v1
:goto_3
move-object v7, p0
move-object v8, v13
move v9, v3
move-wide v10, v4
move-object v12, p1
.line 908
invoke-static/range {v7 .. v12}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 910
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
if-eq v1, v7, :cond_a
.line 916
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
if-ne v1, v7, :cond_7
.line 923
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v7
cmp-long v1, v4, v7
if-gez v1, :cond_6
invoke-virtual {v13}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
:cond_6
move-object v1, v13
goto :goto_2
.line 926
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v1, p1, :cond_8
.line 739
iput v2, v6, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->label:I
move-object v1, p0
move-object v2, v13
invoke-virtual/range {v1 .. v6}, Lkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object p0
if-ne p0, v0, :cond_9
return-object v0
.line 935
:cond_8
invoke-virtual {v13}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 735
sget-object p0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0, v1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p0
:cond_9
:goto_4
return-object p0
.line 914
:cond_a
new-instance p0, Ljava/lang/IllegalStateException;
const-string p1, "unexpected"
.line 737
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p0, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p0
.end method
.method public static synthetic send$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 15
move-object v8, p0
const/4 v9, 0x0
.line 113
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
.line 273
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
.line 274
:cond_0
:goto_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v1
.line 277
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v1
const-wide v3, 0xfffffffffffffffL
and-long v10, v1, v3
.line 280
invoke-static {p0, v1, v2}, Lkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z
move-result v12
.line 282
sget v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, v1
div-long v2, v10, v2
int-to-long v4, v1
.line 283
rem-long v4, v10, v4
long-to-int v13, v4
.line 286
iget-wide v4, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v1, v4, v2
if-eqz v1, :cond_2
.line 288
invoke-static {p0, v2, v3, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_1
if-eqz v12, :cond_0
.line 126
invoke-virtual/range {p0 .. p2}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedSend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object v0
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
if-ne v0, v1, :cond_9
return-object v0
:cond_1
move-object v14, v1
goto :goto_1
:cond_2
move-object v14, v0
:goto_1
move-object v0, p0
move-object v1, v14
move v2, v13
move-object/from16 v3, p1
move-wide v4, v10
move-object v6, v9
move v7, v12
.line 304
invoke-static/range {v0 .. v7}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result v0
if-eqz v0, :cond_8
const/4 v1, 0x1
if-eq v0, v1, :cond_9
const/4 v1, 0x2
if-eq v0, v1, :cond_7
const/4 v1, 0x3
if-eq v0, v1, :cond_6
const/4 v1, 0x4
if-eq v0, v1, :cond_4
const/4 v1, 0x5
if-eq v0, v1, :cond_3
goto :goto_2
.line 341
:cond_3
invoke-virtual {v14}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
:goto_2
move-object v0, v14
goto :goto_0
.line 334
:cond_4
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v0
cmp-long v0, v10, v0
if-gez v0, :cond_5
invoke-virtual {v14}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 126
:cond_5
invoke-virtual/range {p0 .. p2}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedSend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object v0
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
if-ne v0, v1, :cond_9
return-object v0
:cond_6
move-object v0, p0
move-object v1, v14
move v2, v13
move-object/from16 v3, p1
move-wide v4, v10
move-object/from16 v6, p2
.line 130
invoke-virtual/range {v0 .. v6}, Lkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object v0
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
if-ne v0, v1, :cond_9
return-object v0
:cond_7
if-eqz v12, :cond_9
.line 323
invoke-virtual {v14}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
.line 126
invoke-virtual/range {p0 .. p2}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedSend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object v0
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
if-ne v0, v1, :cond_9
return-object v0
.line 310
:cond_8
invoke-virtual {v14}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 347
:cond_9
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
return-object v0
.end method
# virtual methods
.method public final bufferOrRendezvousSend(J)Z
.locals 4
.line 614
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v0
cmp-long v0, p1, v0
if-ltz v0, :cond_1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v0
iget v2, p0, Lkotlinx/coroutines/channels/BufferedChannel;->capacity:I
int-to-long v2, v2
add-long/2addr v0, v2
cmp-long p1, p1, v0
if-gez p1, :cond_0
goto :goto_0
:cond_0
const/4 p1, 0x0
goto :goto_1
:cond_1
:goto_0
const/4 p1, 0x1
:goto_1
return p1
.end method
.method public final cancel(Ljava/util/concurrent/CancellationException;)V
.locals 0
.line 1762
invoke-virtual {p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z
return-void
.end method
.method public cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z
.locals 1
if-nez p1, :cond_0
.line 1765
new-instance p1, Ljava/util/concurrent/CancellationException;
const-string v0, "Channel was cancelled"
invoke-direct {p1, v0}, Ljava/util/concurrent/CancellationException;-><init>(Ljava/lang/String;)V
:cond_0
const/4 v0, 0x1
invoke-virtual {p0, p1, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z
move-result p1
return p1
.end method
.method public final cancelSuspendedReceiveRequests(Lkotlinx/coroutines/channels/ChannelSegment;J)V
.locals 8
const/4 v0, 0x0
const/4 v1, 0x1
.line 2115
invoke-static {v0, v1, v0}, Lkotlinx/coroutines/internal/InlineList;->constructor-impl$default(Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)Ljava/lang/Object;
move-result-object v0
:goto_0
const/4 v2, -0x1
if-eqz p1, :cond_6
.line 2118
sget v3, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
sub-int/2addr v3, v1
:goto_1
if-ge v2, v3, :cond_5
.line 2120
iget-wide v4, p1, Lkotlinx/coroutines/internal/Segment;->id:J
sget v6, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v6, v6
mul-long/2addr v4, v6
int-to-long v6, v3
add-long/2addr v4, v6
cmp-long v4, v4, p2
if-ltz v4, :cond_6
.line 2123
:cond_0
invoke-virtual {p1, v3}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v4
if-eqz v4, :cond_3
.line 2125
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v5
if-ne v4, v5, :cond_1
goto :goto_2
.line 2131
:cond_1
instance-of v5, v4, Lkotlinx/coroutines/channels/WaiterEB;
if-eqz v5, :cond_2
.line 2132
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v5
invoke-virtual {p1, v3, v4, v5}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v5
if-eqz v5, :cond_0
.line 2133
check-cast v4, Lkotlinx/coroutines/channels/WaiterEB;
iget-object v4, v4, Lkotlinx/coroutines/channels/WaiterEB;->waiter:Lkotlinx/coroutines/Waiter;
invoke-static {v0, v4}, Lkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 2134
invoke-virtual {p1, v3, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
goto :goto_3
.line 2138
:cond_2
instance-of v5, v4, Lkotlinx/coroutines/Waiter;
if-eqz v5, :cond_4
.line 2139
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v5
invoke-virtual {p1, v3, v4, v5}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v5
if-eqz v5, :cond_0
.line 2140
invoke-static {v0, v4}, Lkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 2141
invoke-virtual {p1, v3, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
goto :goto_3
.line 2126
:cond_3
:goto_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v5
invoke-virtual {p1, v3, v4, v5}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_0
.line 2127
invoke-virtual {p1}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
:cond_4
:goto_3
add-int/lit8 v3, v3, -0x1
goto :goto_1
.line 2150
:cond_5
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object p1
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
goto :goto_0
:cond_6
if-eqz v0, :cond_8
.line 39
instance-of p1, v0, Ljava/util/ArrayList;
if-nez p1, :cond_7
check-cast v0, Lkotlinx/coroutines/Waiter;
.line 2153
invoke-virtual {p0, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->resumeReceiverOnClosedChannel(Lkotlinx/coroutines/Waiter;)V
goto :goto_5
:cond_7
const-string p1, "null cannot be cast to non-null type java.util.ArrayList<E of kotlinx.coroutines.internal.InlineList>{ kotlin.collections.TypeAliasesKt.ArrayList<E of kotlinx.coroutines.internal.InlineList> }"
.line 41
invoke-static {v0, p1}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
check-cast v0, Ljava/util/ArrayList;
.line 42
invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
move-result p1
sub-int/2addr p1, v1
:goto_4
if-ge v2, p1, :cond_8
.line 43
invoke-virtual {v0, p1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
move-result-object p2
check-cast p2, Lkotlinx/coroutines/Waiter;
.line 2153
invoke-virtual {p0, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->resumeReceiverOnClosedChannel(Lkotlinx/coroutines/Waiter;)V
add-int/lit8 p1, p1, -0x1
goto :goto_4
:cond_8
:goto_5
return-void
.end method
.method public close(Ljava/lang/Throwable;)Z
.locals 1
const/4 v0, 0x0
.line 1754
invoke-virtual {p0, p1, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z
move-result p1
return p1
.end method
.method public final closeLinkedList()Lkotlinx/coroutines/channels/ChannelSegment;
.locals 6
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1953
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->sendSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1954
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lkotlinx/coroutines/channels/ChannelSegment;
iget-wide v2, v1, Lkotlinx/coroutines/internal/Segment;->id:J
move-object v4, v0
check-cast v4, Lkotlinx/coroutines/channels/ChannelSegment;
iget-wide v4, v4, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v2, v2, v4
if-lez v2, :cond_0
move-object v0, v1
:cond_0
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1955
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lkotlinx/coroutines/channels/ChannelSegment;
iget-wide v2, v1, Lkotlinx/coroutines/internal/Segment;->id:J
move-object v4, v0
check-cast v4, Lkotlinx/coroutines/channels/ChannelSegment;
iget-wide v4, v4, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v2, v2, v4
if-lez v2, :cond_1
move-object v0, v1
.line 1958
:cond_1
check-cast v0, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
invoke-static {v0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
return-object v0
.end method
.method public closeOrCancelImpl(Ljava/lang/Throwable;Z)Z
.locals 2
if-eqz p2, :cond_0
.line 1788
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->markCancellationStarted()V
:cond_0
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->_closeCause$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1791
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-static {v0, p0, v1, p1}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result p1
if-eqz p2, :cond_1
.line 1793
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->markCancelled()V
goto :goto_0
:cond_1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->markClosed()V
.line 1795
:goto_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V
.line 1799
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V
if-eqz p1, :cond_2
.line 1800
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->invokeCloseHandler()V
:cond_2
return p1
.end method
.method public final completeCancel(J)V
.locals 0
.line 1942
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object p1
.line 1945
invoke-virtual {p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->removeUnprocessedElements(Lkotlinx/coroutines/channels/ChannelSegment;)V
return-void
.end method
.method public final completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment;
.locals 5
.line 1913
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->closeLinkedList()Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v0
.line 1923
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z
move-result v1
if-eqz v1, :cond_0
.line 1924
invoke-virtual {p0, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->markAllEmptyCellsAsClosed(Lkotlinx/coroutines/channels/ChannelSegment;)J
move-result-wide v1
const-wide/16 v3, -0x1
cmp-long v3, v1, v3
if-eqz v3, :cond_0
.line 1926
invoke-virtual {p0, v1, v2}, Lkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V
.line 1930
:cond_0
invoke-virtual {p0, v0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->cancelSuspendedReceiveRequests(Lkotlinx/coroutines/channels/ChannelSegment;J)V
return-object v0
.end method
.method public final completeCloseOrCancel()V
.locals 0
.line 1902
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z
return-void
.end method
.method public final dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V
.locals 10
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 810
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
:cond_0
:goto_0
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 814
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v8
iget v2, p0, Lkotlinx/coroutines/channels/BufferedChannel;->capacity:I
int-to-long v2, v2
add-long/2addr v2, v8
.line 815
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v4
invoke-static {v2, v3, v4, v5}, Ljava/lang/Math;->max(JJ)J
move-result-wide v2
cmp-long v2, p1, v2
if-gez v2, :cond_1
return-void
:cond_1
const-wide/16 v2, 0x1
add-long v5, v8, v2
move-object v2, p0
move-wide v3, v8
.line 818
invoke-virtual/range {v1 .. v6}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v1
if-eqz v1, :cond_0
.line 820
sget v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, v1
div-long v2, v8, v2
int-to-long v4, v1
.line 821
rem-long v4, v8, v4
long-to-int v4, v4
.line 824
iget-wide v5, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v1, v5, v2
if-eqz v1, :cond_3
.line 826
invoke-virtual {p0, v2, v3, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_2
goto :goto_0
:cond_2
move-object v0, v1
:cond_3
const/4 v7, 0x0
move-object v2, p0
move-object v3, v0
move-wide v5, v8
.line 836
invoke-virtual/range {v2 .. v7}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 838
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_4
.line 842
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v1
cmp-long v1, v8, v1
if-gez v1, :cond_0
invoke-virtual {v0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_0
.line 847
:cond_4
invoke-virtual {v0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
iget-object v2, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz v2, :cond_0
const/4 v3, 0x2
const/4 v4, 0x0
.line 849
invoke-static {v2, v1, v4, v3, v4}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->callUndeliveredElementCatchingException$default(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlinx/coroutines/internal/UndeliveredElementException;ILjava/lang/Object;)Lkotlinx/coroutines/internal/UndeliveredElementException;
move-result-object v1
if-nez v1, :cond_5
goto :goto_0
:cond_5
throw v1
.end method
.method public final expandBuffer()V
.locals 14
.line 1173
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
move-result v0
if-eqz v0, :cond_0
return-void
:cond_0
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1176
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
:goto_0
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEnd$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1181
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v7
.line 1182
sget v9, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v1, v9
div-long v2, v7, v1
.line 1190
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v4
cmp-long v1, v4, v7
const/4 v10, 0x0
const/4 v11, 0x1
const-wide/16 v12, 0x0
if-gtz v1, :cond_2
.line 1193
iget-wide v4, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v1, v4, v2
if-gez v1, :cond_1
invoke-virtual {v0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object v1
if-eqz v1, :cond_1
.line 1194
invoke-virtual {p0, v2, v3, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->moveSegmentBufferEndToSpecifiedOrLast(JLkotlinx/coroutines/channels/ChannelSegment;)V
.line 1196
:cond_1
invoke-static {p0, v12, v13, v11, v10}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V
return-void
.line 1201
:cond_2
iget-wide v4, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v1, v4, v2
if-eqz v1, :cond_4
move-object v1, p0
move-object v4, v0
move-wide v5, v7
.line 1202
invoke-virtual/range {v1 .. v6}, Lkotlinx/coroutines/channels/BufferedChannel;->findSegmentBufferEnd(JLkotlinx/coroutines/channels/ChannelSegment;J)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_3
goto :goto_0
:cond_3
move-object v0, v1
:cond_4
int-to-long v1, v9
.line 1213
rem-long v1, v7, v1
long-to-int v1, v1
.line 1214
invoke-virtual {p0, v0, v1, v7, v8}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellExpandBuffer(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z
move-result v1
if-eqz v1, :cond_5
.line 1222
invoke-static {p0, v12, v13, v11, v10}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V
return-void
.line 1228
:cond_5
invoke-static {p0, v12, v13, v11, v10}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V
goto :goto_0
.end method
.method public final findSegmentBufferEnd(JLkotlinx/coroutines/channels/ChannelSegment;J)Lkotlinx/coroutines/channels/ChannelSegment;
.locals 15
move-object v6, p0
move-wide/from16 v0, p1
sget-object v2, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 2465
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->createSegmentFunction()Lkotlin/reflect/KFunction;
move-result-object v3
check-cast v3, Lkotlin/jvm/functions/Function2;
move-object/from16 v4, p3
.line 73
:goto_0
invoke-static {v4, v0, v1, v3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
move-result-object v5
.line 74
invoke-static {v5}, Lkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z
move-result v7
if-nez v7, :cond_4
invoke-static {v5}, Lkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
move-result-object v7
:cond_0
:goto_1
invoke-virtual {v2, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v8
check-cast v8, Lkotlinx/coroutines/internal/Segment;
.line 46
iget-wide v9, v8, Lkotlinx/coroutines/internal/Segment;->id:J
iget-wide v11, v7, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v9, v9, v11
if-ltz v9, :cond_1
goto :goto_2
.line 47
:cond_1
invoke-virtual {v7}, Lkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
move-result v9
if-nez v9, :cond_2
goto :goto_0
.line 48
:cond_2
invoke-static {v2, p0, v8, v7}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v9
if-eqz v9, :cond_3
.line 49
invoke-virtual {v8}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v2
if-eqz v2, :cond_4
invoke-virtual {v8}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_2
.line 52
:cond_3
invoke-virtual {v7}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v8
if-eqz v8, :cond_0
invoke-virtual {v7}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_1
.line 2466
:cond_4
:goto_2
invoke-static {v5}, Lkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z
move-result v2
const/4 v7, 0x1
const-wide/16 v8, 0x0
const/4 v10, 0x0
if-eqz v2, :cond_5
.line 2471
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V
.line 2474
invoke-virtual/range {p0 .. p3}, Lkotlinx/coroutines/channels/BufferedChannel;->moveSegmentBufferEndToSpecifiedOrLast(JLkotlinx/coroutines/channels/ChannelSegment;)V
.line 2477
invoke-static {p0, v8, v9, v7, v10}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V
goto :goto_3
.line 2481
:cond_5
invoke-static {v5}, Lkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
move-result-object v2
move-object v11, v2
check-cast v11, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2483
iget-wide v2, v11, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v0, v2, v0
if-lez v0, :cond_7
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEnd$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
const-wide/16 v4, 0x1
add-long v4, p4, v4
.line 2489
sget v12, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v13, v12
mul-long/2addr v13, v2
move-object v1, p0
move-wide v2, v4
move-wide v4, v13
invoke-virtual/range {v0 .. v5}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v0
if-eqz v0, :cond_6
.line 2490
iget-wide v0, v11, Lkotlinx/coroutines/internal/Segment;->id:J
int-to-long v2, v12
mul-long/2addr v0, v2
sub-long v0, v0, p4
invoke-virtual {p0, v0, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V
goto :goto_3
.line 2492
:cond_6
invoke-static {p0, v8, v9, v7, v10}, Lkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V
goto :goto_3
:cond_7
move-object v10, v11
:goto_3
return-object v10
.end method
.method public final findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
.locals 9
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 2416
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->createSegmentFunction()Lkotlin/reflect/KFunction;
move-result-object v1
check-cast v1, Lkotlin/jvm/functions/Function2;
.line 73
:goto_0
invoke-static {p3, p1, p2, v1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
move-result-object v2
.line 74
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z
move-result v3
if-nez v3, :cond_4
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
move-result-object v3
:cond_0
:goto_1
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v4
check-cast v4, Lkotlinx/coroutines/internal/Segment;
.line 46
iget-wide v5, v4, Lkotlinx/coroutines/internal/Segment;->id:J
iget-wide v7, v3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v5, v5, v7
if-ltz v5, :cond_1
goto :goto_2
.line 47
:cond_1
invoke-virtual {v3}, Lkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
move-result v5
if-nez v5, :cond_2
goto :goto_0
.line 48
:cond_2
invoke-static {v0, p0, v4, v3}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v5
if-eqz v5, :cond_3
.line 49
invoke-virtual {v4}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v0
if-eqz v0, :cond_4
invoke-virtual {v4}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_2
.line 52
:cond_3
invoke-virtual {v3}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v4
if-eqz v4, :cond_0
invoke-virtual {v3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_1
.line 2417
:cond_4
:goto_2
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z
move-result v0
const/4 v1, 0x0
if-eqz v0, :cond_5
.line 2422
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V
.line 2428
iget-wide p1, p3, Lkotlinx/coroutines/internal/Segment;->id:J
sget v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, v0
mul-long/2addr p1, v2
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v2
cmp-long p1, p1, v2
if-gez p1, :cond_a
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_5
.line 2433
:cond_5
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
move-result-object p3
check-cast p3, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2435
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
move-result v0
if-nez v0, :cond_8
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v2
sget v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v4, v0
div-long/2addr v2, v4
cmp-long v0, p1, v2
if-gtz v0, :cond_8
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
:cond_6
:goto_3
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Lkotlinx/coroutines/internal/Segment;
.line 46
iget-wide v3, v2, Lkotlinx/coroutines/internal/Segment;->id:J
iget-wide v5, p3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v3, v3, v5
if-gez v3, :cond_8
.line 47
invoke-virtual {p3}, Lkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
move-result v3
if-eqz v3, :cond_8
.line 48
invoke-static {v0, p0, v2, p3}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_7
.line 49
invoke-virtual {v2}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v0
if-eqz v0, :cond_8
invoke-virtual {v2}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_4
.line 52
:cond_7
invoke-virtual {p3}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v2
if-eqz v2, :cond_6
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_3
.line 2439
:cond_8
:goto_4
iget-wide v2, p3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long p1, v2, p1
if-lez p1, :cond_9
.line 2443
sget p1, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v4, p1
mul-long/2addr v2, v4
invoke-virtual {p0, v2, v3}, Lkotlinx/coroutines/channels/BufferedChannel;->updateReceiversCounterIfLower(J)V
.line 2449
iget-wide v2, p3, Lkotlinx/coroutines/internal/Segment;->id:J
int-to-long p1, p1
mul-long/2addr v2, p1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide p1
cmp-long p1, v2, p1
if-gez p1, :cond_a
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_5
:cond_9
move-object v1, p3
:cond_a
:goto_5
return-object v1
.end method
.method public final findSegmentSend(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
.locals 9
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 2361
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->createSegmentFunction()Lkotlin/reflect/KFunction;
move-result-object v1
check-cast v1, Lkotlin/jvm/functions/Function2;
.line 73
:goto_0
invoke-static {p3, p1, p2, v1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;
move-result-object v2
.line 74
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z
move-result v3
if-nez v3, :cond_4
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
move-result-object v3
:cond_0
:goto_1
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v4
check-cast v4, Lkotlinx/coroutines/internal/Segment;
.line 46
iget-wide v5, v4, Lkotlinx/coroutines/internal/Segment;->id:J
iget-wide v7, v3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v5, v5, v7
if-ltz v5, :cond_1
goto :goto_2
.line 47
:cond_1
invoke-virtual {v3}, Lkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
move-result v5
if-nez v5, :cond_2
goto :goto_0
.line 48
:cond_2
invoke-static {v0, p0, v4, v3}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v5
if-eqz v5, :cond_3
.line 49
invoke-virtual {v4}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v0
if-eqz v0, :cond_4
invoke-virtual {v4}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_2
.line 52
:cond_3
invoke-virtual {v3}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result v4
if-eqz v4, :cond_0
invoke-virtual {v3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_1
.line 2362
:cond_4
:goto_2
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z
move-result v0
const/4 v1, 0x0
if-eqz v0, :cond_5
.line 2367
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V
.line 2373
iget-wide p1, p3, Lkotlinx/coroutines/internal/Segment;->id:J
sget v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, v0
mul-long/2addr p1, v2
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v2
cmp-long p1, p1, v2
if-gez p1, :cond_7
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_3
.line 2378
:cond_5
invoke-static {v2}, Lkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;
move-result-object p3
check-cast p3, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2380
iget-wide v2, p3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long p1, v2, p1
if-lez p1, :cond_6
.line 2384
sget p1, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v4, p1
mul-long/2addr v2, v4
invoke-virtual {p0, v2, v3}, Lkotlinx/coroutines/channels/BufferedChannel;->updateSendersCounterIfLower(J)V
.line 2390
iget-wide v2, p3, Lkotlinx/coroutines/internal/Segment;->id:J
int-to-long p1, p1
mul-long/2addr v2, p1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide p1
cmp-long p1, v2, p1
if-gez p1, :cond_7
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_3
:cond_6
move-object v1, p3
:cond_7
:goto_3
return-object v1
.end method
.method public final getBufferEndCounter()J
.locals 2
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEnd$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 72
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
return-wide v0
.end method
.method public final getCloseCause()Ljava/lang/Throwable;
.locals 1
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->_closeCause$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1723
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Throwable;
return-object v0
.end method
.method public final getReceiveException()Ljava/lang/Throwable;
.locals 2
.line 1729
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v0
if-nez v0, :cond_0
new-instance v0, Lkotlinx/coroutines/channels/ClosedReceiveChannelException;
const-string v1, "Channel was closed"
invoke-direct {v0, v1}, Lkotlinx/coroutines/channels/ClosedReceiveChannelException;-><init>(Ljava/lang/String;)V
:cond_0
return-object v0
.end method
.method public final getReceiversCounter$kotlinx_coroutines_core()J
.locals 2
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 71
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
return-wide v0
.end method
.method public final getSendException()Ljava/lang/Throwable;
.locals 2
.line 1726
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v0
if-nez v0, :cond_0
new-instance v0, Lkotlinx/coroutines/channels/ClosedSendChannelException;
const-string v1, "Channel was closed"
invoke-direct {v0, v1}, Lkotlinx/coroutines/channels/ClosedSendChannelException;-><init>(Ljava/lang/String;)V
:cond_0
return-object v0
.end method
.method public final getSendersCounter$kotlinx_coroutines_core()J
.locals 4
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 70
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
const-wide v2, 0xfffffffffffffffL
and-long/2addr v0, v2
return-wide v0
.end method
.method public final hasElements$kotlinx_coroutines_core()Z
.locals 10
:cond_0
:goto_0
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 2249
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2251
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v4
.line 2252
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v2
cmp-long v2, v2, v4
const/4 v3, 0x0
if-gtz v2, :cond_1
return v3
.line 2258
:cond_1
sget v2, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v6, v2
div-long v6, v4, v6
.line 2259
iget-wide v8, v1, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v8, v8, v6
if-eqz v8, :cond_2
.line 2261
invoke-virtual {p0, v6, v7, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_2
.line 2267
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
iget-wide v0, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v0, v0, v6
if-gez v0, :cond_0
return v3
.line 2269
:cond_2
invoke-virtual {v1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
int-to-long v2, v2
.line 2271
rem-long v2, v4, v2
long-to-int v0, v2
.line 2272
invoke-virtual {p0, v1, v0, v4, v5}, Lkotlinx/coroutines/channels/BufferedChannel;->isCellNonEmpty(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z
move-result v0
if-eqz v0, :cond_3
const/4 v0, 0x1
return v0
:cond_3
sget-object v2, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
const-wide/16 v0, 0x1
add-long v6, v4, v0
move-object v3, p0
.line 2274
invoke-virtual/range {v2 .. v7}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
goto :goto_0
.end method
.method public final incCompletedExpandBufferAttempts(J)V
.locals 4
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1370
invoke-virtual {v0, p0, p1, p2}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->addAndGet(Ljava/lang/Object;J)J
move-result-wide p1
const-wide/high16 v0, 0x4000000000000000L # 2.0
and-long/2addr p1, v0
const-wide/16 v2, 0x0
cmp-long p1, p1, v2
if-eqz p1, :cond_0
:goto_0
sget-object p1, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1376
invoke-virtual {p1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide p1
and-long/2addr p1, v0
cmp-long p1, p1, v2
if-eqz p1, :cond_0
goto :goto_0
:cond_0
return-void
.end method
.method public final invokeCloseHandler()V
.locals 3
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->closeHandler$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1809
:cond_0
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
if-nez v1, :cond_1
.line 1813
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
goto :goto_0
.line 1817
:cond_1
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
.line 1810
:goto_0
invoke-static {v0, p0, v1, v2}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_0
if-nez v1, :cond_2
return-void
:cond_2
const/4 v0, 0x1
.line 1822
invoke-static {v1, v0}, Lkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlin/jvm/functions/Function1;
.line 1823
check-cast v1, Lkotlin/jvm/functions/Function1;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v0
invoke-interface {v1, v0}, Lkotlin/jvm/functions/Function1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.end method
.method public invokeOnClose(Lkotlin/jvm/functions/Function1;)V
.locals 4
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->closeHandler$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
const/4 v1, 0x0
.line 1828
invoke-static {v0, p0, v1, p1}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_0
return-void
.line 1830
:cond_0
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 1839
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->closeHandler$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 1843
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v3
invoke-static {v1, p0, v2, v3}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_0
.line 1844
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v0
invoke-interface {p1, v0}, Lkotlin/jvm/functions/Function1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.line 1848
:cond_1
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v1, p1, :cond_2
new-instance p1, Ljava/lang/IllegalStateException;
const-string v0, "Another handler was already registered and successfully invoked"
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
:cond_2
new-instance p1, Ljava/lang/IllegalStateException;
.line 1849
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Another handler is already registered: "
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public final isCellNonEmpty(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z
.locals 4
.line 2295
:cond_0
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
const/4 v1, 0x0
if-eqz v0, :cond_a
.line 2298
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v0, v2, :cond_1
goto :goto_0
.line 2309
:cond_1
sget-object p1, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
const/4 p2, 0x1
if-ne v0, p1, :cond_2
return p2
.line 2311
:cond_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v0, p1, :cond_3
return v1
.line 2313
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v0, p1, :cond_4
return v1
.line 2316
:cond_4
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v0, p1, :cond_5
return v1
.line 2319
:cond_5
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v0, p1, :cond_6
return v1
.line 2323
:cond_6
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v0, p1, :cond_7
return p2
.line 2327
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
if-ne v0, p1, :cond_8
return v1
.line 2338
:cond_8
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v2
cmp-long p1, p3, v2
if-nez p1, :cond_9
move v1, p2
:cond_9
return v1
.line 2300
:cond_a
:goto_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
invoke-virtual {p1, p2, v0, v2}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
.line 2304
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
return v1
.end method
.method public final isClosed(JZ)Z
.locals 6
const/16 v0, 0x3c
shr-long v0, p1, v0
long-to-int v0, v0
const/4 v1, 0x0
if-eqz v0, :cond_3
const/4 v2, 0x1
if-eq v0, v2, :cond_3
const/4 v3, 0x2
const-wide v4, 0xfffffffffffffffL
if-eq v0, v3, :cond_2
const/4 p3, 0x3
if-ne v0, p3, :cond_1
and-long/2addr p1, v4
.line 2219
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->completeCancel(J)V
:cond_0
:goto_0
move v1, v2
goto :goto_1
.line 2222
:cond_1
new-instance p1, Ljava/lang/StringBuilder;
invoke-direct {p1}, Ljava/lang/StringBuilder;-><init>()V
const-string p2, "unexpected close status: "
invoke-virtual {p1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
new-instance p2, Ljava/lang/IllegalStateException;
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p2, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p2
:cond_2
and-long/2addr p1, v4
.line 2209
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment;
if-eqz p3, :cond_0
.line 2213
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->hasElements$kotlinx_coroutines_core()Z
move-result p1
if-nez p1, :cond_3
goto :goto_0
:cond_3
:goto_1
return v1
.end method
.method public isClosedForReceive()Z
.locals 2
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 2188
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
invoke-virtual {p0, v0, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive0(J)Z
move-result v0
return v0
.end method
.method public final isClosedForReceive0(J)Z
.locals 1
const/4 v0, 0x1
.line 2191
invoke-virtual {p0, p1, p2, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z
move-result p1
return p1
.end method
.method public isClosedForSend()Z
.locals 2
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 2181
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
invoke-virtual {p0, v0, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend0(J)Z
move-result v0
return v0
.end method
.method public final isClosedForSend0(J)Z
.locals 1
const/4 v0, 0x0
.line 2184
invoke-virtual {p0, p1, p2, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z
move-result p1
return p1
.end method
.method public isConflatedDropOldest()Z
.locals 1
const/4 v0, 0x0
return v0
.end method
.method public final isRendezvousOrUnlimited()Z
.locals 4
.line 90
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v0
const-wide/16 v2, 0x0
cmp-long v2, v0, v2
if-eqz v2, :cond_1
const-wide v2, 0x7fffffffffffffffL
cmp-long v0, v0, v2
if-nez v0, :cond_0
goto :goto_0
:cond_0
const/4 v0, 0x0
goto :goto_1
:cond_1
:goto_0
const/4 v0, 0x1
:goto_1
return v0
.end method
.method public iterator()Lkotlinx/coroutines/channels/ChannelIterator;
.locals 1
.line 1551
new-instance v0, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
invoke-direct {v0, p0}, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V
return-object v0
.end method
.method public final markAllEmptyCellsAsClosed(Lkotlinx/coroutines/channels/ChannelSegment;)J
.locals 7
.line 1974
:cond_0
sget v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
add-int/lit8 v0, v0, -0x1
:goto_0
const-wide/16 v1, -0x1
const/4 v3, -0x1
if-ge v3, v0, :cond_5
.line 1976
iget-wide v3, p1, Lkotlinx/coroutines/internal/Segment;->id:J
sget v5, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v5, v5
mul-long/2addr v3, v5
int-to-long v5, v0
add-long/2addr v3, v5
.line 1977
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v5
cmp-long v5, v3, v5
if-gez v5, :cond_1
return-wide v1
.line 1980
:cond_1
invoke-virtual {p1, v0}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v1
if-eqz v1, :cond_3
.line 1983
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_2
goto :goto_1
.line 1991
:cond_2
sget-object v2, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
if-ne v1, v2, :cond_4
return-wide v3
.line 1985
:cond_3
:goto_1
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
invoke-virtual {p1, v0, v1, v2}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_1
.line 1986
invoke-virtual {p1}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
:cond_4
add-int/lit8 v0, v0, -0x1
goto :goto_0
.line 1998
:cond_5
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object p1
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
if-nez p1, :cond_0
return-wide v1
.end method
.method public final markCancellationStarted()V
.locals 7
sget-object v6, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
:cond_0
invoke-virtual {v6, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v2
const/16 v0, 0x3c
shr-long v0, v2, v0
long-to-int v0, v0
if-nez v0, :cond_1
const-wide v0, 0xfffffffffffffffL
and-long/2addr v0, v2
const/4 v4, 0x1
.line 1894
invoke-static {v0, v1, v4}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J
move-result-wide v4
move-object v0, v6
move-object v1, p0
.line 1893
invoke-virtual/range {v0 .. v5}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v0
if-eqz v0, :cond_0
:cond_1
return-void
.end method
.method public final markCancelled()V
.locals 7
sget-object v6, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
:cond_0
invoke-virtual {v6, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v2
const-wide v0, 0xfffffffffffffffL
and-long/2addr v0, v2
const/4 v4, 0x3
.line 1882
invoke-static {v0, v1, v4}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J
move-result-wide v4
move-object v0, v6
move-object v1, p0
invoke-virtual/range {v0 .. v5}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v0
if-eqz v0, :cond_0
return-void
.end method
.method public final markClosed()V
.locals 7
sget-object v6, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
:cond_0
invoke-virtual {v6, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v2
const/16 v0, 0x3c
shr-long v0, v2, v0
long-to-int v0, v0
const-wide v4, 0xfffffffffffffffL
if-eqz v0, :cond_2
const/4 v1, 0x1
if-eq v0, v1, :cond_1
return-void
:cond_1
and-long v0, v2, v4
const/4 v4, 0x3
.line 1869
invoke-static {v0, v1, v4}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J
move-result-wide v0
:goto_0
move-wide v4, v0
goto :goto_1
:cond_2
and-long v0, v2, v4
const/4 v4, 0x2
.line 1867
invoke-static {v0, v1, v4}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J
move-result-wide v0
goto :goto_0
:goto_1
move-object v0, v6
move-object v1, p0
.line 1865
invoke-virtual/range {v0 .. v5}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v0
if-eqz v0, :cond_0
return-void
.end method
.method public final moveSegmentBufferEndToSpecifiedOrLast(JLkotlinx/coroutines/channels/ChannelSegment;)V
.locals 4
.line 2513
:goto_0
iget-wide v0, p3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v0, v0, p1
if-gez v0, :cond_1
.line 2514
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
if-nez v0, :cond_0
goto :goto_1
:cond_0
move-object p3, v0
goto :goto_0
.line 2520
:cond_1
:goto_1
invoke-virtual {p3}, Lkotlinx/coroutines/internal/Segment;->isRemoved()Z
move-result p1
if-eqz p1, :cond_3
.line 2521
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object p1
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
if-nez p1, :cond_2
goto :goto_2
:cond_2
move-object p3, p1
goto :goto_1
:cond_3
:goto_2
sget-object p1, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 2526
:cond_4
:goto_3
invoke-virtual {p1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p2
check-cast p2, Lkotlinx/coroutines/internal/Segment;
.line 46
iget-wide v0, p2, Lkotlinx/coroutines/internal/Segment;->id:J
iget-wide v2, p3, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v0, v0, v2
if-ltz v0, :cond_5
goto :goto_4
.line 47
:cond_5
invoke-virtual {p3}, Lkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z
move-result v0
if-nez v0, :cond_6
goto :goto_1
.line 48
:cond_6
invoke-static {p1, p0, p2, p3}, Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_8
.line 49
invoke-virtual {p2}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result p1
if-eqz p1, :cond_7
invoke-virtual {p2}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
:cond_7
:goto_4
return-void
.line 52
:cond_8
invoke-virtual {p3}, Lkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z
move-result p2
if-eqz p2, :cond_4
invoke-virtual {p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V
goto :goto_3
.end method
.method public onClosedIdempotent()V
.locals 0
return-void
.end method
.method public final onClosedReceiveCatchingOnNoWaiterSuspend(Lkotlinx/coroutines/CancellableContinuation;)V
.locals 2
.line 759
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
sget-object v0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v1
invoke-virtual {v0, v1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object v0
invoke-static {v0}, Lkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;
move-result-object v0
invoke-static {v0}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
invoke-interface {p1, v0}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
return-void
.end method
.method public final onClosedReceiveOnNoWaiterSuspend(Lkotlinx/coroutines/CancellableContinuation;)V
.locals 1
.line 721
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiveException()Ljava/lang/Throwable;
move-result-object v0
invoke-static {v0}, Lkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object v0
invoke-static {v0}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
invoke-interface {p1, v0}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
return-void
.end method
.method public final onClosedSend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 4
.line 315
new-instance v0, Lkotlinx/coroutines/CancellableContinuationImpl;
invoke-static {p2}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
move-result-object v1
const/4 v2, 0x1
invoke-direct {v0, v1, v2}, Lkotlinx/coroutines/CancellableContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;I)V
.line 321
invoke-virtual {v0}, Lkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V
iget-object v1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz v1, :cond_0
const/4 v2, 0x2
const/4 v3, 0x0
.line 135
invoke-static {v1, p1, v3, v2, v3}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->callUndeliveredElementCatchingException$default(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlinx/coroutines/internal/UndeliveredElementException;ILjava/lang/Object;)Lkotlinx/coroutines/internal/UndeliveredElementException;
move-result-object p1
if-eqz p1, :cond_0
.line 137
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendException()Ljava/lang/Throwable;
move-result-object v1
invoke-static {p1, v1}, Lkotlin/ExceptionsKt;->addSuppressed(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
.line 220
sget-object v1, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
invoke-static {p1}, Lkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p1
invoke-static {p1}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
invoke-interface {v0, p1}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
goto :goto_0
.line 141
:cond_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendException()Ljava/lang/Throwable;
move-result-object p1
.line 220
sget-object v1, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
invoke-static {p1}, Lkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p1
invoke-static {p1}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
invoke-interface {v0, p1}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
.line 323
:goto_0
invoke-virtual {v0}, Lkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
move-result-object p1
.line 314
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v0
if-ne p1, v0, :cond_1
invoke-static {p2}, Lkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V
:cond_1
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object p2
if-ne p1, p2, :cond_2
return-object p1
.line 324
:cond_2
sget-object p1, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
return-object p1
.end method
.method public final onClosedSendOnNoWaiterSuspend(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
.locals 2
iget-object v0, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz v0, :cond_0
.line 182
invoke-interface {p2}, Lkotlin/coroutines/Continuation;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object v1
invoke-static {v0, p1, v1}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->callUndeliveredElement(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)V
.line 183
:cond_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendException()Ljava/lang/Throwable;
move-result-object p1
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
invoke-static {p1}, Lkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p1
invoke-static {p1}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
invoke-interface {p2, p1}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
return-void
.end method
.method public onReceiveDequeued()V
.locals 0
return-void
.end method
.method public onReceiveEnqueued()V
.locals 0
return-void
.end method
.method public final prepareReceiverForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
.locals 0
.line 716
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V
.line 717
invoke-interface {p1, p2, p3}, Lkotlinx/coroutines/Waiter;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
return-void
.end method
.method public final prepareSenderForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
.locals 1
.line 178
sget v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
add-int/2addr p3, v0
invoke-interface {p1, p2, p3}, Lkotlinx/coroutines/Waiter;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V
return-void
.end method
.method public receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 0
invoke-static {p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->receive$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method public receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 0
invoke-static {p0, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method public final receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 10
instance-of v0, p5, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;
if-eqz v0, :cond_0
move-object v0, p5
check-cast v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;
iget v1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->label:I
const/high16 v2, -0x80000000
and-int v3, v1, v2
if-eqz v3, :cond_0
sub-int/2addr v1, v2
iput v1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->label:I
goto :goto_0
:cond_0
new-instance v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;
invoke-direct {v0, p0, p5}, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V
:goto_0
iget-object p5, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->result:Ljava/lang/Object;
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
.line 742
iget v2, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->label:I
const/4 v3, 0x1
if-eqz v2, :cond_2
if-ne v2, v3, :cond_1
iget-object p1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->L$1:Ljava/lang/Object;
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
iget-object p1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->L$0:Ljava/lang/Object;
check-cast p1, Lkotlinx/coroutines/channels/BufferedChannel;
invoke-static {p5}, Lkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
goto/16 :goto_4
:cond_1
new-instance p1, Ljava/lang/IllegalStateException;
const-string p2, "call to \'resume\' before \'invoke\' with coroutine"
invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
:cond_2
invoke-static {p5}, Lkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
.line 332
iput-object p0, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->L$0:Ljava/lang/Object;
iput-object p1, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->L$1:Ljava/lang/Object;
iput p2, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->I$0:I
iput-wide p3, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->J$0:J
iput v3, v0, Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->label:I
.line 333
invoke-static {v0}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
move-result-object p5
invoke-static {p5}, Lkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
move-result-object p5
.line 747
:try_start_0
new-instance v8, Lkotlinx/coroutines/channels/ReceiveCatching;
const-string v2, "null cannot be cast to non-null type kotlinx.coroutines.CancellableContinuationImpl<kotlinx.coroutines.channels.ChannelResult<E of kotlinx.coroutines.channels.BufferedChannel.receiveCatchingOnNoWaiterSuspend_GKJJFZk$lambda$35>>"
invoke-static {p5, v2}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
invoke-direct {v8, p5}, Lkotlinx/coroutines/channels/ReceiveCatching;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
move-object v2, p0
move-object v3, p1
move v4, p2
move-wide v5, p3
move-object v7, v8
.line 964
invoke-static/range {v2 .. v7}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v2
.line 966
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v3
if-ne v2, v3, :cond_3
.line 967
invoke-static {p0, v8, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
goto/16 :goto_3
:catchall_0
move-exception p1
goto/16 :goto_5
.line 969
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p2
const/4 v9, 0x0
if-ne v2, p2, :cond_d
.line 970
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v2
cmp-long p2, p3, v2
if-gez p2, :cond_4
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 858
:cond_4
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object p1
.line 886
invoke-virtual {p1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
.line 890
:cond_5
:goto_1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
move-result p2
if-eqz p2, :cond_6
.line 754
invoke-static {p0, p5}, Lkotlinx/coroutines/channels/BufferedChannel;->access$onClosedReceiveCatchingOnNoWaiterSuspend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/CancellableContinuation;)V
goto/16 :goto_3
.line 890
:cond_6
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object p2
.line 893
invoke-virtual {p2, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide p2
.line 895
sget p4, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, p4
div-long v2, p2, v2
int-to-long v4, p4
.line 896
rem-long v4, p2, v4
long-to-int p4, v4
.line 899
iget-wide v4, p1, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v4, v4, v2
if-eqz v4, :cond_8
.line 901
invoke-static {p0, v2, v3, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v2
if-nez v2, :cond_7
goto :goto_1
:cond_7
move-object p1, v2
:cond_8
move-object v2, p0
move-object v3, p1
move v4, p4
move-wide v5, p2
move-object v7, v8
.line 908
invoke-static/range {v2 .. v7}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v2
.line 910
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v3
if-ne v2, v3, :cond_9
.line 913
invoke-static {p0, v8, p1, p4}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
goto :goto_3
.line 916
:cond_9
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
if-ne v2, p4, :cond_a
.line 923
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v2
cmp-long p2, p2, v2
if-gez p2, :cond_5
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_1
.line 926
:cond_a
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p2
if-eq v2, p2, :cond_c
.line 935
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 752
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p1, v2}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
invoke-static {p1}, Lkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;
move-result-object p1
iget-object p2, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz p2, :cond_b
invoke-virtual {p5}, Lkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object p3
invoke-static {p2, v2, p3}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->bindCancellationFun(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)Lkotlin/jvm/functions/Function1;
move-result-object v9
:cond_b
:goto_2
invoke-virtual {p5, p1, v9}, Lkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
goto :goto_3
.line 929
:cond_c
new-instance p1, Ljava/lang/IllegalStateException;
const-string p2, "unexpected"
.line 882
invoke-virtual {p2}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p2
invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
.line 979
:cond_d
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 752
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p1, v2}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
invoke-static {p1}, Lkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;
move-result-object p1
iget-object p2, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz p2, :cond_b
invoke-virtual {p5}, Lkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object p3
invoke-static {p2, v2, p3}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->bindCancellationFun(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)Lkotlin/jvm/functions/Function1;
move-result-object v9
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
goto :goto_2
.line 342
:goto_3
invoke-virtual {p5}, Lkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
move-result-object p5
.line 332
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object p1
if-ne p5, p1, :cond_e
invoke-static {v0}, Lkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V
:cond_e
if-ne p5, v1, :cond_f
return-object v1
.line 343
:cond_f
:goto_4
check-cast p5, Lkotlinx/coroutines/channels/ChannelResult;
invoke-virtual {p5}, Lkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object;
move-result-object p1
return-object p1
.line 339
:goto_5
invoke-virtual {p5}, Lkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
.line 340
throw p1
.end method
.method public final receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 8
.line 333
invoke-static {p5}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
move-result-object v0
invoke-static {v0}, Lkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
move-result-object v0
move-object v1, p0
move-object v2, p1
move v3, p2
move-wide v4, p3
move-object v6, v0
.line 964
:try_start_0
invoke-static/range {v1 .. v6}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 966
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_0
.line 967
invoke-static {p0, v0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
goto/16 :goto_2
:catchall_0
move-exception p1
goto/16 :goto_3
.line 969
:cond_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p2
const/4 v7, 0x0
if-ne v1, p2, :cond_b
.line 970
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v1
cmp-long p2, p3, v1
if-gez p2, :cond_1
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 858
:cond_1
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object p1
.line 886
invoke-virtual {p1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
.line 890
:cond_2
:goto_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
move-result p2
if-eqz p2, :cond_3
.line 711
invoke-static {p0, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->access$onClosedReceiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/CancellableContinuation;)V
goto/16 :goto_2
.line 890
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object p2
.line 893
invoke-virtual {p2, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide p2
.line 895
sget p4, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v1, p4
div-long v1, p2, v1
int-to-long v3, p4
.line 896
rem-long v3, p2, v3
long-to-int p4, v3
.line 899
iget-wide v3, p1, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v3, v3, v1
if-eqz v3, :cond_5
.line 901
invoke-static {p0, v1, v2, p1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_4
goto :goto_0
:cond_4
move-object p1, v1
:cond_5
move-object v1, p0
move-object v2, p1
move v3, p4
move-wide v4, p2
move-object v6, v0
.line 908
invoke-static/range {v1 .. v6}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 910
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_7
.line 913
instance-of p2, v0, Lkotlinx/coroutines/Waiter;
if-eqz p2, :cond_6
move-object v7, v0
:cond_6
if-eqz v7, :cond_c
invoke-static {p0, v7, p1, p4}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
goto :goto_2
.line 916
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
if-ne v1, p4, :cond_8
.line 923
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v1
cmp-long p2, p2, v1
if-gez p2, :cond_2
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_0
.line 926
:cond_8
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p2
if-eq v1, p2, :cond_a
.line 935
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
iget-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz p1, :cond_9
.line 708
invoke-virtual {v0}, Lkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object p2
invoke-static {p1, v1, p2}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->bindCancellationFun(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)Lkotlin/jvm/functions/Function1;
move-result-object v7
.line 709
:cond_9
:goto_1
invoke-virtual {v0, v1, v7}, Lkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
goto :goto_2
.line 929
:cond_a
new-instance p1, Ljava/lang/IllegalStateException;
const-string p2, "unexpected"
.line 882
invoke-virtual {p2}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p2
invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
.line 979
:cond_b
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
iget-object p1, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz p1, :cond_9
.line 708
invoke-virtual {v0}, Lkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object p2
invoke-static {p1, v1, p2}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->bindCancellationFun(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)Lkotlin/jvm/functions/Function1;
move-result-object v7
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
goto :goto_1
.line 342
:cond_c
:goto_2
invoke-virtual {v0}, Lkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
move-result-object p1
.line 332
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object p2
if-ne p1, p2, :cond_d
invoke-static {p5}, Lkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V
:cond_d
return-object p1
.line 339
:goto_3
invoke-virtual {v0}, Lkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
.line 340
throw p1
.end method
.method public final removeUnprocessedElements(Lkotlinx/coroutines/channels/ChannelSegment;)V
.locals 11
iget-object v0, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
const/4 v1, 0x0
const/4 v2, 0x1
.line 2021
invoke-static {v1, v2, v1}, Lkotlinx/coroutines/internal/InlineList;->constructor-impl$default(Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)Ljava/lang/Object;
move-result-object v3
.line 2024
:cond_0
sget v4, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
sub-int/2addr v4, v2
:goto_0
const/4 v5, -0x1
if-ge v5, v4, :cond_b
.line 2026
iget-wide v6, p1, Lkotlinx/coroutines/internal/Segment;->id:J
sget v8, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v8, v8
mul-long/2addr v6, v8
int-to-long v8, v4
add-long/2addr v6, v8
.line 2030
:cond_1
invoke-virtual {p1, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v8
.line 2033
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
if-eq v8, v9, :cond_c
.line 2035
sget-object v9, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
if-ne v8, v9, :cond_3
.line 2037
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v9
cmp-long v9, v6, v9
if-ltz v9, :cond_c
.line 2039
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
invoke-virtual {p1, v4, v8, v9}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v8
if-eqz v8, :cond_1
if-eqz v0, :cond_2
.line 2042
invoke-virtual {p1, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v5
.line 2043
invoke-static {v0, v5, v1}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->callUndeliveredElementCatchingException(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlinx/coroutines/internal/UndeliveredElementException;)Lkotlinx/coroutines/internal/UndeliveredElementException;
move-result-object v1
.line 2047
:cond_2
invoke-virtual {p1, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
.line 2048
invoke-virtual {p1}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
goto/16 :goto_4
.line 2053
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
if-eq v8, v9, :cond_a
if-nez v8, :cond_4
goto :goto_3
.line 2062
:cond_4
instance-of v9, v8, Lkotlinx/coroutines/Waiter;
if-nez v9, :cond_7
instance-of v9, v8, Lkotlinx/coroutines/channels/WaiterEB;
if-eqz v9, :cond_5
goto :goto_1
.line 2086
:cond_5
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
if-eq v8, v9, :cond_c
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
if-ne v8, v9, :cond_6
goto :goto_5
.line 2089
:cond_6
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
if-eq v8, v9, :cond_1
goto :goto_4
.line 2064
:cond_7
:goto_1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v9
cmp-long v9, v6, v9
if-ltz v9, :cond_c
.line 2066
instance-of v9, v8, Lkotlinx/coroutines/channels/WaiterEB;
if-eqz v9, :cond_8
move-object v9, v8
check-cast v9, Lkotlinx/coroutines/channels/WaiterEB;
iget-object v9, v9, Lkotlinx/coroutines/channels/WaiterEB;->waiter:Lkotlinx/coroutines/Waiter;
goto :goto_2
.line 2067
:cond_8
move-object v9, v8
check-cast v9, Lkotlinx/coroutines/Waiter;
.line 2069
:goto_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v10
invoke-virtual {p1, v4, v8, v10}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v8
if-eqz v8, :cond_1
if-eqz v0, :cond_9
.line 2072
invoke-virtual {p1, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v5
.line 2073
invoke-static {v0, v5, v1}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->callUndeliveredElementCatchingException(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlinx/coroutines/internal/UndeliveredElementException;)Lkotlinx/coroutines/internal/UndeliveredElementException;
move-result-object v1
.line 2076
:cond_9
invoke-static {v3, v9}, Lkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
.line 2079
invoke-virtual {p1, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
.line 2080
invoke-virtual {p1}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
goto :goto_4
.line 2055
:cond_a
:goto_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v9
invoke-virtual {p1, v4, v8, v9}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v8
if-eqz v8, :cond_1
.line 2057
invoke-virtual {p1}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
:goto_4
add-int/lit8 v4, v4, -0x1
goto/16 :goto_0
.line 2095
:cond_b
invoke-virtual {p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object p1
check-cast p1, Lkotlinx/coroutines/channels/ChannelSegment;
if-nez p1, :cond_0
:cond_c
:goto_5
if-eqz v3, :cond_e
.line 39
instance-of p1, v3, Ljava/util/ArrayList;
if-nez p1, :cond_d
check-cast v3, Lkotlinx/coroutines/Waiter;
.line 2098
invoke-virtual {p0, v3}, Lkotlinx/coroutines/channels/BufferedChannel;->resumeSenderOnCancelledChannel(Lkotlinx/coroutines/Waiter;)V
goto :goto_7
:cond_d
const-string p1, "null cannot be cast to non-null type java.util.ArrayList<E of kotlinx.coroutines.internal.InlineList>{ kotlin.collections.TypeAliasesKt.ArrayList<E of kotlinx.coroutines.internal.InlineList> }"
.line 41
invoke-static {v3, p1}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
check-cast v3, Ljava/util/ArrayList;
.line 42
invoke-virtual {v3}, Ljava/util/ArrayList;->size()I
move-result p1
sub-int/2addr p1, v2
:goto_6
if-ge v5, p1, :cond_e
.line 43
invoke-virtual {v3, p1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/Waiter;
.line 2098
invoke-virtual {p0, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->resumeSenderOnCancelledChannel(Lkotlinx/coroutines/Waiter;)V
add-int/lit8 p1, p1, -0x1
goto :goto_6
:cond_e
:goto_7
if-nez v1, :cond_f
return-void
.line 2100
:cond_f
throw v1
.end method
.method public final resumeReceiverOnClosedChannel(Lkotlinx/coroutines/Waiter;)V
.locals 1
const/4 v0, 0x1
.line 2160
invoke-virtual {p0, p1, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V
return-void
.end method
.method public final resumeSenderOnCancelledChannel(Lkotlinx/coroutines/Waiter;)V
.locals 1
const/4 v0, 0x0
.line 2166
invoke-virtual {p0, p1, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V
return-void
.end method
.method public final resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V
.locals 2
.line 2171
instance-of v0, p1, Lkotlinx/coroutines/CancellableContinuation;
if-eqz v0, :cond_1
check-cast p1, Lkotlin/coroutines/Continuation;
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
if-eqz p2, :cond_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiveException()Ljava/lang/Throwable;
move-result-object p2
goto :goto_0
:cond_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendException()Ljava/lang/Throwable;
move-result-object p2
:goto_0
invoke-static {p2}, Lkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p2
invoke-static {p2}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p2
invoke-interface {p1, p2}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
goto :goto_1
.line 2172
:cond_1
instance-of p2, p1, Lkotlinx/coroutines/channels/ReceiveCatching;
if-eqz p2, :cond_2
check-cast p1, Lkotlinx/coroutines/channels/ReceiveCatching;
iget-object p1, p1, Lkotlinx/coroutines/channels/ReceiveCatching;->cont:Lkotlinx/coroutines/CancellableContinuationImpl;
sget-object p2, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
sget-object p2, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v0
invoke-virtual {p2, v0}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p2
invoke-static {p2}, Lkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;
move-result-object p2
invoke-static {p2}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p2
invoke-interface {p1, p2}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
goto :goto_1
.line 2173
:cond_2
instance-of p2, p1, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
if-eqz p2, :cond_3
check-cast p1, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
invoke-virtual {p1}, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V
:goto_1
return-void
.line 2174
:cond_3
new-instance p2, Ljava/lang/IllegalStateException;
.line 2175
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Unexpected waiter: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p2, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p2
.end method
.method public send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 0
invoke-static {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->send$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method public final sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
.locals 20
move-object/from16 v9, p0
move-object/from16 v0, p3
.line 333
invoke-static/range {p6 .. p6}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
move-result-object v1
invoke-static {v1}, Lkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
move-result-object v10
const/4 v8, 0x0
move-object/from16 v1, p0
move-object/from16 v2, p1
move/from16 v3, p2
move-object/from16 v4, p3
move-wide/from16 v5, p4
move-object v7, v10
.line 374
:try_start_0
invoke-static/range {v1 .. v8}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result v1
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
if-eqz v1, :cond_10
const/4 v11, 0x1
if-eq v1, v11, :cond_f
const/4 v12, 0x2
if-eq v1, v12, :cond_e
const/4 v13, 0x4
if-eq v1, v13, :cond_d
const-string v14, "unexpected"
const/4 v15, 0x5
if-ne v1, v15, :cond_c
.line 390
:try_start_1
invoke-virtual/range {p1 .. p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 244
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v1
.line 273
invoke-virtual {v1, v9}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lkotlinx/coroutines/channels/ChannelSegment;
.line 274
:cond_0
:goto_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v2
.line 277
invoke-virtual {v2, v9}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v2
const-wide v4, 0xfffffffffffffffL
and-long v16, v2, v4
.line 280
invoke-static {v9, v2, v3}, Lkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z
move-result v18
.line 282
sget v2, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v3, v2
div-long v3, v16, v3
int-to-long v5, v2
.line 283
rem-long v5, v16, v5
long-to-int v8, v5
.line 286
iget-wide v5, v1, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v2, v5, v3
if-eqz v2, :cond_3
.line 288
invoke-static {v9, v3, v4, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v2
if-nez v2, :cond_2
if-eqz v18, :cond_0
.line 165
:cond_1
:goto_1
invoke-static {v9, v0, v10}, Lkotlinx/coroutines/channels/BufferedChannel;->access$onClosedSendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
goto/16 :goto_6
:catchall_0
move-exception v0
goto/16 :goto_7
:cond_2
move-object v7, v2
goto :goto_2
:cond_3
move-object v7, v1
:goto_2
move-object/from16 v1, p0
move-object v2, v7
move v3, v8
move-object/from16 v4, p3
move-wide/from16 v5, v16
move-object/from16 p1, v7
move-object v7, v10
move/from16 v19, v8
move/from16 v8, v18
.line 304
invoke-static/range {v1 .. v8}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result v1
if-eqz v1, :cond_b
if-eq v1, v11, :cond_a
if-eq v1, v12, :cond_7
const/4 v2, 0x3
if-eq v1, v2, :cond_6
if-eq v1, v13, :cond_5
if-eq v1, v15, :cond_4
goto :goto_3
.line 341
:cond_4
invoke-virtual/range {p1 .. p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
:goto_3
move-object/from16 v1, p1
goto :goto_0
.line 334
:cond_5
invoke-virtual/range {p0 .. p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v1
cmp-long v1, v16, v1
if-gez v1, :cond_1
invoke-virtual/range {p1 .. p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_1
.line 347
:cond_6
new-instance v0, Ljava/lang/IllegalStateException;
.line 269
invoke-virtual {v14}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
:cond_7
if-eqz v18, :cond_8
.line 323
invoke-virtual/range {p1 .. p1}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
goto :goto_1
.line 326
:cond_8
instance-of v0, v10, Lkotlinx/coroutines/Waiter;
if-eqz v0, :cond_9
move-object v0, v10
goto :goto_4
:cond_9
const/4 v0, 0x0
:goto_4
if-eqz v0, :cond_11
move-object/from16 v2, p1
move/from16 v1, v19
invoke-static {v9, v0, v2, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
goto :goto_6
.line 162
:cond_a
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
invoke-static {v0}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
:goto_5
invoke-interface {v10, v0}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
goto :goto_6
:cond_b
move-object/from16 v2, p1
.line 310
invoke-virtual {v2}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 162
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
invoke-static {v0}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
goto :goto_5
.line 269
:cond_c
new-instance v0, Ljava/lang/IllegalStateException;
.line 399
invoke-virtual {v14}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 386
:cond_d
invoke-virtual/range {p0 .. p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v1
cmp-long v1, p4, v1
if-gez v1, :cond_1
invoke-virtual/range {p1 .. p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto/16 :goto_1
:cond_e
move-object/from16 v0, p1
move/from16 v1, p2
.line 383
invoke-static {v9, v10, v0, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
goto :goto_6
.line 162
:cond_f
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
invoke-static {v0}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
goto :goto_5
:cond_10
move-object/from16 v0, p1
.line 376
invoke-virtual/range {p1 .. p1}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 162
sget-object v0, Lkotlin/Result;->Companion:Lkotlin/Result$Companion;
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
invoke-static {v0}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
:try_end_1
.catchall {:try_start_1 .. :try_end_1} :catchall_0
goto :goto_5
.line 342
:cond_11
:goto_6
invoke-virtual {v10}, Lkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
move-result-object v0
.line 332
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
if-ne v0, v1, :cond_12
invoke-static/range {p6 .. p6}, Lkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V
:cond_12
invoke-static {}, Lkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
move-result-object v1
if-ne v0, v1, :cond_13
return-object v0
.line 343
:cond_13
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
return-object v0
.line 339
:goto_7
invoke-virtual {v10}, Lkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V
.line 340
throw v0
.end method
.method public final shouldSendSuspend(J)Z
.locals 2
.line 604
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend0(J)Z
move-result v0
if-eqz v0, :cond_0
const/4 p1, 0x0
return p1
:cond_0
const-wide v0, 0xfffffffffffffffL
and-long/2addr p1, v0
.line 606
invoke-virtual {p0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z
move-result p1
xor-int/lit8 p1, p1, 0x1
return p1
.end method
.method public toString()Ljava/lang/String;
.locals 16
move-object/from16 v0, p0
.line 2564
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
sget-object v2, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 2566
invoke-virtual {v2, v0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v2
const/16 v4, 0x3c
shr-long/2addr v2, v4
long-to-int v2, v2
const/4 v3, 0x3
const/4 v4, 0x2
if-eq v2, v4, :cond_1
if-eq v2, v3, :cond_0
goto :goto_0
:cond_0
const-string v2, "cancelled,"
.line 2568
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
goto :goto_0
:cond_1
const-string v2, "closed,"
.line 2567
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 2571
:goto_0
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "capacity="
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v5, v0, Lkotlinx/coroutines/channels/BufferedChannel;->capacity:I
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const/16 v5, 0x2c
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v2, "data=["
.line 2573
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
new-array v2, v3, [Lkotlinx/coroutines/channels/ChannelSegment;
sget-object v3, Lkotlinx/coroutines/channels/BufferedChannel;->receiveSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
.line 2574
invoke-virtual {v3, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
const/4 v6, 0x0
aput-object v3, v2, v6
sget-object v3, Lkotlinx/coroutines/channels/BufferedChannel;->sendSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
invoke-virtual {v3, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
const/4 v7, 0x1
aput-object v3, v2, v7
sget-object v3, Lkotlinx/coroutines/channels/BufferedChannel;->bufferEndSegment$FU:Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
invoke-virtual {v3, v0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
aput-object v3, v2, v4
invoke-static {v2}, Lkotlin/collections/CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
move-result-object v2
check-cast v2, Ljava/lang/Iterable;
.line 766
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
.line 857
invoke-interface {v2}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;
move-result-object v2
:cond_2
:goto_1
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v4
if-eqz v4, :cond_3
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v4
move-object v8, v4
check-cast v8, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2575
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v9
if-eq v8, v9, :cond_2
.line 857
invoke-interface {v3, v4}, Ljava/util/Collection;->add(Ljava/lang/Object;)Z
goto :goto_1
.line 2310
:cond_3
invoke-interface {v3}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;
move-result-object v2
.line 2311
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v3
if-eqz v3, :cond_1b
.line 2312
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
.line 2313
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v4
if-nez v4, :cond_4
goto :goto_2
.line 2314
:cond_4
move-object v4, v3
check-cast v4, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2576
iget-wide v8, v4, Lkotlinx/coroutines/internal/Segment;->id:J
.line 2316
:cond_5
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v4
.line 2317
move-object v10, v4
check-cast v10, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2576
iget-wide v10, v10, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v12, v8, v10
if-lez v12, :cond_6
move-object v3, v4
move-wide v8, v10
.line 2322
:cond_6
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v4
if-nez v4, :cond_5
.line 2576
:goto_2
check-cast v3, Lkotlinx/coroutines/channels/ChannelSegment;
.line 2577
invoke-virtual/range {p0 .. p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v10
.line 2578
invoke-virtual/range {p0 .. p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v12
.line 2581
:goto_3
sget v2, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
move v4, v6
:goto_4
if-ge v4, v2, :cond_17
.line 2582
iget-wide v8, v3, Lkotlinx/coroutines/internal/Segment;->id:J
sget v14, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v14, v14
mul-long/2addr v8, v14
int-to-long v14, v4
add-long/2addr v8, v14
cmp-long v14, v8, v12
if-ltz v14, :cond_7
cmp-long v15, v8, v10
if-gez v15, :cond_18
.line 2584
:cond_7
invoke-virtual {v3, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v15
.line 2585
invoke-virtual {v3, v4}, Lkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v6
.line 2587
instance-of v7, v15, Lkotlinx/coroutines/CancellableContinuation;
if-eqz v7, :cond_a
cmp-long v7, v8, v10
if-gez v7, :cond_8
if-ltz v14, :cond_8
const-string v7, "receive"
goto/16 :goto_6
:cond_8
if-gez v14, :cond_9
if-ltz v7, :cond_9
const-string v7, "send"
goto/16 :goto_6
:cond_9
const-string v7, "cont"
goto/16 :goto_6
.line 2601
:cond_a
instance-of v7, v15, Lkotlinx/coroutines/channels/ReceiveCatching;
if-eqz v7, :cond_b
const-string v7, "receiveCatching"
goto/16 :goto_6
.line 2603
:cond_b
instance-of v7, v15, Lkotlinx/coroutines/channels/WaiterEB;
if-eqz v7, :cond_c
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "EB("
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const/16 v8, 0x29
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
goto :goto_6
.line 2604
:cond_c
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_d
goto :goto_5
:cond_d
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_e
:goto_5
const-string v7, "resuming_sender"
goto :goto_6
:cond_e
if-nez v15, :cond_f
goto/16 :goto_7
.line 2605
:cond_f
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_10
goto/16 :goto_7
:cond_10
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_11
goto :goto_7
:cond_11
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_12
goto :goto_7
:cond_12
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_13
goto :goto_7
:cond_13
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_14
goto :goto_7
:cond_14
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v7
invoke-static {v15, v7}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v7
if-nez v7, :cond_16
.line 2606
invoke-virtual {v15}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v7
:goto_6
if-eqz v6, :cond_15
.line 2609
new-instance v8, Ljava/lang/StringBuilder;
invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
const/16 v9, 0x28
invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v8, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v8, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v8, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string v6, "),"
invoke-virtual {v8, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
goto :goto_7
.line 2611
:cond_15
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
:cond_16
:goto_7
add-int/lit8 v4, v4, 0x1
const/4 v6, 0x0
const/4 v7, 0x1
goto/16 :goto_4
.line 2615
:cond_17
invoke-virtual {v3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;
move-result-object v2
move-object v3, v2
check-cast v3, Lkotlinx/coroutines/channels/ChannelSegment;
if-nez v3, :cond_1a
.line 2617
:cond_18
invoke-static {v1}, Lkotlin/text/StringsKt;->last(Ljava/lang/CharSequence;)C
move-result v2
if-ne v2, v5, :cond_19
invoke-virtual {v1}, Ljava/lang/StringBuilder;->length()I
move-result v2
const/4 v4, 0x1
sub-int/2addr v2, v4
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->deleteCharAt(I)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, "this.deleteCharAt(index)"
invoke-static {v2, v3}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
:cond_19
const-string v2, "]"
.line 2618
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 2620
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
return-object v1
:cond_1a
const/4 v6, 0x0
const/4 v7, 0x1
goto/16 :goto_3
.line 2311
:cond_1b
new-instance v1, Ljava/util/NoSuchElementException;
invoke-direct {v1}, Ljava/util/NoSuchElementException;-><init>()V
throw v1
.end method
.method public tryReceive-PtdJZtk()Ljava/lang/Object;
.locals 11
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 764
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
sget-object v2, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 765
invoke-virtual {v2, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v2
.line 767
invoke-virtual {p0, v2, v3}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive0(J)Z
move-result v4
if-eqz v4, :cond_0
.line 768
sget-object v0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v1
invoke-virtual {v0, v1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object v0
return-object v0
:cond_0
const-wide v4, 0xfffffffffffffffL
and-long/2addr v2, v4
cmp-long v0, v0, v2
if-ltz v0, :cond_1
.line 772
sget-object v0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {v0}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object;
move-result-object v0
return-object v0
.line 783
:cond_1
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v0
.line 858
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v1
.line 886
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lkotlinx/coroutines/channels/ChannelSegment;
.line 890
:goto_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z
move-result v2
if-eqz v2, :cond_2
.line 796
sget-object v0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;
move-result-object v1
invoke-virtual {v0, v1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object v0
goto/16 :goto_3
.line 890
:cond_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v2
.line 893
invoke-virtual {v2, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v7
.line 895
sget v2, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v3, v2
div-long v3, v7, v3
int-to-long v5, v2
.line 896
rem-long v5, v7, v5
long-to-int v9, v5
.line 899
iget-wide v5, v1, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v2, v5, v3
if-eqz v2, :cond_4
.line 901
invoke-static {p0, v3, v4, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v2
if-nez v2, :cond_3
goto :goto_0
:cond_3
move-object v10, v2
goto :goto_1
:cond_4
move-object v10, v1
:goto_1
move-object v1, p0
move-object v2, v10
move v3, v9
move-wide v4, v7
move-object v6, v0
.line 908
invoke-static/range {v1 .. v6}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 910
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_7
.line 913
instance-of v1, v0, Lkotlinx/coroutines/Waiter;
if-eqz v1, :cond_5
check-cast v0, Lkotlinx/coroutines/Waiter;
goto :goto_2
:cond_5
const/4 v0, 0x0
:goto_2
if-eqz v0, :cond_6
invoke-static {p0, v0, v10, v9}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
.line 791
:cond_6
invoke-virtual {p0, v7, v8}, Lkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V
.line 792
invoke-virtual {v10}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
.line 793
sget-object v0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {v0}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object;
move-result-object v0
goto :goto_3
.line 916
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v2
if-ne v1, v2, :cond_9
.line 923
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J
move-result-wide v1
cmp-long v1, v7, v1
if-gez v1, :cond_8
invoke-virtual {v10}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
:cond_8
move-object v1, v10
goto :goto_0
.line 926
:cond_9
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v0
if-eq v1, v0, :cond_a
.line 935
invoke-virtual {v10}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
.line 785
sget-object v0, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {v0, v1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
:goto_3
return-object v0
.line 929
:cond_a
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "unexpected"
.line 882
invoke-virtual {v1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public final tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z
.locals 4
.line 636
instance-of v0, p1, Lkotlinx/coroutines/channels/ReceiveCatching;
const/4 v1, 0x0
if-eqz v0, :cond_1
const-string v0, "null cannot be cast to non-null type kotlinx.coroutines.channels.ReceiveCatching<E of kotlinx.coroutines.channels.BufferedChannel>"
.line 637
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
check-cast p1, Lkotlinx/coroutines/channels/ReceiveCatching;
.line 638
iget-object v0, p1, Lkotlinx/coroutines/channels/ReceiveCatching;->cont:Lkotlinx/coroutines/CancellableContinuationImpl;
sget-object v2, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {v2, p2}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v2
invoke-static {v2}, Lkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;
move-result-object v2
iget-object v3, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz v3, :cond_0
iget-object p1, p1, Lkotlinx/coroutines/channels/ReceiveCatching;->cont:Lkotlinx/coroutines/CancellableContinuationImpl;
invoke-virtual {p1}, Lkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object p1
invoke-static {v3, p2, p1}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->bindCancellationFun(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)Lkotlin/jvm/functions/Function1;
move-result-object v1
:cond_0
invoke-static {v0, v2, v1}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
move-result p1
goto :goto_0
.line 640
:cond_1
instance-of v0, p1, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
if-eqz v0, :cond_2
const-string v0, "null cannot be cast to non-null type kotlinx.coroutines.channels.BufferedChannel.BufferedChannelIterator<E of kotlinx.coroutines.channels.BufferedChannel>"
.line 641
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
check-cast p1, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;
.line 642
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z
move-result p1
goto :goto_0
.line 644
:cond_2
instance-of v0, p1, Lkotlinx/coroutines/CancellableContinuation;
if-eqz v0, :cond_4
const-string v0, "null cannot be cast to non-null type kotlinx.coroutines.CancellableContinuation<E of kotlinx.coroutines.channels.BufferedChannel>"
.line 645
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
check-cast p1, Lkotlinx/coroutines/CancellableContinuation;
iget-object v0, p0, Lkotlinx/coroutines/channels/BufferedChannel;->onUndeliveredElement:Lkotlin/jvm/functions/Function1;
if-eqz v0, :cond_3
.line 646
invoke-interface {p1}, Lkotlin/coroutines/Continuation;->getContext()Lkotlin/coroutines/CoroutineContext;
move-result-object v1
invoke-static {v0, p2, v1}, Lkotlinx/coroutines/internal/OnUndeliveredElementKt;->bindCancellationFun(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;)Lkotlin/jvm/functions/Function1;
move-result-object v1
:cond_3
invoke-static {p1, p2, v1}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z
move-result p1
:goto_0
return p1
:cond_4
new-instance p2, Ljava/lang/IllegalStateException;
.line 648
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Unexpected receiver type: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p2, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p2
.end method
.method public final tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z
.locals 1
.line 1148
instance-of p2, p1, Lkotlinx/coroutines/CancellableContinuation;
if-eqz p2, :cond_0
const-string p2, "null cannot be cast to non-null type kotlinx.coroutines.CancellableContinuation<kotlin.Unit>"
.line 1150
invoke-static {p1, p2}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
check-cast p1, Lkotlinx/coroutines/CancellableContinuation;
.line 1151
sget-object p2, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
const/4 p3, 0x2
const/4 v0, 0x0
invoke-static {p1, p2, v0, p3, v0}, Lkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Z
move-result p1
return p1
.line 1162
:cond_0
new-instance p2, Ljava/lang/IllegalStateException;
.line 1163
new-instance p3, Ljava/lang/StringBuilder;
invoke-direct {p3}, Ljava/lang/StringBuilder;-><init>()V
const-string v0, "Unexpected waiter: "
invoke-virtual {p3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {p3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p2, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p2
.end method
.method public trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
.locals 14
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 188
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v0
invoke-virtual {p0, v0, v1}, Lkotlinx/coroutines/channels/BufferedChannel;->shouldSendSuspend(J)Z
move-result v0
if-eqz v0, :cond_0
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object;
move-result-object p1
return-object p1
.line 197
:cond_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v8
.line 244
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
move-result-object v0
.line 273
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lkotlinx/coroutines/channels/ChannelSegment;
.line 274
:cond_1
:goto_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-result-object v1
.line 277
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->getAndIncrement(Ljava/lang/Object;)J
move-result-wide v1
const-wide v3, 0xfffffffffffffffL
and-long v9, v1, v3
.line 280
invoke-static {p0, v1, v2}, Lkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z
move-result v11
.line 282
sget v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->SEGMENT_SIZE:I
int-to-long v2, v1
div-long v2, v9, v2
int-to-long v4, v1
.line 283
rem-long v4, v9, v4
long-to-int v12, v4
.line 286
iget-wide v4, v0, Lkotlinx/coroutines/internal/Segment;->id:J
cmp-long v1, v4, v2
if-eqz v1, :cond_4
.line 288
invoke-static {p0, v2, v3, v0}, Lkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;
move-result-object v1
if-nez v1, :cond_3
if-eqz v11, :cond_1
.line 209
:cond_2
:goto_1
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getSendException()Ljava/lang/Throwable;
move-result-object v0
invoke-virtual {p1, v0}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;
move-result-object p1
goto/16 :goto_6
:cond_3
move-object v13, v1
goto :goto_2
:cond_4
move-object v13, v0
:goto_2
move-object v0, p0
move-object v1, v13
move v2, v12
move-object v3, p1
move-wide v4, v9
move-object v6, v8
move v7, v11
.line 304
invoke-static/range {v0 .. v7}, Lkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result v0
if-eqz v0, :cond_d
const/4 v1, 0x1
if-eq v0, v1, :cond_c
const/4 v1, 0x2
if-eq v0, v1, :cond_8
const/4 v1, 0x3
if-eq v0, v1, :cond_7
const/4 v1, 0x4
if-eq v0, v1, :cond_6
const/4 v1, 0x5
if-eq v0, v1, :cond_5
goto :goto_3
.line 341
:cond_5
invoke-virtual {v13}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
:goto_3
move-object v0, v13
goto :goto_0
.line 334
:cond_6
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J
move-result-wide v0
cmp-long p1, v9, v0
if-gez p1, :cond_2
invoke-virtual {v13}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_1
.line 347
:cond_7
new-instance p1, Ljava/lang/IllegalStateException;
const-string v0, "unexpected"
.line 269
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
:cond_8
if-eqz v11, :cond_9
.line 323
invoke-virtual {v13}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
goto :goto_1
.line 326
:cond_9
instance-of p1, v8, Lkotlinx/coroutines/Waiter;
if-eqz p1, :cond_a
check-cast v8, Lkotlinx/coroutines/Waiter;
goto :goto_4
:cond_a
const/4 v8, 0x0
:goto_4
if-eqz v8, :cond_b
invoke-static {p0, v8, v13, v12}, Lkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V
.line 205
:cond_b
invoke-virtual {v13}, Lkotlinx/coroutines/internal/Segment;->onSlotCleaned()V
.line 206
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
invoke-virtual {p1}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object;
move-result-object p1
goto :goto_6
.line 200
:cond_c
:goto_5
sget-object p1, Lkotlinx/coroutines/channels/ChannelResult;->Companion:Lkotlinx/coroutines/channels/ChannelResult$Companion;
sget-object v0, Lkotlin/Unit;->INSTANCE:Lkotlin/Unit;
invoke-virtual {p1, v0}, Lkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
goto :goto_6
.line 310
:cond_d
invoke-virtual {v13}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V
goto :goto_5
:goto_6
return-object p1
.end method
.method public final updateCellExpandBuffer(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z
.locals 3
.line 1245
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
.line 1246
instance-of v1, v0, Lkotlinx/coroutines/Waiter;
if-eqz v1, :cond_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1254
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v1
cmp-long v1, p3, v1
if-ltz v1, :cond_1
.line 1260
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_1
.line 1261
invoke-virtual {p0, v0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z
move-result p3
if-eqz p3, :cond_0
.line 1264
sget-object p3, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
const/4 p1, 0x1
goto :goto_0
.line 1268
:cond_0
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
const/4 p3, 0x0
.line 1269
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
move p1, p3
:goto_0
return p1
.line 1275
:cond_1
invoke-virtual {p0, p1, p2, p3, p4}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellExpandBufferSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z
move-result p1
return p1
.end method
.method public final updateCellExpandBufferSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z
.locals 6
.line 1291
:cond_0
:goto_0
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
.line 1294
instance-of v1, v0, Lkotlinx/coroutines/Waiter;
const/4 v2, 0x0
const/4 v3, 0x1
if-eqz v1, :cond_3
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1302
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v4
cmp-long v1, p3, v4
if-gez v1, :cond_1
.line 1313
new-instance v1, Lkotlinx/coroutines/channels/WaiterEB;
move-object v2, v0
check-cast v2, Lkotlinx/coroutines/Waiter;
invoke-direct {v1, v2}, Lkotlinx/coroutines/channels/WaiterEB;-><init>(Lkotlinx/coroutines/Waiter;)V
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
return v3
.line 1321
:cond_1
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_0
.line 1322
invoke-virtual {p0, v0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z
move-result p3
if-eqz p3, :cond_2
.line 1325
sget-object p3, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
move v2, v3
goto :goto_1
.line 1329
:cond_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
.line 1330
invoke-virtual {p1, p2, v2}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
:goto_1
return v2
.line 1337
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_4
return v2
:cond_4
if-nez v0, :cond_5
.line 1343
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
return v3
.line 1346
:cond_5
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
if-ne v0, v1, :cond_6
return v3
.line 1348
:cond_6
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-eq v0, v1, :cond_a
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-eq v0, v1, :cond_a
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_7
goto :goto_2
.line 1351
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_8
return v3
.line 1355
:cond_8
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_9
goto :goto_0
:cond_9
new-instance p1, Ljava/lang/IllegalStateException;
.line 1356
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string p3, "Unexpected cell state: "
invoke-virtual {p2, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
invoke-virtual {p2}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object p2
invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
:cond_a
:goto_2
return v3
.end method
.method public final updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
.locals 5
.line 999
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
if-nez v0, :cond_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1007
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v1
const-wide v3, 0xfffffffffffffffL
and-long/2addr v1, v3
cmp-long v1, p3, v1
if-ltz v1, :cond_2
if-nez p5, :cond_0
.line 1013
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.line 1016
:cond_0
invoke-virtual {p1, p2, v0, p5}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2
.line 1019
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1020
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.line 1025
:cond_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
if-ne v0, v1, :cond_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2
.line 1027
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1028
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object p1
return-object p1
.line 1031
:cond_2
invoke-virtual/range {p0 .. p5}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellReceiveSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method public final updateCellReceiveSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;
.locals 5
.line 1048
:cond_0
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
if-eqz v0, :cond_9
.line 1051
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_1
goto/16 :goto_1
.line 1085
:cond_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
if-ne v0, v1, :cond_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
.line 1087
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1088
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object p1
return-object p1
.line 1091
:cond_2
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.line 1094
:cond_3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_4
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.line 1096
:cond_4
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-ne v0, v1, :cond_5
.line 1100
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1101
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.line 1108
:cond_5
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
if-eq v0, v1, :cond_0
.line 1115
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_0
.line 1117
instance-of p3, v0, Lkotlinx/coroutines/channels/WaiterEB;
if-eqz p3, :cond_6
.line 1119
check-cast v0, Lkotlinx/coroutines/channels/WaiterEB;
iget-object v0, v0, Lkotlinx/coroutines/channels/WaiterEB;->waiter:Lkotlinx/coroutines/Waiter;
.line 1120
:cond_6
invoke-virtual {p0, v0, p1, p2}, Lkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z
move-result p4
if-eqz p4, :cond_7
.line 1128
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
.line 1129
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1130
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object p1
goto :goto_0
.line 1136
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
invoke-virtual {p1, p2, p4}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
const/4 p4, 0x0
.line 1137
invoke-virtual {p1, p2, p4}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
if-eqz p3, :cond_8
.line 1138
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1139
:cond_8
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
:goto_0
return-object p1
:cond_9
:goto_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1056
invoke-virtual {v1, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v1
const-wide v3, 0xfffffffffffffffL
and-long/2addr v1, v3
cmp-long v1, p3, v1
if-gez v1, :cond_a
.line 1061
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v1
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
.line 1065
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1066
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
:cond_a
if-nez p5, :cond_b
.line 1073
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.line 1076
:cond_b
invoke-virtual {p1, p2, v0, p5}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
.line 1079
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V
.line 1080
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p1
return-object p1
.end method
.method public final updateCellSend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
.locals 3
.line 422
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V
if-eqz p7, :cond_0
.line 423
invoke-virtual/range {p0 .. p7}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result p1
return p1
.line 425
:cond_0
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
const/4 v1, 0x1
if-nez v0, :cond_3
.line 432
invoke-virtual {p0, p4, p5}, Lkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z
move-result v0
const/4 v2, 0x0
if-eqz v0, :cond_1
.line 434
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
invoke-virtual {p1, p2, v2, v0}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_6
return v1
:cond_1
if-nez p6, :cond_2
const/4 p1, 0x3
return p1
.line 448
:cond_2
invoke-virtual {p1, p2, v2, p6}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_6
const/4 p1, 0x2
return p1
.line 453
:cond_3
instance-of v2, v0, Lkotlinx/coroutines/Waiter;
if-eqz v2, :cond_6
.line 456
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
.line 458
invoke-virtual {p0, v0, p3}, Lkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result p3
if-eqz p3, :cond_4
.line 460
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
.line 461
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V
const/4 p1, 0x0
goto :goto_0
.line 468
:cond_4
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->getAndSetState$kotlinx_coroutines_core(ILjava/lang/Object;)Ljava/lang/Object;
move-result-object p3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
if-eq p3, p4, :cond_5
.line 469
invoke-virtual {p1, p2, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
:cond_5
const/4 p1, 0x5
:goto_0
return p1
.line 475
:cond_6
invoke-virtual/range {p0 .. p7}, Lkotlinx/coroutines/channels/BufferedChannel;->updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
move-result p1
return p1
.end method
.method public final updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I
.locals 5
.line 499
:cond_0
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;
move-result-object v0
const/4 v1, 0x4
const/4 v2, 0x0
const/4 v3, 0x1
if-nez v0, :cond_4
.line 506
invoke-virtual {p0, p4, p5}, Lkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z
move-result v0
const/4 v4, 0x0
if-eqz v0, :cond_1
if-nez p7, :cond_1
.line 508
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
invoke-virtual {p1, p2, v4, v0}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
return v3
:cond_1
if-eqz p7, :cond_2
.line 519
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v0
invoke-virtual {p1, p2, v4, v0}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
.line 520
invoke-virtual {p1, p2, v2}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
return v1
:cond_2
if-nez p6, :cond_3
const/4 p1, 0x3
return p1
.line 526
:cond_3
invoke-virtual {p1, p2, v4, p6}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
const/4 p1, 0x2
return p1
.line 531
:cond_4
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object v4
if-ne v0, v4, :cond_5
.line 533
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannelKt;->BUFFERED:Lkotlinx/coroutines/internal/Symbol;
invoke-virtual {p1, p2, v0, v1}, Lkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
return v3
.line 539
:cond_5
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
const/4 p5, 0x5
if-ne v0, p4, :cond_6
.line 541
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
return p5
.line 545
:cond_6
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
if-ne v0, p4, :cond_7
.line 547
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
return p5
.line 551
:cond_7
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
if-ne v0, p4, :cond_8
.line 555
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
.line 556
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V
return v1
.line 564
:cond_8
invoke-virtual {p1, p2}, Lkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V
.line 568
instance-of p4, v0, Lkotlinx/coroutines/channels/WaiterEB;
if-eqz p4, :cond_9
check-cast v0, Lkotlinx/coroutines/channels/WaiterEB;
iget-object v0, v0, Lkotlinx/coroutines/channels/WaiterEB;->waiter:Lkotlinx/coroutines/Waiter;
.line 570
:cond_9
invoke-virtual {p0, v0, p3}, Lkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result p3
if-eqz p3, :cond_a
.line 572
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V
.line 573
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V
goto :goto_0
.line 580
:cond_a
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p3
invoke-virtual {p1, p2, p3}, Lkotlinx/coroutines/channels/ChannelSegment;->getAndSetState$kotlinx_coroutines_core(ILjava/lang/Object;)Ljava/lang/Object;
move-result-object p3
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;
move-result-object p4
if-eq p3, p4, :cond_b
.line 581
invoke-virtual {p1, p2, v3}, Lkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V
:cond_b
move v2, p5
:goto_0
return v2
.end method
.method public final updateReceiversCounterIfLower(J)V
.locals 7
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
:cond_0
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v3
cmp-long v1, v3, p1
if-ltz v1, :cond_1
return-void
:cond_1
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->receivers$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-object v2, p0
move-wide v5, p1
.line 2555
invoke-virtual/range {v1 .. v6}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v1
if-eqz v1, :cond_0
return-void
.end method
.method public final updateSendersCounterIfLower(J)V
.locals 7
sget-object v0, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
:cond_0
invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v3
const-wide v1, 0xfffffffffffffffL
and-long/2addr v1, v3
cmp-long v5, v1, p1
if-ltz v5, :cond_1
return-void
:cond_1
const/16 v5, 0x3c
shr-long v5, v3, v5
long-to-int v5, v5
.line 2541
invoke-static {v1, v2, v5}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J
move-result-wide v5
sget-object v1, Lkotlinx/coroutines/channels/BufferedChannel;->sendersAndCloseStatus$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
move-object v2, p0
.line 2542
invoke-virtual/range {v1 .. v6}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result v1
if-eqz v1, :cond_0
return-void
.end method
.method public final waitExpandBufferCompletion$kotlinx_coroutines_core(J)V
.locals 13
.line 1393
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z
move-result v0
if-eqz v0, :cond_0
return-void
.line 1397
:cond_0
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v0
cmp-long v0, v0, p1
if-lez v0, :cond_0
.line 1402
invoke-static {}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I
move-result p1
const/4 v0, 0x0
move p2, v0
:goto_0
const-wide v1, 0x3fffffffffffffffL # 1.9999999999999998
if-ge p2, p1, :cond_2
.line 1404
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v3
sget-object v5, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1406
invoke-virtual {v5, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v5
and-long/2addr v1, v5
cmp-long v1, v3, v1
if-nez v1, :cond_1
.line 1412
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v1
cmp-long v1, v3, v1
if-nez v1, :cond_1
return-void
:cond_1
add-int/lit8 p2, p2, 0x1
goto :goto_0
:cond_2
sget-object v9, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1402
:cond_3
invoke-virtual {v9, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v5
and-long p1, v5, v1
const/4 v10, 0x1
.line 1416
invoke-static {p1, p2, v10}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructEBCompletedAndPauseFlag(JZ)J
move-result-wide v7
move-object v3, v9
move-object v4, p0
invoke-virtual/range {v3 .. v8}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result p1
if-eqz p1, :cond_3
.line 1421
:cond_4
:goto_1
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide p1
sget-object v9, Lkotlinx/coroutines/channels/BufferedChannel;->completedExpandBuffersAndPauseFlag$FU:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
.line 1424
invoke-virtual {v9, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v5
and-long v3, v5, v1
const-wide/high16 v7, 0x4000000000000000L # 2.0
and-long/2addr v7, v5
const-wide/16 v11, 0x0
cmp-long v7, v7, v11
if-eqz v7, :cond_5
move v7, v10
goto :goto_2
:cond_5
move v7, v0
:goto_2
cmp-long v8, p1, v3
if-nez v8, :cond_7
.line 1430
invoke-virtual {p0}, Lkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J
move-result-wide v11
cmp-long p1, p1, v11
if-nez p1, :cond_7
:cond_6
invoke-virtual {v9, p0}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->get(Ljava/lang/Object;)J
move-result-wide v5
and-long p1, v5, v1
.line 1433
invoke-static {p1, p2, v0}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructEBCompletedAndPauseFlag(JZ)J
move-result-wide v7
move-object v3, v9
move-object v4, p0
invoke-virtual/range {v3 .. v8}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
move-result p1
if-eqz p1, :cond_6
return-void
:cond_7
if-nez v7, :cond_4
.line 1443
invoke-static {v3, v4, v10}, Lkotlinx/coroutines/channels/BufferedChannelKt;->access$constructEBCompletedAndPauseFlag(JZ)J
move-result-wide v7
move-object v3, v9
move-object v4, p0
invoke-virtual/range {v3 .. v8}, Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
goto :goto_1
.end method