diff --git a/addons/xterm-addon-unicode11/src/UnicodeV11.ts b/addons/xterm-addon-unicode11/src/UnicodeV11.ts index d9d548d6e4..b616091ab3 100644 --- a/addons/xterm-addon-unicode11/src/UnicodeV11.ts +++ b/addons/xterm-addon-unicode11/src/UnicodeV11.ts @@ -4,7 +4,6 @@ */ import { IUnicodeVersionProvider } from 'xterm'; -import { fill } from 'common/TypedArrayUtils'; type CharWidth = 0 | 1 | 2; @@ -198,15 +197,15 @@ export class UnicodeV11 implements IUnicodeVersionProvider { constructor() { if (!table) { table = new Uint8Array(65536); - fill(table, 1); + table.fill(1); table[0] = 0; - fill(table, 0, 1, 32); - fill(table, 0, 0x7f, 0xa0); + table.fill(0, 1, 32); + table.fill(0, 0x7f, 0xa0); for (let r = 0; r < BMP_COMBINING.length; ++r) { - fill(table, 0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1); + table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1); } for (let r = 0; r < BMP_WIDE.length; ++r) { - fill(table, 2, BMP_WIDE[r][0], BMP_WIDE[r][1] + 1); + table.fill(2, BMP_WIDE[r][0], BMP_WIDE[r][1] + 1); } } } diff --git a/addons/xterm-addon-webgl/src/GlyphRenderer.ts b/addons/xterm-addon-webgl/src/GlyphRenderer.ts index f5ce46eb6b..d78d9ce947 100644 --- a/addons/xterm-addon-webgl/src/GlyphRenderer.ts +++ b/addons/xterm-addon-webgl/src/GlyphRenderer.ts @@ -5,7 +5,6 @@ import { createProgram, PROJECTION_MATRIX } from './WebglUtils'; import { IWebGL2RenderingContext, IWebGLVertexArrayObject, IRenderModel } from './Types'; -import { fill } from 'common/TypedArrayUtils'; import { NULL_CELL_CODE } from 'common/buffer/Constants'; import { Terminal } from 'xterm'; import { IRasterizedGlyph, IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types'; @@ -225,7 +224,7 @@ export class GlyphRenderer extends Disposable { // Exit early if this is a null character, allow space character to continue as it may have // underline/strikethrough styles if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) { - fill(array, 0, $i, $i + INDICES_PER_CELL - 1 - CELL_POSITION_INDICES); + array.fill(0, $i, $i + INDICES_PER_CELL - 1 - CELL_POSITION_INDICES); return; } diff --git a/addons/xterm-addon-webgl/src/RenderModel.ts b/addons/xterm-addon-webgl/src/RenderModel.ts index b1542d984d..db364db4fa 100644 --- a/addons/xterm-addon-webgl/src/RenderModel.ts +++ b/addons/xterm-addon-webgl/src/RenderModel.ts @@ -4,7 +4,6 @@ */ import { IRenderModel } from './Types'; -import { fill } from 'common/TypedArrayUtils'; import { ISelectionRenderModel } from 'browser/renderer/shared/Types'; import { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel'; @@ -35,7 +34,7 @@ export class RenderModel implements IRenderModel { } public clear(): void { - fill(this.cells, 0, 0); - fill(this.lineLengths, 0, 0); + this.cells.fill(0, 0); + this.lineLengths.fill(0, 0); } } diff --git a/src/common/TypedArrayUtils.test.ts b/src/common/TypedArrayUtils.test.ts index f0a15c84d6..6390854b61 100644 --- a/src/common/TypedArrayUtils.test.ts +++ b/src/common/TypedArrayUtils.test.ts @@ -3,7 +3,7 @@ * @license MIT */ import { assert } from 'chai'; -import { fillFallback, concat } from 'common/TypedArrayUtils'; +import { concat } from 'common/TypedArrayUtils'; type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array; @@ -14,77 +14,6 @@ function deepEquals(a: TypedArray, b: TypedArray): void { } } -describe('polyfill conformance tests', function(): void { - describe('TypedArray.fill', function(): void { - it('should work with all typed array types', function(): void { - const u81 = new Uint8Array(5); - const u82 = new Uint8Array(5); - deepEquals(fillFallback(u81, 2), u82.fill(2)); - deepEquals(fillFallback(u81, -1), u82.fill(-1)); - const u161 = new Uint16Array(5); - const u162 = new Uint16Array(5); - deepEquals(fillFallback(u161, 2), u162.fill(2)); - deepEquals(fillFallback(u161, 65535), u162.fill(65535)); - deepEquals(fillFallback(u161, -1), u162.fill(-1)); - const u321 = new Uint32Array(5); - const u322 = new Uint32Array(5); - deepEquals(fillFallback(u321, 2), u322.fill(2)); - deepEquals(fillFallback(u321, 65537), u322.fill(65537)); - deepEquals(fillFallback(u321, -1), u322.fill(-1)); - const i81 = new Int8Array(5); - const i82 = new Int8Array(5); - deepEquals(fillFallback(i81, 2), i82.fill(2)); - deepEquals(fillFallback(i81, -1), i82.fill(-1)); - const i161 = new Int16Array(5); - const i162 = new Int16Array(5); - deepEquals(fillFallback(i161, 2), i162.fill(2)); - deepEquals(fillFallback(i161, 65535), i162.fill(65535)); - deepEquals(fillFallback(i161, -1), i162.fill(-1)); - const i321 = new Int32Array(5); - const i322 = new Int32Array(5); - deepEquals(fillFallback(i321, 2), i322.fill(2)); - deepEquals(fillFallback(i321, 65537), i322.fill(65537)); - deepEquals(fillFallback(i321, -1), i322.fill(-1)); - const f321 = new Float32Array(5); - const f322 = new Float32Array(5); - deepEquals(fillFallback(f321, 1.2345), f322.fill(1.2345)); - const f641 = new Float64Array(5); - const f642 = new Float64Array(5); - deepEquals(fillFallback(f641, 1.2345), f642.fill(1.2345)); - const u8Clamped1 = new Uint8ClampedArray(5); - const u8Clamped2 = new Uint8ClampedArray(5); - deepEquals(fillFallback(u8Clamped1, 2), u8Clamped2.fill(2)); - deepEquals(fillFallback(u8Clamped1, 257), u8Clamped2.fill(257)); - }); - it('start offset', function(): void { - for (let i = -2; i < 10; ++i) { - const u81 = new Uint8Array(5); - const u83 = new Uint8Array(5); - deepEquals(fillFallback(u81, 2, i), u83.fill(2, i)); - deepEquals(fillFallback(u81, -1, i), u83.fill(-1, i)); - } - }); - it('end offset', function(): void { - for (let i = -2; i < 10; ++i) { - const u81 = new Uint8Array(5); - const u83 = new Uint8Array(5); - deepEquals(fillFallback(u81, 2, 0, i), u83.fill(2, 0, i)); - deepEquals(fillFallback(u81, -1, 0, i), u83.fill(-1, 0, i)); - } - }); - it('start/end offset', function(): void { - for (let i = -2; i < 10; ++i) { - for (let j = -2; j < 10; ++j) { - const u81 = new Uint8Array(5); - const u83 = new Uint8Array(5); - deepEquals(fillFallback(u81, 2, i, j), u83.fill(2, i, j)); - deepEquals(fillFallback(u81, -1, i, j), u83.fill(-1, i, j)); - } - } - }); - }); -}); - describe('typed array convenience functions', () => { it('concat', () => { const a = new Uint8Array([1, 2, 3, 4, 5]); diff --git a/src/common/TypedArrayUtils.ts b/src/common/TypedArrayUtils.ts index 158c717b31..f3bacd507e 100644 --- a/src/common/TypedArrayUtils.ts +++ b/src/common/TypedArrayUtils.ts @@ -5,39 +5,6 @@ export type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array; - -/** - * polyfill for TypedArray.fill - * This is needed to support .fill in all safari versions and IE 11. - */ -export function fill(array: T, value: number, start?: number, end?: number): T { - // all modern engines that support .fill - if (array.fill) { - return array.fill(value, start, end) as T; - } - return fillFallback(array, value, start, end); -} - -export function fillFallback(array: T, value: number, start: number = 0, end: number = array.length): T { - // safari and IE 11 - // since IE 11 does not support Array.prototype.fill either - // we cannot use the suggested polyfill from MDN - // instead we simply fall back to looping - if (start >= array.length) { - return array; - } - start = (array.length + start) % array.length; - if (end >= array.length) { - end = array.length; - } else { - end = (array.length + end) % array.length; - } - for (let i = start; i < end; ++i) { - array[i] = value; - } - return array; -} - /** * Concat two typed arrays `a` and `b`. * Returns a new typed array. diff --git a/src/common/input/UnicodeV6.ts b/src/common/input/UnicodeV6.ts index b308203065..bf63a18b22 100644 --- a/src/common/input/UnicodeV6.ts +++ b/src/common/input/UnicodeV6.ts @@ -3,7 +3,6 @@ * @license MIT */ import { IUnicodeVersionProvider } from 'common/services/Services'; -import { fill } from 'common/TypedArrayUtils'; type CharWidth = 0 | 1 | 2; @@ -90,26 +89,26 @@ export class UnicodeV6 implements IUnicodeVersionProvider { // init lookup table once if (!table) { table = new Uint8Array(65536); - fill(table, 1); + table.fill(1); table[0] = 0; // control chars - fill(table, 0, 1, 32); - fill(table, 0, 0x7f, 0xa0); + table.fill(0, 1, 32); + table.fill(0, 0x7f, 0xa0); // apply wide char rules first // wide chars - fill(table, 2, 0x1100, 0x1160); + table.fill(2, 0x1100, 0x1160); table[0x2329] = 2; table[0x232a] = 2; - fill(table, 2, 0x2e80, 0xa4d0); + table.fill(2, 0x2e80, 0xa4d0); table[0x303f] = 1; // wrongly in last line - fill(table, 2, 0xac00, 0xd7a4); - fill(table, 2, 0xf900, 0xfb00); - fill(table, 2, 0xfe10, 0xfe1a); - fill(table, 2, 0xfe30, 0xfe70); - fill(table, 2, 0xff00, 0xff61); - fill(table, 2, 0xffe0, 0xffe7); + table.fill(2, 0xac00, 0xd7a4); + table.fill(2, 0xf900, 0xfb00); + table.fill(2, 0xfe10, 0xfe1a); + table.fill(2, 0xfe30, 0xfe70); + table.fill(2, 0xff00, 0xff61); + table.fill(2, 0xffe0, 0xffe7); // apply combining last to ensure we overwrite // wrongly wide set chars: @@ -117,7 +116,7 @@ export class UnicodeV6 implements IUnicodeVersionProvider { // through to wide check so we simply do here the opposite // combining 0 for (let r = 0; r < BMP_COMBINING.length; ++r) { - fill(table, 0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1); + table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1); } } } diff --git a/src/common/parser/EscapeSequenceParser.ts b/src/common/parser/EscapeSequenceParser.ts index 5bcd2dd3b1..2f3ddd9296 100644 --- a/src/common/parser/EscapeSequenceParser.ts +++ b/src/common/parser/EscapeSequenceParser.ts @@ -7,7 +7,6 @@ import { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler import { ParserState, ParserAction } from 'common/parser/Constants'; import { Disposable, toDisposable } from 'common/Lifecycle'; import { IDisposable } from 'common/Types'; -import { fill } from 'common/TypedArrayUtils'; import { Params } from 'common/parser/Params'; import { OscParser } from 'common/parser/OscParser'; import { DcsParser } from 'common/parser/DcsParser'; @@ -39,7 +38,7 @@ export class TransitionTable { * @param next default next state */ public setDefault(action: ParserAction, next: ParserState): void { - fill(this.table, action << TableAccess.TRANSITION_ACTION_SHIFT | next); + this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next); } /**