less debug noise

open ObjDynamic
found a pfoblem with dynamic, see todo in OOTest.kt
This commit is contained in:
Sergey Chernov 2025-11-01 18:33:37 +01:00
parent 5d4d548275
commit ba725fc9ed
3 changed files with 56 additions and 9 deletions

View File

@ -47,10 +47,7 @@ class ObjDynamicContext(val delegate: ObjDynamic) : Obj() {
} }
} }
class ObjDynamic : Obj() { open class ObjDynamic(var readCallback: Statement? = null,var writeCallback: Statement? = null) : Obj() {
internal var readCallback: Statement? = null
internal var writeCallback: Statement? = null
override suspend fun readField(scope: Scope, name: String): ObjRecord { override suspend fun readField(scope: Scope, name: String): ObjRecord {
return readCallback?.execute(scope.createChildScope(Arguments(ObjString(name))))?.let { return readCallback?.execute(scope.createChildScope(Arguments(ObjString(name))))?.let {

View File

@ -91,14 +91,15 @@ open class LynonDecoder(val bin: BitInput, val settings: LynonSettings = LynonSe
val type = LynonType.entries[getBitsAsInt(4)] val type = LynonType.entries[getBitsAsInt(4)]
val list = mutableListOf<Obj>() val list = mutableListOf<Obj>()
val objClass = if (type == LynonType.Other) 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 else type.objClass
val size = fixedSize ?: bin.unpackUnsigned().toInt() 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..<size) { for (i in 0..<size) {
list += decodeObject(scope, objClass, type).also { list += decodeObject(scope, objClass, type)
println("decoded: $it") //.also {
} // println("decoded: $it")
// }
} }
list list
} else { } else {

View File

@ -137,4 +137,53 @@ class OOTest {
assertEquals(Point(1,2), Point(1,2) ) assertEquals(Point(1,2), Point(1,2) )
""".trimIndent()) """.trimIndent())
} }
@Test
fun testDynamicClass() = runTest {
eval("""
fun getContract(contractName) {
dynamic {
get { name ->
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))
""")
}
} }