-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: andreypfau <[email protected]>
- Loading branch information
1 parent
98f3d7d
commit 846a9ed
Showing
10 changed files
with
1,186 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
plugins { | ||
id("multiplatform") | ||
} | ||
|
||
kotlin { | ||
sourceSets { | ||
commonMain { | ||
dependencies { | ||
api(projects.tonKotlinLiteclient) | ||
api(projects.tonKotlinContract) | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package org.ton.kotlin.tvm | ||
|
||
/* | ||
class ControlRegs( | ||
val c: Array<TvmContinuation?> = arrayOfNulls(4), | ||
val d: Array<Cell?> = arrayOfNulls(2), | ||
val c7: List<Any?> = emptyList() | ||
) | ||
class ControlData( | ||
val stack: Stack = Stack(), | ||
val stackDepth: Int = 0, | ||
val save: ControlRegs = ControlRegs(), | ||
val nargs: Int = 0, | ||
val cp: Int = 0 | ||
) | ||
class TvmContinuation private constructor( | ||
val tag: Byte, | ||
val data: ControlData = ControlData(), | ||
val code: CellSlice = CellSlice(BitString.empty()), | ||
val value: Long = 0, | ||
val condition: TvmContinuation? = null, | ||
val body: TvmContinuation? = null, | ||
val next: TvmContinuation? = null, | ||
) { | ||
companion object { | ||
val ORD_TAG = 0b00.toByte() | ||
val ORD_EXT_TAG = 0b01.toByte() | ||
val QUIT_TAG = 0b1000.toByte() | ||
val QUIT_EXC_TAG = 0b1001.toByte() | ||
val REPEAT_TAG = 0b10100.toByte() | ||
val UNTIL_TAG = 0b110000.toByte() | ||
val AGAIN_TAG = 0b110001.toByte() | ||
val WHILE_COND_TAG = 0b110010.toByte() | ||
val WHILE_BODY_TAG = 0b110011.toByte() | ||
val PUSHINT_TAG = 0b1111.toByte() | ||
fun ordinary() = | ||
TvmContinuation(tag = ORD_TAG) | ||
fun ordinary(code: CellSlice, cp: Int) = | ||
TvmContinuation(tag = ORD_TAG, code = code, data = ControlData(cp = cp)) | ||
fun ordinary(code: CellSlice, cp: Int, stack: List<Any>, nargs: Int = -1) = | ||
TvmContinuation( | ||
tag = ORD_TAG, | ||
code = code, | ||
data = ControlData( | ||
cp = cp, | ||
stackDepth = stack.size, | ||
stack = Stack(stack), | ||
nargs = nargs, | ||
) | ||
) | ||
} | ||
} | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package org.ton.kotlin.tvm | ||
|
||
import kotlin.math.max | ||
|
||
public interface GasCalculator { | ||
public fun calculateOperationCost(bitCount: Int): Long | ||
|
||
public fun calculateRollCost(elements: Int): Long = max(elements - 255L, 0L) | ||
} | ||
|
||
public object FreeGasCalculator : GasCalculator { | ||
override fun calculateOperationCost(bitCount: Int): Long = 0 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
package org.ton.kotlin.tvm | ||
|
||
public object OpCodes { | ||
public const val NOP: Int = 0x00 | ||
public const val SWAP: Int = 0x01 | ||
public const val XCHG_0_2: Int = 0x02 | ||
public const val XCHG_0_3: Int = 0x03 | ||
public const val XCHG_0_4: Int = 0x04 | ||
public const val XCHG_0_5: Int = 0x05 | ||
public const val XCHG_0_6: Int = 0x06 | ||
public const val XCHG_0_7: Int = 0x07 | ||
public const val XCHG_0_8: Int = 0x08 | ||
public const val XCHG_0_9: Int = 0x09 | ||
public const val XCHG_0_10: Int = 0x0A | ||
public const val XCHG_0_11: Int = 0x0B | ||
public const val XCHG_0_12: Int = 0x0C | ||
public const val XCHG_0_13: Int = 0x0D | ||
public const val XCHG_0_14: Int = 0x0E | ||
public const val XCHG_0_15: Int = 0x0F | ||
public const val XCHG: Int = 0x10 | ||
public const val XCHG_0: Int = 0x11 | ||
public const val XCHG_1_2: Int = 0x12 | ||
public const val XCHG_1_3: Int = 0x13 | ||
public const val XCHG_1_4: Int = 0x14 | ||
public const val XCHG_1_5: Int = 0x15 | ||
public const val XCHG_1_6: Int = 0x16 | ||
public const val XCHG_1_7: Int = 0x17 | ||
public const val XCHG_1_8: Int = 0x18 | ||
public const val XCHG_1_9: Int = 0x19 | ||
public const val XCHG_1_10: Int = 0x1A | ||
public const val XCHG_1_11: Int = 0x1B | ||
public const val XCHG_1_12: Int = 0x1C | ||
public const val XCHG_1_13: Int = 0x1D | ||
public const val XCHG_1_14: Int = 0x1E | ||
public const val XCHG_1_15: Int = 0x1F | ||
public const val DUP: Int = 0x20 | ||
public const val OVER: Int = 0x21 | ||
public const val PUSH_2: Int = 0x22 | ||
public const val PUSH_3: Int = 0x23 | ||
public const val PUSH_4: Int = 0x24 | ||
public const val PUSH_5: Int = 0x25 | ||
public const val PUSH_6: Int = 0x26 | ||
public const val PUSH_7: Int = 0x27 | ||
public const val PUSH_8: Int = 0x28 | ||
public const val PUSH_9: Int = 0x29 | ||
public const val PUSH_10: Int = 0x2A | ||
public const val PUSH_11: Int = 0x2B | ||
public const val PUSH_12: Int = 0x2C | ||
public const val PUSH_13: Int = 0x2D | ||
public const val PUSH_14: Int = 0x2E | ||
public const val PUSH_15: Int = 0x2F | ||
public const val DROP: Int = 0x30 | ||
public const val NIP: Int = 0x31 | ||
public const val POP_2: Int = 0x32 | ||
public const val POP_3: Int = 0x33 | ||
public const val POP_4: Int = 0x34 | ||
public const val POP_5: Int = 0x35 | ||
public const val POP_6: Int = 0x36 | ||
public const val POP_7: Int = 0x37 | ||
public const val POP_8: Int = 0x38 | ||
public const val POP_9: Int = 0x39 | ||
public const val POP_10: Int = 0x3A | ||
public const val POP_11: Int = 0x3B | ||
public const val POP_12: Int = 0x3C | ||
public const val POP_13: Int = 0x3D | ||
public const val POP_14: Int = 0x3E | ||
public const val POP_15: Int = 0x3F | ||
|
||
public const val XCHG3_0: Int = 0x40 | ||
public const val XCHG3_1: Int = 0x41 | ||
public const val XCHG3_2: Int = 0x42 | ||
public const val XCHG3_3: Int = 0x43 | ||
public const val XCHG3_4: Int = 0x44 | ||
public const val XCHG3_5: Int = 0x45 | ||
public const val XCHG3_6: Int = 0x46 | ||
public const val XCHG3_7: Int = 0x47 | ||
public const val XCHG3_8: Int = 0x48 | ||
public const val XCHG3_9: Int = 0x49 | ||
public const val XCHG3_10: Int = 0x4A | ||
public const val XCHG3_11: Int = 0x4B | ||
public const val XCHG3_12: Int = 0x4C | ||
public const val XCHG3_13: Int = 0x4D | ||
public const val XCHG3_14: Int = 0x4E | ||
public const val XCHG3_15: Int = 0x4F | ||
public const val XCHG2: Int = 0x50 | ||
public const val XCPU: Int = 0x51 | ||
public const val PUXC: Int = 0x52 | ||
public const val PUSH2: Int = 0x53 | ||
|
||
public const val XCHG_PUSH_SUBSET: Int = 0x54 | ||
|
||
public const val BLKSWAP: Int = 0x55 | ||
public const val PUSH_L: Int = 0x56 | ||
public const val POP_L: Int = 0x57 | ||
public const val ROT: Int = 0x58 | ||
public const val ROTREV: Int = 0x59 | ||
public const val SWAP2: Int = 0x5A | ||
public const val DROP2: Int = 0x5B | ||
public const val DUP2: Int = 0x5C | ||
public const val OVER2: Int = 0x5D | ||
public const val REVERSE: Int = 0x5E | ||
public const val BLK_SUBSET: Int = 0x5F | ||
public const val PICK: Int = 0x60 | ||
public const val ROLLX: Int = 0x61 | ||
public const val ROLLREV: Int = 0x62 | ||
public const val BLKSWX: Int = 0x63 | ||
public const val REVX: Int = 0x64 | ||
public const val DROPX: Int = 0x65 | ||
public const val TUCK: Int = 0x66 | ||
public const val XCHGX: Int = 0x67 | ||
public const val DEPTH: Int = 0x68 | ||
public const val CHKDEPTH: Int = 0x69 | ||
public const val ONLYTOPX: Int = 0x6A | ||
public const val ONLYX: Int = 0x6B | ||
public const val BLKDROP2: Int = 0x6C | ||
} |
Oops, something went wrong.