Files
ValueScript/concept-code/eg1.vsxxd
2023-03-07 09:11:00 +11:00

69 lines
2.1 KiB
Plaintext

00: 0d05 000a 000b 0400 210d 2300 0906 0106
10: 0206 0300 0222 0d33 000e 0209 00ff 010e
20: 0200 000b 0703 060e 030e 0405 040e 020e
30: 0500 000b 0300 0201 00
---
// Pointers currently occupy two bytes, restricting programs to 64kB.
// In future, the length of the bytecode may indicate the byte width needed for
// pointers (1, 2, 4, or 8, whichever is smallest and sufficient).
// export @main {}
00: 0d0500 0a00 // Default export is a pointer (0d) to 0500 (position
// 5, little endian)
// Named exports are an empty object (0a object, 00 end)
// @main = function() {
05: 0b 04 00 // function with 4 registers and 0 parameters
// 0: %return
// 1: %this
// 2: %x
// ff: %ignore (so only actually allocate 3 registers)
// declaring the number of registers implicitly indicates
// the byte width for representing registers in this
// function
// call @f1 [ 1, 2, 3 ] %x
08: 21 0d2300 09 0601 0602 0603 00 02
// apply @f2 %x [ ] %ignore
15: 22 0d3300 0e02 09 00 ff
// mov %x %return
1e: 01 0e02 00
// }
22: 00
// @f1 = function(%a, %b, %c) {
23: 0b 07 03 // function with 7 registers and 3 parameters
// 0: %return
// 1: %this
// 2: %a
// 3: %b
// 4: %c
// 5: %_tmp0
// ff: %ignore
// op* %b %c %_tmp0
26: 06 0e03 0e04 05
// op+ %a %_tmp0 %return
2c: 04 0e02 0e05 00
// }
2b: 00
// @f2 = function() {
33: 0b 03 00 // function with 3 registers and 0 parameters
// 0: %return
// 1: %this
// ff: %ignore
// op++ %this
36: 02 01
// }
38: 00