less debug noise
open ObjDynamic found a pfoblem with dynamic, see todo in OOTest.kt
This commit is contained in:
		
							parent
							
								
									5d4d548275
								
							
						
					
					
						commit
						ba725fc9ed
					
				@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
@ -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))
 | 
				
			||||||
 | 
					       """)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user