Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d38937095e | ||
|
|
7d74d84717 | ||
|
|
ce1cc8adad |
@@ -4,3 +4,4 @@ onchain/out/
|
||||
offchain/target/
|
||||
|
||||
.direnv
|
||||
.env
|
||||
|
||||
@@ -9,6 +9,11 @@ import "forge-std/console.sol";
|
||||
* a token-based bytecode approach.
|
||||
*/
|
||||
contract Push3Interpreter {
|
||||
// -----------------------------------------------------
|
||||
// 0. CONSTANTS
|
||||
// -----------------------------------------------------
|
||||
uint8 internal constant OPCODE_BOOL_OFFSET = 0x6;
|
||||
|
||||
// -----------------------------------------------------
|
||||
// 1. ENUMS
|
||||
// -----------------------------------------------------
|
||||
@@ -16,16 +21,34 @@ contract Push3Interpreter {
|
||||
NO_TAG, // 0
|
||||
INSTRUCTION, // 1
|
||||
INT_LITERAL, // 2
|
||||
SUBLIST // 3
|
||||
SUBLIST, // 3
|
||||
BOOL_LITERAL // 4
|
||||
}
|
||||
|
||||
enum OpCode {
|
||||
NOOP, // 0
|
||||
INTEGER_PLUS, // 1
|
||||
INTEGER_MINUS, // 2
|
||||
INTEGER_MULT, // 3
|
||||
INTEGER_DUP, // 4
|
||||
INTEGER_POP // 5
|
||||
NOOP, // 0
|
||||
INTEGER_PLUS, // 1
|
||||
INTEGER_MINUS, // 2
|
||||
INTEGER_MULT, // 3
|
||||
INTEGER_DUP, // 4
|
||||
INTEGER_POP, // 5
|
||||
BOOL_DUP, // OPCODE_BOOL_OFFSET + 0
|
||||
BOOL_POP, // OPCODE_BOOL_OFFSET + 1
|
||||
BOOL_SWAP, // OPCODE_BOOL_OFFSET + 2
|
||||
BOOL_FLUSH, // OPCODE_BOOL_OFFSET + 3
|
||||
BOOL_STACKDEPTH, // OPCODE_BOOL_OFFSET + 4
|
||||
BOOL_NOT, // OPCODE_BOOL_OFFSET + 5
|
||||
BOOL_AND, // OPCODE_BOOL_OFFSET + 6
|
||||
BOOL_OR, // OPCODE_BOOL_OFFSET + 7
|
||||
BOOL_EQ, // OPCODE_BOOL_OFFSET + 8
|
||||
BOOL_FROMFLOAT, // OPCODE_BOOL_OFFSET + 9
|
||||
BOOL_FROMINTEGER,// OPCODE_BOOL_OFFSET + 10
|
||||
BOOL_ROT, // OPCODE_BOOL_OFFSET + 11
|
||||
BOOL_SHOVE, // OPCODE_BOOL_OFFSET + 12
|
||||
BOOL_YANK, // OPCODE_BOOL_OFFSET + 13
|
||||
BOOL_YANKDUP, // OPCODE_BOOL_OFFSET + 14
|
||||
BOOL_DEFINE, // OPCODE_BOOL_OFFSET + 15
|
||||
BOOL_RAND // OPCODE_BOOL_OFFSET + 16
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
@@ -85,11 +108,21 @@ contract Push3Interpreter {
|
||||
return makeDescriptor(CodeTag.INT_LITERAL, 0, 0, masked);
|
||||
}
|
||||
|
||||
function makeBoolLiteral(bool val) internal pure returns (uint256) {
|
||||
uint256 masked;
|
||||
if (val) masked = uint256(1);
|
||||
return makeDescriptor(CodeTag.BOOL_LITERAL, 0, 0, masked);
|
||||
}
|
||||
|
||||
function extractInt32(uint256 desc) internal pure returns (int32) {
|
||||
// read the low 32 bits
|
||||
return int32(uint32(getLow184(desc)));
|
||||
}
|
||||
|
||||
function extractBool(uint256 desc) internal pure returns (bool) {
|
||||
return desc & 1 == 1;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// 3. HELPER READS
|
||||
// -----------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user