fixed objClass initialization in ObjInt.Zero, added Buffer.toBitInput, minimal descrription of Lynon
This commit is contained in:
1 parent
eefecae7b4
commit
835333dfad
8 files changed
+118
-15
No files matched your search
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
|
||||
group = "net.sergeych"
|
||||
version = "0.8.12-SNAPSHOT"
|
||||
version = "0.8.14-SNAPSHOT"
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
|
||||
@@ -85,13 +85,15 @@ open class Obj {
|
||||
name: String,
|
||||
args: Arguments = Arguments.EMPTY,
|
||||
onNotFoundResult: Obj?=null
|
||||
): Obj =
|
||||
objClass.getInstanceMemberOrNull(name)?.value?.invoke(
|
||||
): Obj {
|
||||
return objClass.getInstanceMemberOrNull(name)?.value?.invoke(
|
||||
scope,
|
||||
this,
|
||||
args)
|
||||
args
|
||||
)
|
||||
?: onNotFoundResult
|
||||
?: scope.raiseSymbolNotFound(name)
|
||||
}
|
||||
|
||||
open suspend fun getInstanceMethod(
|
||||
scope: Scope,
|
||||
|
||||
@@ -24,6 +24,7 @@ import net.sergeych.bintools.encodeToHex
|
||||
import net.sergeych.bintools.toDump
|
||||
import net.sergeych.lyng.Scope
|
||||
import net.sergeych.lyng.statement
|
||||
import net.sergeych.lynon.BitArray
|
||||
import net.sergeych.lynon.LynonDecoder
|
||||
import net.sergeych.lynon.LynonEncoder
|
||||
import net.sergeych.lynon.LynonType
|
||||
@@ -200,6 +201,9 @@ open class ObjBuffer(val byteArray: UByteArray) : Obj() {
|
||||
thisAs<ObjBuffer>().byteArray.toByteArray().toDump()
|
||||
)
|
||||
}
|
||||
addFn("toBitInput") {
|
||||
ObjBitBuffer(BitArray(thisAs<ObjBuffer>().byteArray, 8))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ class ObjInt(var value: Long, override val isConst: Boolean = false) : Obj(), Nu
|
||||
|
||||
override fun toString(): String = value.toString()
|
||||
|
||||
override val objClass: ObjClass = type
|
||||
override val objClass: ObjClass by lazy { type }
|
||||
|
||||
override suspend fun plus(scope: Scope, other: Obj): Obj =
|
||||
if (other is ObjInt)
|
||||
|
||||
@@ -322,4 +322,9 @@ class BookTest {
|
||||
runDocTests("../docs/Iterable.md")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSerialization() = runBlocking {
|
||||
runDocTests("../docs/serialization.md")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -649,6 +649,48 @@ class LynonTests {
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testTokenFailure() = runTest {
|
||||
val s = Scope()
|
||||
val t = s.eval(
|
||||
"""
|
||||
import lyng.serialization
|
||||
import lyng.buffer
|
||||
import lyng.time
|
||||
|
||||
class Wallet( id, ownerKey, balance=0, createdAt=Instant.now().truncateToSecond(), isBlocked=false) {
|
||||
|
||||
/*
|
||||
Create new key for the given owner multikey
|
||||
*/
|
||||
static fun new( ownerKey ) {
|
||||
|
||||
// this is per-contract unique id generated and approved by the network.
|
||||
// it is not random, but it _is_ unique, and we use it as a walletId.
|
||||
val newId = Buffer("testid")
|
||||
|
||||
val w = Wallet(newId, ownerKey)
|
||||
println(w)
|
||||
println(w.balance)
|
||||
|
||||
val x = Lynon.encode(Wallet(newId, ownerKey) ).toBuffer()
|
||||
val t = Lynon.decode(x.toBitInput())
|
||||
println(x)
|
||||
println(t)
|
||||
assertEquals(w.balance, t.balance)
|
||||
w
|
||||
}
|
||||
|
||||
}
|
||||
Wallet.new(Buffer("1234"))
|
||||
|
||||
""".trimIndent())
|
||||
println(t)
|
||||
// val bb = lynonEncodeAny(s, t)
|
||||
// val t2 = lynonDecodeAny(s, bb)
|
||||
// println(t2.readField(s, "balance"))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user