diff --git a/src/common/CircularList.ts b/src/common/CircularList.ts index e12191e352..542dbf12ab 100644 --- a/src/common/CircularList.ts +++ b/src/common/CircularList.ts @@ -11,7 +11,7 @@ import { ICircularList } from './Types'; * overriding values at the start of the list. */ export class CircularList extends EventEmitter implements ICircularList { - protected _array: T[]; + protected _array: (T | undefined)[]; private _startIndex: number; private _length: number; @@ -36,7 +36,7 @@ export class CircularList extends EventEmitter implements ICircularList { // Reconstruct array, starting at index 0. Only transfer values from the // indexes 0 to length. - const newArray = new Array(newMaxLength); + const newArray = new Array(newMaxLength); for (let i = 0; i < Math.min(newMaxLength, this.length); i++) { newArray[i] = this._array[this._getCyclicIndex(i)]; } @@ -66,7 +66,7 @@ export class CircularList extends EventEmitter implements ICircularList { * @param index The index of the value to get. * @return The value corresponding to the index. */ - public get(index: number): T { + public get(index: number): T | undefined { return this._array[this._getCyclicIndex(index)]; } @@ -78,7 +78,7 @@ export class CircularList extends EventEmitter implements ICircularList { * @param index The index to set. * @param value The value to set. */ - public set(index: number, value: T): void { + public set(index: number, value: T | undefined): void { this._array[this._getCyclicIndex(index)] = value; } @@ -104,7 +104,7 @@ export class CircularList extends EventEmitter implements ICircularList { * Removes and returns the last value on the list. * @return The popped value. */ - public pop(): T { + public pop(): T | undefined { return this._array[this._getCyclicIndex(this._length-- - 1)]; } diff --git a/src/common/EventEmitter.ts b/src/common/EventEmitter.ts index 56b1e149d8..ae8f0069dc 100644 --- a/src/common/EventEmitter.ts +++ b/src/common/EventEmitter.ts @@ -30,14 +30,15 @@ export class EventEmitter extends Disposable implements IEventEmitter, IDisposab public addDisposableListener(type: string, handler: XtermListener): IDisposable { // TODO: Rename addDisposableEventListener to more easily disambiguate from Dom listener this.on(type, handler); + let disposed = false; return { dispose: () => { - if (!handler) { + if (disposed) { // Already disposed return; } this.off(type, handler); - handler = null; + disposed = true; } }; } diff --git a/src/common/Types.ts b/src/common/Types.ts index d95b52e0ba..aabe721eb5 100644 --- a/src/common/Types.ts +++ b/src/common/Types.ts @@ -25,10 +25,10 @@ export interface ICircularList extends IEventEmitter { length: number; maxLength: number; - get(index: number): T; + get(index: number): T | undefined; set(index: number, value: T): void; push(value: T): void; - pop(): T; + pop(): T | undefined; splice(start: number, deleteCount: number, ...items: T[]): void; trimStart(count: number): void; shiftElements(start: number, count: number, offset: number): void;