Skip to content

Commit 5af4626

Browse files
committed
Change addCsiHandler/addOscHandler to not use Object.assign.
1 parent 6351a5b commit 5af4626

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

src/EscapeSequenceParser.ts

+25-22
Original file line numberDiff line numberDiff line change
@@ -307,25 +307,26 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
307307
addCsiHandler(flag: string, callback: (params: number[], collect: string) => boolean): IDisposable {
308308
const index = flag.charCodeAt(0);
309309
const oldHead = this._csiHandlers[index];
310-
const newHead = Object.assign(
310+
const parser = this;
311+
const newHead =
311312
(params: number[], collect: string): void => {
312-
if (callback(params, collect)) { }
313-
else if (newHead.nextHandler) { newHead.nextHandler(params, collect); }
314-
else { this._csiHandlerFb(collect, params, index); }
315-
},
316-
{ nextHandler: oldHead,
317-
dispose(): void {
318-
let previous = null; let cur = this._csiHandlers[index];
313+
if (! callback(params, collect)) {
314+
if (newHead.nextHandler) { newHead.nextHandler(params, collect); }
315+
else { this._csiHandlerFb(collect, params, index); }
316+
}
317+
};
318+
newHead.nextHandler = oldHead;
319+
newHead.dispose = function (): void {
320+
let previous = null; let cur = parser._csiHandlers[index];
319321
for (; cur && cur.nextHandler;
320322
previous = cur, cur = cur.nextHandler) {
321323
if (cur === newHead) {
322324
if (previous) { previous.nextHandler = cur.nextHandler; }
323-
else { this._csiHandlers[index] = cur.nextHandler; }
325+
else { parser._csiHandlers[index] = cur.nextHandler; }
324326
break;
325327
}
326328
}
327-
}
328-
});
329+
};
329330
this._csiHandlers[index] = newHead;
330331
return newHead;
331332
}
@@ -352,25 +353,27 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
352353

353354
addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable {
354355
const oldHead = this._oscHandlers[ident];
355-
const newHead = Object.assign(
356+
const parser = this;
357+
const newHead =
356358
(data: string): void => {
357-
if (callback(data)) { }
358-
else if (newHead.nextHandler) { newHead.nextHandler(data); }
359-
else { this._oscHandlerFb(ident, data); }
360-
},
361-
{ nextHandler: oldHead,
362-
dispose(): void {
363-
let previous = null; let cur = this._oscHandlers[ident];
359+
if (! callback(data)) {
360+
if (newHead.nextHandler) { newHead.nextHandler(data); }
361+
else { this._oscHandlerFb(ident, data); }
362+
}
363+
};
364+
newHead.nextHandler = oldHead;
365+
newHead.dispose =
366+
function (): void {
367+
let previous = null; let cur = parser._oscHandlers[ident];
364368
for (; cur && cur.nextHandler;
365369
previous = cur, cur = cur.nextHandler) {
366370
if (cur === newHead) {
367371
if (previous) { previous.nextHandler = cur.nextHandler; }
368-
else { this._oscHandlers[ident] = cur.nextHandler; }
372+
else { parser._oscHandlers[ident] = cur.nextHandler; }
369373
break;
370374
}
371375
}
372-
}
373-
});
376+
};
374377
this._oscHandlers[ident] = newHead;
375378
return newHead;
376379
}

0 commit comments

Comments
 (0)