Skip to content

Commit 602a2ee

Browse files
authored
feat: source maps support (#10)
1 parent 6795294 commit 602a2ee

File tree

12 files changed

+246
-108
lines changed

12 files changed

+246
-108
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ton-assembly",
3-
"version": "0.2.4",
3+
"version": "0.3.0",
44
"description": "TON assembler and disassembler",
55
"keywords": [
66
"ton",

src/coverage/data.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ export const buildFuncLineInfo = (traces: TraceInfo[], funcCode: string): Line[]
9595
for (const trace of traces) {
9696
const perLineSteps: Map<number, Step[]> = new Map()
9797
for (const step of trace.steps) {
98-
if (step.funcLoc === undefined) continue
99-
const line = step.funcLoc.line
98+
if (step.sourceMapEntries.length === 0) continue
99+
const line = step.sourceMapEntries[0]?.loc.line ?? 0
100100

101101
perLineSteps.set(line, [...(perLineSteps.get(line) ?? []), step])
102102
}

src/coverage/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type {Cell} from "@ton/core"
22
import type { Mapping} from "../runtime";
33
import {compileCellWithMapping, decompileCell} from "../runtime"
44
import {print, parse} from "../text"
5-
import {createMappingInfo, createTraceInfoPerTransaction, loadFuncMapping} from "../trace"
5+
import {createMappingInfo, createTraceInfoPerTransaction} from "../trace"
66
import {buildFuncLineInfo, buildLineInfo, generateCoverageSummary} from "./data"
77
import {readFileSync} from "node:fs"
88

@@ -22,13 +22,13 @@ export function collectFuncCoverage(
2222
cell: Cell,
2323
logs: string,
2424
funcSources: string,
25-
funcMappingPath: string,
25+
_funcMappingPath: string,
2626
) {
2727
const [_, mapping] = recompileCell(cell, true)
2828
const info = createMappingInfo(mapping)
2929

30-
const funcMapping = loadFuncMapping(readFileSync(funcMappingPath, "utf8"))
31-
const traceInfos = createTraceInfoPerTransaction(logs, info, funcMapping)
30+
// const funcMapping = loadFuncMapping(readFileSync(funcMappingPath, "utf8"))
31+
const traceInfos = createTraceInfoPerTransaction(logs, info, undefined)
3232
const func = readFileSync(funcSources, "utf8")
3333
const combinedLines = buildFuncLineInfo(traceInfos, func)
3434
const combinedSummary = generateCoverageSummary(combinedLines)

src/coverage/test/__snapshots__/asm-coverage.spec.ts.snap

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33
exports[`asm coverage dictionary 1`] = `
44
"Coverage Summary:
55
Lines: 4/8 (50.00%)
6-
Total Gas: 296
7-
Total Hits: 4
6+
Total Gas: 301
7+
Total Hits: 5
88
99
Instruction Stats:
10-
DICTIGETJMPZ | 226 gas | 1 hits | 226 avg gas | 76.35%
11-
DICTPUSHCONST | 34 gas | 1 hits | 34 avg gas | 11.49%
12-
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 6.08%
13-
INC | 18 gas | 1 hits | 18 avg gas | 6.08%
10+
DICTIGETJMPZ | 226 gas | 1 hits | 226 avg gas | 75.08%
11+
DICTPUSHCONST | 34 gas | 1 hits | 34 avg gas | 11.30%
12+
INC | 23 gas | 2 hits | 11.5 avg gas | 7.64%
13+
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 5.98%
1414
1515
Annotated Code:
1616
1 ✓ | DICTPUSHCONST 19 [ | gas:34 | hits:1
1717
2 | 0 => { | |
1818
3| PUSHINT_4 10 | gas:18 | hits:1
19-
4| INC | gas:18 | hits:1
19+
4| INC | gas:23 | hits:2
2020
5 | } | |
2121
6 | 2 => { | |
2222
7| PUSHINT_4 5 | |
@@ -31,14 +31,14 @@ Annotated Code:
3131
exports[`asm coverage dictionary 2 1`] = `
3232
"Coverage Summary:
3333
Lines: 4/8 (50.00%)
34-
Total Gas: 296
35-
Total Hits: 4
34+
Total Gas: 301
35+
Total Hits: 5
3636
3737
Instruction Stats:
38-
DICTIGETJMPZ | 226 gas | 1 hits | 226 avg gas | 76.35%
39-
DICTPUSHCONST | 34 gas | 1 hits | 34 avg gas | 11.49%
40-
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 6.08%
41-
INC | 18 gas | 1 hits | 18 avg gas | 6.08%
38+
DICTIGETJMPZ | 226 gas | 1 hits | 226 avg gas | 75.08%
39+
DICTPUSHCONST | 34 gas | 1 hits | 34 avg gas | 11.30%
40+
INC | 23 gas | 2 hits | 11.5 avg gas | 7.64%
41+
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 5.98%
4242
4343
Annotated Code:
4444
1 ✓ | DICTPUSHCONST 19 [ | gas:34 | hits:1
@@ -48,7 +48,7 @@ Annotated Code:
4848
5 | } | |
4949
6 | 2 => { | |
5050
7| PUSHINT_4 5 | gas:18 | hits:1
51-
8| INC | gas:18 | hits:1
51+
8| INC | gas:23 | hits:2
5252
9 | } | |
5353
10 ✗ | ] | |
5454
11 ✓ | DICTIGETJMPZ | gas:226 | hits:1
@@ -80,15 +80,15 @@ Annotated Code:
8080
exports[`asm coverage nested try with rethrow 1`] = `
8181
"Coverage Summary:
8282
Lines: 9/9 (100.00%)
83-
Total Gas: 334
84-
Total Hits: 9
83+
Total Gas: 344
84+
Total Hits: 11
8585
8686
Instruction Stats:
87-
PUSHCONT | 104 gas | 4 hits | 26 avg gas | 31.14%
88-
THROW | 84 gas | 1 hits | 84 avg gas | 25.15%
89-
THROWANY | 76 gas | 1 hits | 76 avg gas | 22.75%
90-
TRY | 52 gas | 2 hits | 26 avg gas | 15.57%
91-
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 5.39%
87+
PUSHCONT | 104 gas | 4 hits | 26 avg gas | 30.23%
88+
THROW | 84 gas | 1 hits | 84 avg gas | 24.42%
89+
THROWANY | 76 gas | 1 hits | 76 avg gas | 22.09%
90+
TRY | 52 gas | 2 hits | 26 avg gas | 15.12%
91+
PUSHINT_4 | 28 gas | 3 hits | 9.33 avg gas | 8.14%
9292
9393
Annotated Code:
9494
1 ✓ | PUSHCONT { | gas:26 | hits:1
@@ -101,7 +101,7 @@ Annotated Code:
101101
8| TRY | gas:26 | hits:1
102102
9 | } | |
103103
10 ✓ | PUSHCONT { | gas:26 | hits:1
104-
11| PUSHINT_4 2 | gas:18 | hits:1
104+
11| PUSHINT_4 2 | gas:28 | hits:3
105105
12 | } | |
106106
13 ✓ | TRY | gas:26 | hits:1
107107
14 | | |"
@@ -110,13 +110,13 @@ Annotated Code:
110110
exports[`asm coverage simple if 1`] = `
111111
"Coverage Summary:
112112
Lines: 4/7 (57.14%)
113-
Total Gas: 80
114-
Total Hits: 4
113+
Total Gas: 85
114+
Total Hits: 5
115115
116116
Instruction Stats:
117-
PUSHINT_4 | 36 gas | 2 hits | 18 avg gas | 45.00%
118-
PUSHCONT | 26 gas | 1 hits | 26 avg gas | 32.50%
119-
IF | 18 gas | 1 hits | 18 avg gas | 22.50%
117+
PUSHINT_4 | 36 gas | 2 hits | 18 avg gas | 42.35%
118+
PUSHCONT | 26 gas | 1 hits | 26 avg gas | 30.59%
119+
IF | 23 gas | 2 hits | 11.5 avg gas | 27.06%
120120
121121
Annotated Code:
122122
1 ✓ | PUSHINT_4 0 | gas:18 | hits:1
@@ -126,27 +126,27 @@ Annotated Code:
126126
5| INC | |
127127
6| INC | |
128128
7 | } | |
129-
8 ✓ | IF | gas:18 | hits:1
129+
8 ✓ | IF | gas:23 | hits:2
130130
9 | | |"
131131
`;
132132

133133
exports[`asm coverage simple if-else 1`] = `
134134
"Coverage Summary:
135135
Lines: 6/7 (85.71%)
136-
Total Gas: 124
137-
Total Hits: 6
136+
Total Gas: 134
137+
Total Hits: 8
138138
139139
Instruction Stats:
140-
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 41.94%
141-
PUSHINT_4 | 36 gas | 2 hits | 18 avg gas | 29.03%
142-
INC | 18 gas | 1 hits | 18 avg gas | 14.52%
143-
IFELSE | 18 gas | 1 hits | 18 avg gas | 14.52%
140+
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 38.81%
141+
PUSHINT_4 | 36 gas | 2 hits | 18 avg gas | 26.87%
142+
INC | 28 gas | 3 hits | 9.33 avg gas | 20.90%
143+
IFELSE | 18 gas | 1 hits | 18 avg gas | 13.43%
144144
145145
Annotated Code:
146146
1 ✓ | PUSHINT_4 0 | gas:18 | hits:1
147147
2 ✓ | PUSHINT_4 -1 | gas:18 | hits:1
148148
3 ✓ | PUSHCONT { | gas:26 | hits:1
149-
4| INC | gas:18 | hits:1
149+
4| INC | gas:28 | hits:3
150150
5 | } | |
151151
6 ✓ | PUSHCONT { | gas:26 | hits:1
152152
7| DEC | |
@@ -158,23 +158,23 @@ Annotated Code:
158158
exports[`asm coverage try with throw 1`] = `
159159
"Coverage Summary:
160160
Lines: 6/6 (100.00%)
161-
Total Gas: 198
162-
Total Hits: 6
161+
Total Gas: 208
162+
Total Hits: 8
163163
164164
Instruction Stats:
165-
THROW | 84 gas | 1 hits | 84 avg gas | 42.42%
166-
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 26.26%
167-
TRY | 26 gas | 1 hits | 26 avg gas | 13.13%
168-
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 9.09%
169-
SUB | 18 gas | 1 hits | 18 avg gas | 9.09%
165+
THROW | 84 gas | 1 hits | 84 avg gas | 40.38%
166+
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 25.00%
167+
SUB | 28 gas | 3 hits | 9.33 avg gas | 13.46%
168+
TRY | 26 gas | 1 hits | 26 avg gas | 12.50%
169+
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 8.65%
170170
171171
Annotated Code:
172172
1 ✓ | PUSHINT_4 10 | gas:18 | hits:1
173173
2 ✓ | PUSHCONT { | gas:26 | hits:1
174174
3| THROW 10 | gas:84 | hits:1
175175
4 | } | |
176176
5 ✓ | PUSHCONT { | gas:26 | hits:1
177-
6| SUB | gas:18 | hits:1
177+
6| SUB | gas:28 | hits:3
178178
7 | } | |
179179
8 ✓ | TRY | gas:26 | hits:1
180180
9 | | |"
@@ -183,19 +183,19 @@ Annotated Code:
183183
exports[`asm coverage try without throw 1`] = `
184184
"Coverage Summary:
185185
Lines: 5/6 (83.33%)
186-
Total Gas: 114
187-
Total Hits: 5
186+
Total Gas: 124
187+
Total Hits: 7
188188
189189
Instruction Stats:
190-
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 45.61%
191-
TRY | 26 gas | 1 hits | 26 avg gas | 22.81%
192-
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 15.79%
193-
INC | 18 gas | 1 hits | 18 avg gas | 15.79%
190+
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 41.94%
191+
INC | 28 gas | 3 hits | 9.33 avg gas | 22.58%
192+
TRY | 26 gas | 1 hits | 26 avg gas | 20.97%
193+
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 14.52%
194194
195195
Annotated Code:
196196
1 ✓ | PUSHINT_4 10 | gas:18 | hits:1
197197
2 ✓ | PUSHCONT { | gas:26 | hits:1
198-
3| INC | gas:18 | hits:1
198+
3| INC | gas:28 | hits:3
199199
4 | } | |
200200
5 ✓ | PUSHCONT { | gas:26 | hits:1
201201
6| DEC | |
@@ -207,30 +207,30 @@ Annotated Code:
207207
exports[`asm coverage while loop with break 1`] = `
208208
"Coverage Summary:
209209
Lines: 10/10 (100.00%)
210-
Total Gas: 1002
211-
Total Hits: 45
210+
Total Gas: 1067
211+
Total Hits: 58
212212
213213
Instruction Stats:
214-
DUP | 252 gas | 14 hits | 18 avg gas | 25.15%
215-
GTINT | 182 gas | 7 hits | 26 avg gas | 18.16%
216-
LESSINT | 182 gas | 7 hits | 26 avg gas | 18.16%
217-
IFRETALT | 182 gas | 7 hits | 26 avg gas | 18.16%
218-
DEC | 108 gas | 6 hits | 18 avg gas | 10.78%
219-
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 5.19%
220-
WHILEBRK | 26 gas | 1 hits | 26 avg gas | 2.59%
221-
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 1.80%
214+
DUP | 252 gas | 14 hits | 18 avg gas | 23.62%
215+
GTINT | 217 gas | 14 hits | 15.5 avg gas | 20.34%
216+
LESSINT | 182 gas | 7 hits | 26 avg gas | 17.06%
217+
IFRETALT | 182 gas | 7 hits | 26 avg gas | 17.06%
218+
DEC | 138 gas | 12 hits | 11.5 avg gas | 12.93%
219+
PUSHCONT | 52 gas | 2 hits | 26 avg gas | 4.87%
220+
WHILEBRK | 26 gas | 1 hits | 26 avg gas | 2.44%
221+
PUSHINT_4 | 18 gas | 1 hits | 18 avg gas | 1.69%
222222
223223
Annotated Code:
224224
1 ✓ | PUSHINT_4 10 | gas:18 | hits:1
225225
2 ✓ | PUSHCONT { | gas:26 | hits:1
226226
3| DUP | gas:126 | hits:7
227-
4| GTINT 0 | gas:182 | hits:7
227+
4| GTINT 0 | gas:217 | hits:14
228228
5 | } | |
229229
6 ✓ | PUSHCONT { | gas:26 | hits:1
230230
7| DUP | gas:126 | hits:7
231231
8| LESSINT 5 | gas:182 | hits:7
232232
9| IFRETALT | gas:182 | hits:7
233-
10| DEC | gas:108 | hits:6
233+
10| DEC | gas:138 | hits:12
234234
11 | } | |
235235
12 ✓ | WHILEBRK | gas:26 | hits:1
236236
13 | | |"

0 commit comments

Comments
 (0)