From 88b355c40d4faad4287d4e0a8453cbee21bb7a77 Mon Sep 17 00:00:00 2001 From: sergeych Date: Tue, 10 Jun 2025 23:14:44 +0400 Subject: [PATCH] ObjInstanceClass optimization --- .../commonMain/kotlin/net/sergeych/lyng/Compiler.kt | 6 +++--- .../commonMain/kotlin/net/sergeych/lyng/ObjClass.kt | 3 +++ .../kotlin/net/sergeych/lyng/ObjInstance.kt | 13 +++++-------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt b/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt index 7138c7a..e821a71 100644 --- a/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt +++ b/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt @@ -769,12 +769,12 @@ class Compiler( for ((name, record) in objects) { when (record.visibility) { Visibility.Public -> { - thisObj.publicFields += name - thisObj.protectedFields += name + thisObj.objClass.publicFields += name + thisObj.objClass.protectedFields += name } Visibility.Protected -> - thisObj.protectedFields += name + thisObj.objClass.protectedFields += name Visibility.Private -> { //println("private field: $name") diff --git a/library/src/commonMain/kotlin/net/sergeych/lyng/ObjClass.kt b/library/src/commonMain/kotlin/net/sergeych/lyng/ObjClass.kt index 7ff3570..7ed385b 100644 --- a/library/src/commonMain/kotlin/net/sergeych/lyng/ObjClass.kt +++ b/library/src/commonMain/kotlin/net/sergeych/lyng/ObjClass.kt @@ -7,6 +7,9 @@ class ObjClass( vararg val parents: ObjClass, ) : Obj() { + internal val publicFields = mutableSetOf() + internal val protectedFields = mutableSetOf() + var instanceConstructor: Statement? = null val allParentsSet: Set = parents.flatMap { diff --git a/library/src/commonMain/kotlin/net/sergeych/lyng/ObjInstance.kt b/library/src/commonMain/kotlin/net/sergeych/lyng/ObjInstance.kt index 935f0ce..b96d7ab 100644 --- a/library/src/commonMain/kotlin/net/sergeych/lyng/ObjInstance.kt +++ b/library/src/commonMain/kotlin/net/sergeych/lyng/ObjInstance.kt @@ -2,18 +2,15 @@ package net.sergeych.lyng class ObjInstance(override val objClass: ObjClass) : Obj() { - internal val publicFields = mutableSetOf() - internal val protectedFields = mutableSetOf() - internal lateinit var instanceContext: Context override suspend fun readField(context: Context, name: String): ObjRecord { - return if( name in publicFields ) instanceContext[name]!! + return if( name in objClass.publicFields ) instanceContext[name]!! else super.readField(context, name) } override suspend fun writeField(context: Context, name: String, newValue: Obj) { - if( name in publicFields ) { + if( name in objClass.publicFields ) { val f = instanceContext[name]!! if( !f.isMutable ) ObjIllegalAssignmentError(context, "can't reassign val $name").raise() if( f.value.assign(context, newValue) == null) @@ -23,12 +20,12 @@ class ObjInstance(override val objClass: ObjClass) : Obj() { } override suspend fun invokeInstanceMethod(context: Context, name: String, args: Arguments): Obj { - if( name in publicFields ) return instanceContext[name]!!.value.invoke(context, this, args) + if( name in objClass.publicFields ) return instanceContext[name]!!.value.invoke(context, this, args) return super.invokeInstanceMethod(context, name, args) } override fun toString(): String { - val fields = publicFields.map { + val fields = objClass.publicFields.map { instanceContext[it]?.value?.toString() ?: "??" }.joinToString(", ") return "${objClass.className}($fields)" @@ -37,7 +34,7 @@ class ObjInstance(override val objClass: ObjClass) : Obj() { override suspend fun compareTo(context: Context, other: Obj): Int { if( other !is ObjInstance ) return -1 if( other.objClass != objClass ) return -1 - for( f in publicFields ) { + for( f in objClass.publicFields ) { val a = instanceContext[f]!!.value val b = other.instanceContext[f]!!.value val d = a.compareTo(context, b)