@tact-lang/opcode
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -8,2 +8,7 @@ # Changelog | ||
## [0.0.5] - 2023-03-24 | ||
## Changed | ||
- Change printer interface and include more lines in opcode related printer | ||
## [0.0.4] - 2023-03-24 | ||
@@ -10,0 +15,0 @@ |
@@ -5,2 +5,3 @@ "use strict"; | ||
const ton_core_1 = require("ton-core"); | ||
const opcodeToString_1 = require("../codepage/opcodeToString"); | ||
const Writer_1 = require("../utils/Writer"); | ||
@@ -53,3 +54,3 @@ const decompiler_1 = require("./decompiler"); | ||
}); | ||
extracted.set(name, { ref: true, rendered: w.end() }); | ||
extracted.set(name, { ref: true, rendered: w.end(), src: cell }); | ||
return name; | ||
@@ -71,3 +72,3 @@ } | ||
}); | ||
extracted.set(name, { ref: false, rendered: w.end() }); | ||
extracted.set(name, { ref: false, rendered: w.end(), src: value }); | ||
} | ||
@@ -81,3 +82,5 @@ // Render methods | ||
for (let [key, value] of extracted) { | ||
writer.append(printer(`${key} ${value.ref ? 'PROCREF' : 'PROC'}:<{`, writer.indent)); | ||
let hash = value.src.hash().toString('hex'); | ||
let opstr = `${key} ${value.ref ? 'PROCREF' : 'PROC'}:<{`; | ||
writer.append(printer({ op: opstr, offset: 0, length: 0, hash }, writer.indent)); | ||
writer.inIndent(() => { | ||
@@ -88,3 +91,4 @@ value.rendered.split('\n').forEach(line => { | ||
}); | ||
writer.append(printer(`}>`, writer.indent)); | ||
opstr = `}>`; | ||
writer.append(printer({ op: opstr, offset: 0, length: 0, hash }, writer.indent)); | ||
} | ||
@@ -100,3 +104,4 @@ }); | ||
let id = args.callRefExtractor(op.op.args[0]); | ||
writer.append(printer(`${id} INLINECALLDICT`, writer.indent)); | ||
let opstr = `${id} INLINECALLDICT`; | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
continue; | ||
@@ -112,3 +117,4 @@ } | ||
let c = op.op.args[0]; | ||
writer.append(printer('<{', writer.indent)); | ||
let opstr = '<{'; | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
writer.inIndent(() => { | ||
@@ -123,3 +129,4 @@ decompileCell({ | ||
}); | ||
writer.append(printer('}> ' + op.op.code, writer.indent)); | ||
opstr = '}> ' + op.op.code; | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
continue; | ||
@@ -132,5 +139,5 @@ } | ||
} | ||
let op2 = op.op; // For type checking | ||
// All remaining opcodes | ||
writer.append(printer({ op: op2, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
let opstr = (0, opcodeToString_1.opcodeToString)(op.op); | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
} | ||
@@ -137,0 +144,0 @@ } |
@@ -1,4 +0,3 @@ | ||
import { OpCode } from "../codepage/opcodes.gen"; | ||
export type Printer = (src: string | { | ||
op: OpCode; | ||
op: string; | ||
hash: string; | ||
@@ -5,0 +4,0 @@ offset: number; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createTextPrinter = void 0; | ||
const opcodeToString_1 = require("../codepage/opcodeToString"); | ||
function createTextPrinter(indentWidth) { | ||
@@ -11,3 +10,3 @@ return (src, indent) => { | ||
else { | ||
return ' '.repeat(indentWidth * indent) + (0, opcodeToString_1.opcodeToString)(src.op); | ||
return ' '.repeat(indentWidth * indent) + src.op; | ||
} | ||
@@ -14,0 +13,0 @@ }; |
{ | ||
"name": "@tact-lang/opcode", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"main": "dist/index.js", | ||
@@ -5,0 +5,0 @@ "repository": "https://github.com/tact-lang/ton-opcode.git", |
import { Cell, Dictionary, DictionaryValue } from "ton-core"; | ||
import { OpCode } from "../codepage/opcodes.gen"; | ||
import { opcodeToString } from "../codepage/opcodeToString"; | ||
import { Maybe } from "../utils/maybe"; | ||
@@ -37,3 +37,3 @@ import { Writer } from "../utils/Writer"; | ||
let unknownIndex = 0; | ||
let extracted = new Map<string, { ref: boolean, rendered: string }>(); | ||
let extracted = new Map<string, { ref: boolean, rendered: string, src: Cell }>(); | ||
let callRefs = new Map<string, string>(); | ||
@@ -65,3 +65,3 @@ function extract(cell: Cell) { | ||
}); | ||
extracted.set(name, { ref: true, rendered: w.end() }); | ||
extracted.set(name, { ref: true, rendered: w.end(), src: cell }); | ||
return name; | ||
@@ -83,3 +83,3 @@ } | ||
}); | ||
extracted.set(name, { ref: false, rendered: w.end() }); | ||
extracted.set(name, { ref: false, rendered: w.end(), src: value }); | ||
} | ||
@@ -94,3 +94,5 @@ | ||
for (let [key, value] of extracted) { | ||
writer.append(printer(`${key} ${value.ref ? 'PROCREF' : 'PROC'}:<{`, writer.indent)); | ||
let hash = value.src.hash().toString('hex'); | ||
let opstr = `${key} ${value.ref ? 'PROCREF' : 'PROC'}:<{`; | ||
writer.append(printer({ op: opstr, offset: 0, length: 0, hash }, writer.indent)); | ||
writer.inIndent(() => { | ||
@@ -101,3 +103,4 @@ value.rendered.split('\n').forEach(line => { | ||
}); | ||
writer.append(printer(`}>`, writer.indent)); | ||
opstr = `}>`; | ||
writer.append(printer({ op: opstr, offset: 0, length: 0, hash }, writer.indent)); | ||
} | ||
@@ -115,3 +118,4 @@ }); | ||
let id = args.callRefExtractor(op.op.args[0]); | ||
writer.append(printer(`${id} INLINECALLDICT`, writer.indent)); | ||
let opstr = `${id} INLINECALLDICT`; | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
continue; | ||
@@ -128,3 +132,4 @@ } | ||
let c = op.op.args[0]; | ||
writer.append(printer('<{', writer.indent)); | ||
let opstr = '<{'; | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
writer.inIndent(() => { | ||
@@ -139,3 +144,4 @@ decompileCell({ | ||
}) | ||
writer.append(printer('}> ' + op.op.code, writer.indent)); | ||
opstr = '}> ' + op.op.code; | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
continue; | ||
@@ -149,6 +155,6 @@ } | ||
} | ||
let op2: OpCode = op.op; // For type checking | ||
// All remaining opcodes | ||
writer.append(printer({ op: op2, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
let opstr = opcodeToString(op.op); | ||
writer.append(printer({ op: opstr, offset: op.offset, length: op.length, hash }, writer.indent)); | ||
} | ||
@@ -155,0 +161,0 @@ } |
@@ -1,6 +0,3 @@ | ||
import { OpCode } from "../codepage/opcodes.gen"; | ||
import { opcodeToString } from "../codepage/opcodeToString"; | ||
export type Printer = (src: string | { op: string, hash: string, offset: number, length: number }, indent: number) => string; | ||
export type Printer = (src: string | { op: OpCode, hash: string, offset: number, length: number }, indent: number) => string; | ||
export function createTextPrinter(indentWidth: number): Printer { | ||
@@ -11,5 +8,5 @@ return (src, indent) => { | ||
} else { | ||
return ' '.repeat(indentWidth * indent) + opcodeToString(src.op); | ||
return ' '.repeat(indentWidth * indent) + src.op; | ||
} | ||
}; | ||
} |
5350614
5824