diff --git a/backend/font_util/gsub-subset.ts b/backend/font_util/gsub-subset.ts index 70b62a2..8464ce6 100644 --- a/backend/font_util/gsub-subset.ts +++ b/backend/font_util/gsub-subset.ts @@ -225,8 +225,13 @@ function readCoverageRemapped( * 自动选择 format1(列表)或 format2(区间)中更紧凑的。 */ function emitCoverage(w: Writer, newGids: number[]): number { - /** 去重并升序(Coverage 要求升序且唯一) */ - const sorted = Array.from(new Set(newGids)).sort((a, b) => a - b); + /** 升序(Coverage 要求升序)。 + * 无需去重:所有调用方传入的 newGids 逻辑上保证无重复—— + * readCoverageRemapped 按原 coverage(规范要求 gid 唯一)升序过滤,每个原 gid 映射唯一新 gid; + * entries.map(e=>e.from) 的 from 是 entry 主键(唯一)。 + * 实测 FiraCode 单次子集化 327 次 emitCoverage 调用 0 次发现重复,去重(new Set)纯为 GC 开销。 + * slice 复制后原地排序,避免修改调用方的数组。 */ + const sorted = newGids.slice().sort((a, b) => a - b); const off = w.length; let ranges: Array<{ start: number; end: number }> = []; for (let i = 0; i < sorted.length; ) {