in crumb-compiler/src/main/kotlin/com/uber/crumb/internal/wire/ProtoReader.kt [73:86]
fun beginMessage(): Long {
check(state == STATE_LENGTH_DELIMITED) { "Unexpected call to beginMessage()" }
if (++recursionDepth > RECURSION_LIMIT) {
throw IOException("Wire recursion limit exceeded")
}
// Allocate a buffer to store unknown fields encountered at this recursion level.
if (recursionDepth > bufferStack.size) bufferStack += Buffer()
// Give the pushed limit to the caller to hold. The value is returned in endMessage() where we
// resume using it as our limit.
val token = pushedLimit
pushedLimit = -1L
state = STATE_TAG
return token
}