From ba725fc9ed8fd926b952b219b2242f6565cfeeda Mon Sep 17 00:00:00 2001 From: sergeych Date: Sat, 1 Nov 2025 18:33:37 +0100 Subject: [PATCH] less debug noise open ObjDynamic found a pfoblem with dynamic, see todo in OOTest.kt --- .../net/sergeych/lyng/obj/ObjDynamic.kt | 5 +- .../kotlin/net/sergeych/lynon/LynonDecoder.kt | 11 +++-- lynglib/src/commonTest/kotlin/OOTest.kt | 49 +++++++++++++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjDynamic.kt b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjDynamic.kt index 63f88b8..eacabd2 100644 --- a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjDynamic.kt +++ b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjDynamic.kt @@ -47,10 +47,7 @@ class ObjDynamicContext(val delegate: ObjDynamic) : Obj() { } } -class ObjDynamic : Obj() { - - internal var readCallback: Statement? = null - internal var writeCallback: Statement? = null +open class ObjDynamic(var readCallback: Statement? = null,var writeCallback: Statement? = null) : Obj() { override suspend fun readField(scope: Scope, name: String): ObjRecord { return readCallback?.execute(scope.createChildScope(Arguments(ObjString(name))))?.let { diff --git a/lynglib/src/commonMain/kotlin/net/sergeych/lynon/LynonDecoder.kt b/lynglib/src/commonMain/kotlin/net/sergeych/lynon/LynonDecoder.kt index f17330c..9413986 100644 --- a/lynglib/src/commonMain/kotlin/net/sergeych/lynon/LynonDecoder.kt +++ b/lynglib/src/commonMain/kotlin/net/sergeych/lynon/LynonDecoder.kt @@ -91,14 +91,15 @@ open class LynonDecoder(val bin: BitInput, val settings: LynonSettings = LynonSe val type = LynonType.entries[getBitsAsInt(4)] val list = mutableListOf() val objClass = if (type == LynonType.Other) - decodeClassObj(scope).also { println("detected class obj: $it") } + decodeClassObj(scope)//.also { println("detected class obj: $it") } else type.objClass val size = fixedSize ?: bin.unpackUnsigned().toInt() - println("detected homogenous list type $type, $size items") +// println("detected homogenous list type $type, $size items") for (i in 0.. + println("Call: %s.%s"(contractName,name)) + } + } + } + getContract("foo").bar + """) + } + + @Test + fun testDynamicClassReturn2() = runTest { + // todo: should work without extra parenthesis + // see below + eval(""" + + fun getContract(contractName) { + println("1") + dynamic { + get { name -> + println("innrer %s.%s"(contractName,name)) + { args... -> + if( name == "bar" ) args.sum() else null + } + } + } + } + + val cc = dynamic { + get { name -> + println("Call cc %s"(name)) + getContract(name) + } + } + + val x = cc.foo.bar + println(x) + x(1,2,3) + assertEquals(6, x(1,2,3)) + // v HERE v + assertEquals(15, (cc.foo.bar)(10,2,3)) + """) + } } \ No newline at end of file