(code:codes)
| 49 | d: number = 0, |
| 50 | codes: opcodes = [], |
| 51 | fix = function diffview_opcodes_fix(code:codes): void { |
| 52 | let len:number = codes.length - 1, |
| 53 | prior:[string, number, number, number, number] = codes[len]; |
| 54 | if (prior !== undefined) { |
| 55 | if (prior[0] === code[0]) { |
| 56 | if (code[0] === "replace" || code[0] === "equal") { |
| 57 | prior[2] = code[2]; |
| 58 | prior[4] = code[4]; |
| 59 | } else if (code[0] === "delete") { |
| 60 | prior[2] = code[2]; |
| 61 | } else if (code[0] === "insert") { |
| 62 | prior[4] = code[4]; |
| 63 | } |
| 64 | if (codes.length > 1 && prior[2] === code[2] && prior[4] === code[4]) { |
| 65 | if (prior[0] === "insert" && two[codes[codes.length - 2][4] - (prior[4] - prior[3])] === one[codes[codes.length - 2][1]]) { |
| 66 | codes.pop(); |
| 67 | len = len - 1; |
| 68 | codes[len] = ["insert", -1, -1, codes[len][3], codes[len][4] - (prior[4] - prior[3])]; |
| 69 | if (codes[len][4] < 0) { |
| 70 | codes[len][4] = prior[4] - prior[3]; |
| 71 | } |
| 72 | do { |
| 73 | // one-sided replacement undo, more like undelete |
| 74 | table[one[c]][0] = table[one[c]][0] + 1; |
| 75 | c = c - 1; |
| 76 | } while (c > codes[codes.length - 2][2]); |
| 77 | d = codes[len][4] - 1; |
| 78 | } |
| 79 | } |
| 80 | return; |
| 81 | } |
| 82 | if (prior[0] === "insert" && prior[4] - prior[3] === 1) { |
| 83 | if (code[2] - code[1] === 1) { |
| 84 | if (code[0] === "replace") { |
| 85 | codes[len] = ["replace", code[1], code[2], prior[3], prior[4]]; |
| 86 | prior = codes[len]; |
| 87 | code = ["insert", -1, -2, code[3], code[4]]; |
| 88 | } else if (code[0] === "delete") { |
| 89 | code = ["replace", code[1], code[2], prior[3], prior[4]]; |
| 90 | codes.pop(); |
| 91 | len = len - 1; |
| 92 | prior = codes[len]; |
| 93 | if (codes[len][0] === "replace") { |
| 94 | prior[2] = code[2]; |
| 95 | prior[4] = code[4]; |
| 96 | return; |
| 97 | } |
| 98 | } |
| 99 | } else if (code[0] === "delete") { |
| 100 | codes[len] = ["replace", code[1], code[1] + 1, prior[3], prior[4]]; |
| 101 | prior = codes[len]; |
| 102 | code[1] = code[1] + 1; |
| 103 | } else if (code[0] === "replace") { |
| 104 | codes[len] = ["replace", code[1], code[1] + 1, prior[3], prior[4]]; |
| 105 | prior = codes[len]; |
| 106 | c = (prior[2] > 0) |
| 107 | ? prior[2] |
| 108 | : 0; |
no outgoing calls
no test coverage detected