Skip to content

Commit

Permalink
Fix memory leak.
Browse files Browse the repository at this point in the history
  • Loading branch information
FilipDolnik committed Apr 15, 2024
1 parent 8db3203 commit ec54313
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ class SkiePhaseScheduler {
CreateOirMembersPhase(context),
ConfigureCInteropFrameworkNameForPlatformTypesPhase,

CreateKotlinSirTypesPhase,
CreateKotlinSirTypesPhase(),
CreateKotlinSirExtensionsPhase,
CreateExternalSirTypesPhase,
InitializeSirSuperTypesPhase,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import co.touchlab.skie.oir.element.OirClass
import co.touchlab.skie.oir.element.kirClassOrNull
import co.touchlab.skie.phases.SirPhase
import co.touchlab.skie.sir.element.SirClass
import co.touchlab.skie.sir.element.SirModule
import co.touchlab.skie.sir.element.toSirKind

object CreateExternalSirTypesPhase : SirPhase {
Expand All @@ -20,7 +19,7 @@ object CreateExternalSirTypesPhase : SirPhase {
private fun createClass(oirClass: OirClass) {
val sirClass = SirClass(
baseName = oirClass.name,
parent = oirClass.kirClassOrNull?.let { sirProvider.findExternalModule(it) }?.builtInFile ?: SirModule.Unknown.builtInFile,
parent = oirClass.kirClassOrNull?.let { sirProvider.findExternalModule(it) }?.builtInFile ?: sirProvider.unknownModule.builtInFile,
kind = oirClass.kind.toSirKind(),
origin = SirClass.Origin.Oir(oirClass),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import co.touchlab.skie.sir.element.SirDeclarationParent
import co.touchlab.skie.sir.element.SirTypeParameter
import co.touchlab.skie.sir.element.toSirKind

object CreateKotlinSirTypesPhase : SirPhase {
class CreateKotlinSirTypesPhase : SirPhase {

private val kirToSirClasses = mutableMapOf<KirClass, SirClass>()

Expand Down Expand Up @@ -68,14 +68,17 @@ object CreateKotlinSirTypesPhase : SirPhase {
is KirModule -> null
}

context(SirPhase.Context)
fun createTypeParameters(oirClass: OirClass, sirClass: SirClass) {
oirClass.typeParameters.forEach { typeParameter ->
typeParameter.sirTypeParameter = SirTypeParameter(
name = typeParameter.name,
parent = sirClass,
bounds = listOf(sirBuiltins.Swift.AnyObject.defaultType),
)
companion object {

context(SirPhase.Context)
fun createTypeParameters(oirClass: OirClass, sirClass: SirClass) {
oirClass.typeParameters.forEach { typeParameter ->
typeParameter.sirTypeParameter = SirTypeParameter(
name = typeParameter.name,
parent = sirClass,
bounds = listOf(sirBuiltins.Swift.AnyObject.defaultType),
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import co.touchlab.skie.configuration.RootConfiguration
import co.touchlab.skie.kir.element.KirClass
import co.touchlab.skie.oir.OirProvider
import co.touchlab.skie.phases.SirPhase
import co.touchlab.skie.phases.features.flow.LargeObject
import co.touchlab.skie.sir.builtin.SirBuiltins
import co.touchlab.skie.sir.element.SirCallableDeclaration
import co.touchlab.skie.sir.element.SirClass
Expand Down Expand Up @@ -32,6 +33,8 @@ class SirProvider(

val skieModule: SirModule.Skie = SirModule.Skie(framework.moduleName)

val unknownModule: SirModule.Unknown = SirModule.Unknown()

val fileProvider: SirFileProvider = SirFileProvider(skieModule, oirProvider, skieBuildDirectory)

val sirBuiltins by lazy {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sealed class SirModule(
val name: String,
) : SirElement {

val builtInFile by lazy {
open val builtInFile by lazy {
SirBuiltInFile(this)
}

Expand All @@ -24,9 +24,16 @@ sealed class SirModule(

class External(name: String) : SirModule(name)

object Unknown : SirModule("<Unknown>")
class Unknown : SirModule("<Unknown>")

object None : SirModule("<None>")
object None : SirModule("<None>") {

override val files: List<SirFile> = emptyList()

override val builtInFile: SirBuiltInFile by lazy<SirBuiltInFile> {
error("None module does not have a built-in file.")
}
}

override fun toString(): String = "SirModule${this::class.simpleName}: $name"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ data class SirDeclaredSirType(
val evaluatedTypeArguments = lazy { typeArguments.map { it.evaluate() } }

val evaluatedType = lazy {
if (declaration.module != SirModule.Unknown) {
if (declaration.module !is SirModule.Unknown) {
copy(typeArguments = evaluatedTypeArguments.value.map { it.type })
} else {
getUnknownCInteropModuleType()
Expand Down

0 comments on commit ec54313

Please sign in to comment.