Remove the Glyph.matchesForCache method (PR 13494 follow-up)
				
					
				
			This method, and its class, was originally added in PR 4453 to reduce memory usage when parsing text. Then PR 13494 extended the `Glyph`-representation slightly to also include the `charCode`, which made the `matchesForCache` method *effectively* redundant since most properties on a `Glyph`-instance indirectly depends on that one. The only exception is potentially `isSpace` in multi-byte strings. Also, something that I noticed when testing this code: The `matchesForCache` method never worked correctly for `Glyph`s containing `accent`-data, since Objects are passed by reference in JavaScript. For affected fonts, of which there's only a handful of examples in our test-suite, we'd fail to find an already existing `Glyph` because of this.
This commit is contained in:
		
							parent
							
								
									782d098baf
								
							
						
					
					
						commit
						3e391aaed9
					
				@ -218,30 +218,6 @@ class Glyph {
 | 
				
			|||||||
    this.isZeroWidthDiacritic = category.isZeroWidthDiacritic;
 | 
					    this.isZeroWidthDiacritic = category.isZeroWidthDiacritic;
 | 
				
			||||||
    this.isInvisibleFormatMark = category.isInvisibleFormatMark;
 | 
					    this.isInvisibleFormatMark = category.isInvisibleFormatMark;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  matchesForCache(
 | 
					 | 
				
			||||||
    originalCharCode,
 | 
					 | 
				
			||||||
    fontChar,
 | 
					 | 
				
			||||||
    unicode,
 | 
					 | 
				
			||||||
    accent,
 | 
					 | 
				
			||||||
    width,
 | 
					 | 
				
			||||||
    vmetric,
 | 
					 | 
				
			||||||
    operatorListId,
 | 
					 | 
				
			||||||
    isSpace,
 | 
					 | 
				
			||||||
    isInFont
 | 
					 | 
				
			||||||
  ) {
 | 
					 | 
				
			||||||
    return (
 | 
					 | 
				
			||||||
      this.originalCharCode === originalCharCode &&
 | 
					 | 
				
			||||||
      this.fontChar === fontChar &&
 | 
					 | 
				
			||||||
      this.unicode === unicode &&
 | 
					 | 
				
			||||||
      this.accent === accent &&
 | 
					 | 
				
			||||||
      this.width === width &&
 | 
					 | 
				
			||||||
      this.vmetric === vmetric &&
 | 
					 | 
				
			||||||
      this.operatorListId === operatorListId &&
 | 
					 | 
				
			||||||
      this.isSpace === isSpace &&
 | 
					 | 
				
			||||||
      this.isInFont === isInFont
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function int16(b0, b1) {
 | 
					function int16(b0, b1) {
 | 
				
			||||||
@ -3314,20 +3290,9 @@ class Font {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let glyph = this._glyphCache[charcode];
 | 
					    let glyph = this._glyphCache[charcode];
 | 
				
			||||||
    if (
 | 
					    // All `Glyph`-properties, except `isSpace` in multi-byte strings,
 | 
				
			||||||
      !glyph ||
 | 
					    // depend indirectly on the `charcode`.
 | 
				
			||||||
      !glyph.matchesForCache(
 | 
					    if (!glyph || glyph.isSpace !== isSpace) {
 | 
				
			||||||
        charcode,
 | 
					 | 
				
			||||||
        fontChar,
 | 
					 | 
				
			||||||
        unicode,
 | 
					 | 
				
			||||||
        accent,
 | 
					 | 
				
			||||||
        width,
 | 
					 | 
				
			||||||
        vmetric,
 | 
					 | 
				
			||||||
        operatorListId,
 | 
					 | 
				
			||||||
        isSpace,
 | 
					 | 
				
			||||||
        isInFont
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
    ) {
 | 
					 | 
				
			||||||
      glyph = new Glyph(
 | 
					      glyph = new Glyph(
 | 
				
			||||||
        charcode,
 | 
					        charcode,
 | 
				
			||||||
        fontChar,
 | 
					        fontChar,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user