Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.utils.indexBasedForEach

fun eliminateDeadDeclarations(modules: List<IrModuleFragment>, context: WasmBackendContext, dceDumpNameCache: DceDumpNameCache) {
val printReachabilityInfo =
Expand Down Expand Up @@ -51,7 +52,7 @@ private fun buildRoots(modules: List<IrModuleFragment>, context: WasmBackendCont
}

modules.onAllFiles {
declarations.forEach { declaration ->
declarations.indexBasedForEach { declaration ->
when (declaration) {
is IrFunction -> {
if (declaration.isExported()) {
Expand Down Expand Up @@ -106,8 +107,8 @@ private fun buildRoots(modules: List<IrModuleFragment>, context: WasmBackendCont
}

private inline fun List<IrModuleFragment>.onAllFiles(body: IrFile.() -> Unit) {
forEach { module ->
module.files.forEach { file ->
indexBasedForEach { module ->
module.files.indexBasedForEach { file ->
file.body()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.erasedUpperBound
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import org.jetbrains.kotlin.utils.indexBasedForEach

internal class WasmUsefulDeclarationProcessor(
override val context: WasmBackendContext,
Expand Down Expand Up @@ -211,7 +212,7 @@ internal class WasmUsefulDeclarationProcessor(
val isIntrinsic = irFunction.hasWasmNoOpCastAnnotation() || irFunction.getWasmOpAnnotation() != null
if (isIntrinsic) return

irFunction.getEffectiveValueParameters().forEach { it.enqueueValueParameterType(irFunction) }
irFunction.getEffectiveValueParameters().indexBasedForEach { it.enqueueValueParameterType(irFunction) }
irFunction.returnType.enqueueType(irFunction, "function return type")

kotlinClosureToJsClosureConvertFunToKotlinClosureCallFun[irFunction.fileOrNull]?.get(irFunction)?.enqueue(
Expand All @@ -236,7 +237,7 @@ internal class WasmUsefulDeclarationProcessor(

// Primitive constructors has no body, since that such constructors implicitly initialize all fields, so we have to preserve them
if (irConstructor.hasWasmPrimitiveConstructorAnnotation()) {
constructedClass.declarations.forEach { declaration ->
constructedClass.declarations.indexBasedForEach { declaration ->
if (declaration is IrField) {
declaration.enqueue(constructedClass, "preserve all fields for primitive constructors")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.ir.backend.js.utils.typeScriptInnerClassReference
import org.jetbrains.kotlin.ir.backend.js.utils.getFqNameWithJsNameWhenAvailable
import org.jetbrains.kotlin.ir.backend.js.utils.isJsExport
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
import org.jetbrains.kotlin.ir.backend.js.utils.shouldGenerateObjectWithGetInstanceInEsModuleTypeScript
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
Expand All @@ -30,6 +29,7 @@ import org.jetbrains.kotlin.name.parentOrNull
import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.memoryOptimizedFilter
import org.jetbrains.kotlin.utils.indexBasedForEach
import org.jetbrains.kotlin.utils.memoryOptimizedMap
import org.jetbrains.kotlin.utils.memoryOptimizedMapNotNull

Expand Down Expand Up @@ -60,18 +60,18 @@ class ExportModelGenerator(val context: WasmBackendContext) {
val declarationVisitor = object : IrVisitorVoid() {
override fun visitFunction(declaration: IrFunction) {
visitType(declaration.returnType)
declaration.typeParameters.forEach(::visitTypeParameter)
declaration.parameters.forEach {
declaration.typeParameters.indexBasedForEach(::visitTypeParameter)
declaration.parameters.indexBasedForEach {
if (it.kind != IrParameterKind.DispatchReceiver) {
visitValueParameter(it)
}
}
}

override fun visitClass(declaration: IrClass) {
declaration.superTypes.forEach(::visitType)
declaration.typeParameters.forEach(::visitTypeParameter)
declaration.declarations.forEach { it.acceptVoid(this) }
declaration.superTypes.indexBasedForEach(::visitType)
declaration.typeParameters.indexBasedForEach(::visitTypeParameter)
declaration.declarations.indexBasedForEach { it.acceptVoid(this) }
}

override fun visitProperty(declaration: IrProperty) {
Expand All @@ -88,7 +88,7 @@ class ExportModelGenerator(val context: WasmBackendContext) {
}

override fun visitTypeParameter(declaration: IrTypeParameter) {
declaration.superTypes.forEach(::visitType)
declaration.superTypes.indexBasedForEach(::visitType)
}

private fun visitType(type: IrType) {
Expand All @@ -98,7 +98,7 @@ class ExportModelGenerator(val context: WasmBackendContext) {
if (!klass.isExternal || klass in excludedFromExport || klass in declarationsToExport) return
queue.add(klass)
declarationsToExport.add(klass)
type.arguments.forEach { it.typeOrNull?.let(::visitType) }
type.arguments.indexBasedForEach { it.typeOrNull?.let(::visitType) }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import org.jetbrains.kotlin.ir.util.isNullable
import org.jetbrains.kotlin.ir.util.isSubtypeOfClass
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.utils.indexBasedForEach
import org.jetbrains.kotlin.utils.indexBasedForEachIndexed
import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys
import org.jetbrains.kotlin.wasm.ir.*
import org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation
Expand Down Expand Up @@ -120,7 +122,7 @@ class BodyGenerator(
}

private fun tryGenerateVarargArray(irVararg: IrVararg, wasmArrayType: WasmImmediate.GcType) {
irVararg.elements.forEach {
irVararg.elements.indexBasedForEach {
check(it is IrExpression)
generateExpression(it)
}
Expand Down Expand Up @@ -331,7 +333,7 @@ class BodyGenerator(
private fun buildFinallyBody(catchBlock: IrCatch) {
val composite = catchBlock.result as IrComposite
assert(composite.statements.last().isSimpleRethrowing(catchBlock)) { "Last throw is not rethrowing" }
composite.statements.dropLast(1).forEach(::generateStatement)
composite.statements.dropLast(1).indexBasedForEach(::generateStatement)
}

private fun buildCatchBlockBody(catchBlock: IrCatch) {
Expand Down Expand Up @@ -686,7 +688,7 @@ class BodyGenerator(
body.buildIf("this_init")
generateAnyParameters(parentClass.symbol, location)
val irFields: List<IrField> = parentClass.allFields(backendContext.irBuiltIns)
irFields.forEachIndexed { index, field ->
irFields.indexBasedForEachIndexed { index, field ->
if (index > 0) {
generateDefaultInitializerForType(wasmModuleTypeTransformer.transformType(field.type), body)
}
Expand Down Expand Up @@ -1216,7 +1218,7 @@ class BodyGenerator(
}

override fun visitBlockBody(body: IrBlockBody) {
body.statements.forEach(::generateStatement)
body.statements.indexBasedForEach(::generateStatement)
this.body.buildNop(body.getSourceEndLocation())
}

Expand Down Expand Up @@ -1244,7 +1246,7 @@ class BodyGenerator(

private fun processContainerExpression(expression: IrContainerExpression) {
val statements = expression.statements
statements.forEachIndexed { i, statement ->
statements.indexBasedForEachIndexed { i, statement ->
if (i != statements.lastIndex) {
generateStatement(statement)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

package org.jetbrains.kotlin.backend.wasm.ir2wasm

import org.jetbrains.kotlin.utils.indexBasedForEach
import org.jetbrains.kotlin.utils.indexBasedForEachIndexed
import org.jetbrains.kotlin.wasm.ir.WasmSymbol

// Representation of constant data in Wasm memory
Expand Down Expand Up @@ -87,7 +89,7 @@ class ConstantDataCharArray(val value: List<WasmSymbol<Char>>, val fitsLatin1: B

override fun toBytes(): ByteArray {
return ByteArray(value.size * bytesPerChar).apply {
value.forEachIndexed { index, symbol -> symbol.owner.toLittleEndianBytes(this, index * bytesPerChar, fitsLatin1) }
value.indexBasedForEachIndexed { index, symbol -> symbol.owner.toLittleEndianBytes(this, index * bytesPerChar, fitsLatin1) }
}
}

Expand All @@ -105,7 +107,7 @@ class ConstantDataCharArray(val value: List<WasmSymbol<Char>>, val fitsLatin1: B
class ConstantDataStruct(val elements: List<ConstantDataElement>) : ConstantDataElement() {
override fun toBytes(): ByteArray {
return buildList {
elements.forEach {
elements.indexBasedForEach {
for (byte in it.toBytes()) {
add(byte)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.util.erasedUpperBound
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.name.parentOrNull
import org.jetbrains.kotlin.utils.indexBasedForEachIndexed
import org.jetbrains.kotlin.wasm.ir.*
import org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation

Expand Down Expand Up @@ -324,7 +325,7 @@ class DeclarationGenerator(
val initVTableGlobal = buildWasmExpression {
val location = SourceLocation.NoLocation("Create instance of vtable struct")
buildSpecialITableInit(metadata, this, location)
metadata.virtualMethods.forEachIndexed { i, method ->
metadata.virtualMethods.indexBasedForEachIndexed { i, method ->
if (method.function.modality != Modality.ABSTRACT) {
buildInstr(WasmOp.REF_FUNC, location, WasmImmediate.FuncIdx(wasmFileCodegenContext.referenceFunction(method.function.symbol)))
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.wasm.ir2wasm

import org.jetbrains.kotlin.backend.common.serialization.Hash128Bits
import org.jetbrains.kotlin.backend.wasm.utils.StronglyConnectedComponents
import org.jetbrains.kotlin.utils.indexBasedForEach
import org.jetbrains.kotlin.utils.yieldIfNotNull
import org.jetbrains.kotlin.wasm.ir.*

Expand Down Expand Up @@ -56,11 +57,11 @@ private fun wasmTypeDeclarationOrderKey(declaration: WasmTypeDeclaration): Int {

fun createRecursiveTypeGroups(types: List<WasmTypeDeclaration>): List<RecursiveTypeGroup> {
val componentFinder = StronglyConnectedComponents(::dependencyTypes)
types.forEach(componentFinder::visit)
types.indexBasedForEach(componentFinder::visit)

val components = componentFinder.findComponents()

components.forEach { component ->
components.indexBasedForEach { component ->
component.sortBy(::wasmTypeDeclarationOrderKey)
}

Expand Down
Loading