Skip to content

Commit 3985838

Browse files
committed
feat: simplify Arg in layout, remove the refs case
1 parent 765c9e1 commit 3985838

File tree

7 files changed

+27
-53
lines changed

7 files changed

+27
-53
lines changed

examples/golang/tasm-go/spec/spec.go

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/golang/tasm-go/tasm/decompile.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,8 @@ var load = loaderFunc(nil)
160160
func loadSlice(slice *cell.Slice, arg spec.Arg) *cell.Slice {
161161
// Determine the number of references in the slice
162162
countRefs := uint64(0)
163-
if arg.Refs.Empty == "refs" {
164-
countRefs = uint64(*arg.Refs.Count)
165-
} else {
163+
// Refs length can be zero if slice doesn't have any references
164+
if *arg.Refs.Len != 0 {
166165
countRefs = slice.MustLoadUInt(uint(*arg.Refs.Len))
167166
}
168167

gen/schema.json

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,6 @@
439439
{
440440
"$ref": "#/definitions/IntArg"
441441
},
442-
{
443-
"$ref": "#/definitions/RefsArg"
444-
},
445442
{
446443
"$ref": "#/definitions/DeltaArg"
447444
},
@@ -533,21 +530,6 @@
533530
"required": ["$", "len", "range"],
534531
"additionalProperties": false
535532
},
536-
"RefsArg": {
537-
"type": "object",
538-
"properties": {
539-
"$": {
540-
"type": "string",
541-
"const": "refs"
542-
},
543-
"count": {
544-
"type": "integer",
545-
"description": "Number of references"
546-
}
547-
},
548-
"required": ["$", "count"],
549-
"additionalProperties": false
550-
},
551533
"DeltaArg": {
552534
"type": "object",
553535
"properties": {

gen/tvm-specification.json

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60208,8 +60208,12 @@
6020860208
{
6020960209
"$": "slice",
6021060210
"refs": {
60211-
"$": "refs",
60212-
"count": 0
60211+
"$": "uint",
60212+
"len": 0,
60213+
"range": {
60214+
"min": "0",
60215+
"max": "0"
60216+
}
6021360217
},
6021460218
"bits": {
6021560219
"$": "uint",
@@ -60284,8 +60288,12 @@
6028460288
{
6028560289
"$": "slice",
6028660290
"refs": {
60287-
"$": "refs",
60288-
"count": 0
60291+
"$": "uint",
60292+
"len": 0,
60293+
"range": {
60294+
"min": "0",
60295+
"max": "0"
60296+
}
6028960297
},
6029060298
"bits": {
6029160299
"$": "uint",
@@ -69368,8 +69376,12 @@
6936869376
{
6936969377
"$": "slice",
6937069378
"refs": {
69371-
"$": "refs",
69372-
"count": 0
69379+
"$": "uint",
69380+
"len": 0,
69381+
"range": {
69382+
"min": "0",
69383+
"max": "0"
69384+
}
6937369385
},
6937469386
"bits": {
6937569387
"$": "uint",

src/instructions/instructions.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
export type arg =
22
| uint
33
| int
4-
| refs
54
| delta
65
| stack
76
| control
@@ -29,9 +28,6 @@ export const uint = (len: number, range: range): uint => ({$: "uint", len, range
2928
export type int = {$: "int", len: number, range: range}
3029
export const int = (len: number, range: range): int => ({$: "int", len, range})
3130

32-
export type refs = {$: "refs", count: number}
33-
export const refs = (count: number): refs => ({$: "refs", count})
34-
3531
export type delta = {$: "delta", delta: number, arg: arg}
3632
export const delta = (delta: number, arg: arg): delta => ({$: "delta", delta, arg})
3733

@@ -559,6 +555,7 @@ const uint14range = range(0n, BigInt(Math.pow(2, 14) - 1))
559555
const int8 = int(8, int8range)
560556
const int16 = int(16, int16range)
561557

558+
const uint0 = uint(0, {min: 0n, max: 0n})
562559
const uint2 = uint(2, uint2range)
563560
const uint3 = uint(3, uint3range)
564561
const uint4 = uint(4, uint4range)
@@ -1352,8 +1349,8 @@ export const instructions: Record<string, Opcode> = {
13521349
// SECTION: sdbegins
13531350
SDBEGINSX: cat("cell_deserialize", mksimple(0xd726, 16, `(_1) => exec_slice_begins_with(_1, false)`)),
13541351
SDBEGINSXQ: cat("cell_deserialize", mksimple(0xd727, 16, `(_1) => exec_slice_begins_with(_1, true)`)),
1355-
SDBEGINS: cat("cell_deserialize", mkext(0xd728 >> 2, 14, 7, seq(slice(refs(0), uint7, 3)), `exec_slice_begins_with_const`)),
1356-
SDBEGINSQ: cat("cell_deserialize", mkext(0xd72c >> 2, 14, 7, seq(slice(refs(0), uint7, 3)), `exec_slice_begins_with_const`)),
1352+
SDBEGINS: cat("cell_deserialize", mkext(0xd728 >> 2, 14, 7, seq(slice(uint0, uint7, 3)), `exec_slice_begins_with_const`)),
1353+
SDBEGINSQ: cat("cell_deserialize", mkext(0xd72c >> 2, 14, 7, seq(slice(uint0, uint7, 3)), `exec_slice_begins_with_const`)),
13571354
// END SECTION
13581355

13591356
STREFCONST: cat("cell_serialize", mkextrange(0xcf20, 0xcf21, 16, 0, seq(refCodeSlice), `exec_store_const_ref`)),
@@ -1499,7 +1496,7 @@ export const instructions: Record<string, Opcode> = {
14991496
CALLXARGS: cat("continuation_jump", mkfixedn(0xdb0, 12, 4, seq(uint4, minusOne), `exec_callx_args_p`)),
15001497
CALLXARGS_1: cat("continuation_jump", mkfixedn(0xda, 8, 8, seq(uint4, uint4), `exec_callx_args`)),
15011498

1502-
PUSHSLICE: cat("cell_const", mkext(0x8b, 8, 4, seq(slice(refs(0), uint4, 4)), `exec_push_slice`)),
1499+
PUSHSLICE: cat("cell_const", mkext(0x8b, 8, 4, seq(slice(uint0, uint4, 4)), `exec_push_slice`)),
15031500
PUSHSLICE_REFS: cat("cell_const", mkext(0x8c, 8, 7, seq(slice(delta(1, uint2), uint5, 1)), `exec_push_slice_r`)),
15041501
PUSHSLICE_LONG: cat("cell_const", mkextrange((0x8d << 3) << 7, ((0x8d << 3) + 5) << 7, 18, 10, seq(slice(uint3, uint7, 6)), `exec_push_slice_r2`)),
15051502

@@ -1515,7 +1512,7 @@ export const instructions: Record<string, Opcode> = {
15151512
// SETCP: cat("codepage", mkfixedrangen(0xff00, 0x10000, 16, 8, seq(setcpArg), `exec_set_cp`)),
15161513

15171514
PSEUDO_PUSHREF: cat("cell_const", mkfixedpseudo(0, seq(refCodeSlice))),
1518-
PSEUDO_PUSHSLICE: cat("cell_const", mkfixedpseudo(0, seq(slice(refs(1), uint(0, range(0n, 0n)), 0)))),
1515+
PSEUDO_PUSHSLICE: cat("cell_const", mkfixedpseudo(0, seq(slice(uint0, uint(0, range(0n, 0n)), 0)))),
15191516
PSEUDO_EXOTIC: cat("cell_const", mkfixedpseudo(0, seq(exoticCell))),
15201517

15211518
// TVM 11 instructions

src/instructions/tlb.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export function generateTlb(
6666
}
6767
case "slice": {
6868
const refs = unwrapDelta(arg.refs)
69-
if (refs.$ === "uint") {
69+
if (refs.$ === "uint" && refs.len !== 0) {
7070
const restriction = refs.range.min !== 0n ? ` { ${refs.range.min} <= r }` : ""
7171
result += `r: (## ${refs.len})${restriction} `
7272
}
@@ -77,7 +77,7 @@ export function generateTlb(
7777
result += `bits: (## ${bits.len})${restriction} `
7878
}
7979

80-
if (refs.$ === "uint") {
80+
if (refs.$ === "uint" && refs.len !== 0) {
8181
let delta = 0
8282
if (arg.refs.$ === "delta") {
8383
delta = arg.refs.delta
@@ -131,10 +131,6 @@ export function generateTlb(
131131
result += "flags: (## 12)"
132132
break
133133
}
134-
case "refs": {
135-
// processed in a slice branch
136-
break
137-
}
138134
case "delta": {
139135
generateArg(arg.arg)
140136
break

src/types/specification-schema.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,6 @@ export type Args =
397397
export type Arg =
398398
| UintArg
399399
| IntArg
400-
| RefsArg
401400
| DeltaArg
402401
| StackArg
403402
| ControlArg
@@ -448,14 +447,6 @@ export interface IntArg {
448447
range: ArgRange
449448
}
450449

451-
export interface RefsArg {
452-
$: "refs"
453-
/**
454-
* Number of references
455-
*/
456-
count: number
457-
}
458-
459450
export interface DeltaArg {
460451
$: "delta"
461452
/**

0 commit comments

Comments
 (0)