MCPcopy Create free account
hub / github.com/CashScript/cashscript / optimiseBytecode

Function optimiseBytecode

packages/utils/src/script.ts:165–195  ·  view source on GitHub ↗
(
  script: Script,
  locationData: FullLocationData,
  logs: LogEntry[],
  requires: RequireStatement[],
  sourceTags: SourceTagEntry[],
  constructorParamLength: number,
  runs: number = 1000,
)

Source from the content-addressed store, hash-verified

163}
164
165export function optimiseBytecode(
166 script: Script,
167 locationData: FullLocationData,
168 logs: LogEntry[],
169 requires: RequireStatement[],
170 sourceTags: SourceTagEntry[],
171 constructorParamLength: number,
172 runs: number = 1000,
173): OptimiseBytecodeResult {
174 for (let i = 0; i < runs; i += 1) {
175 const oldScript = script;
176 const {
177 script: newScript,
178 locationData: newLocationData,
179 logs: newLogs,
180 requires: newRequires,
181 sourceTags: newSourceTags,
182 } = replaceOps(script, locationData, logs, requires, sourceTags, constructorParamLength, optimisationReplacements);
183
184 // Break on fixed point
185 if (scriptToAsm(oldScript) === scriptToAsm(newScript)) break;
186
187 script = newScript;
188 locationData = newLocationData;
189 logs = newLogs;
190 requires = newRequires;
191 sourceTags = newSourceTags;
192 }
193
194 return { script, locationData, logs, requires, sourceTags: reconcileScopeCleanupTags(script, sourceTags) };
195}
196
197const SCOPE_CLEANUP_OPCODES = [Op.OP_DROP, Op.OP_NIP, Op.OP_2DROP];
198

Callers 1

compileStringFunction · 0.90

Calls 3

replaceOpsFunction · 0.85
scriptToAsmFunction · 0.85

Tested by

no test coverage detected