(script: Script, runs: number = 1000)
| 215 | } |
| 216 | |
| 217 | export function optimiseBytecodeOld(script: Script, runs: number = 1000): Script { |
| 218 | const optimisations = OptimisationsEquivFile |
| 219 | // Split by line and filter all line comments (#) |
| 220 | .split('\n') |
| 221 | .map((equiv) => equiv.trim()) |
| 222 | .filter((equiv) => !equiv.startsWith('#')) |
| 223 | // Join back the lines, and split on semicolon |
| 224 | .join('') |
| 225 | .split(';') |
| 226 | // Parse all optimisations in .equiv file |
| 227 | .map((equiv) => equiv.trim()) |
| 228 | .map((equiv) => equiv.split('<=>').map((part) => part.trim())) |
| 229 | .filter((equiv) => equiv.length === 2); |
| 230 | |
| 231 | for (let i = 0; i < runs; i += 1) { |
| 232 | const oldScript = script; |
| 233 | script = replaceOpsOld(script, optimisations); |
| 234 | |
| 235 | // Break on fixed point |
| 236 | if (scriptToAsm(oldScript) === scriptToAsm(script)) break; |
| 237 | } |
| 238 | |
| 239 | return script; |
| 240 | } |
| 241 | |
| 242 | function replaceOpsOld(script: Script, optimisations: string[][]): Script { |
| 243 | let asm = scriptToAsm(script); |
no test coverage detected