Fixed isIncrementedMangledName algorithm

This commit is contained in:
sanex
2020-09-19 21:49:28 +03:00
parent ae52c1dab7
commit 77ff574e67
11 changed files with 314 additions and 157 deletions
@@ -64,6 +64,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
* @param {string} prevName
* @returns {boolean}
*/
// eslint-disable-next-line complexity
public static isIncrementedMangledName (nextName: string, prevName: string): boolean {
if (nextName === prevName) {
return false;
@@ -76,6 +77,8 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
return nextNameLength > prevNameLength;
}
let isIncrementedPrevCharacter: boolean = false;
for (let i: number = 0; i < nextNameLength; i++) {
const nextNameCharacter: string = nextName[i];
const prevNameCharacter: string = prevName[i];
@@ -84,6 +87,17 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
continue;
}
const isDigitNextNameCharacter: boolean = MangledIdentifierNamesGenerator.isDigitCharacter(nextNameCharacter);
const isDigitPrevNameCharacter: boolean = MangledIdentifierNamesGenerator.isDigitCharacter(prevNameCharacter);
if (
isIncrementedPrevCharacter
&& isDigitNextNameCharacter
&& !isDigitPrevNameCharacter
) {
return true;
}
const isUpperCaseNextNameCharacter: boolean = MangledIdentifierNamesGenerator.isUpperCaseCharacter(nextNameCharacter);
const isUpperCasePrevNameCharacter: boolean = MangledIdentifierNamesGenerator.isUpperCaseCharacter(prevNameCharacter);
@@ -98,6 +112,12 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
) {
return false;
}
isIncrementedPrevCharacter = nextNameCharacter > prevNameCharacter;
if (nextNameCharacter < prevNameCharacter) {
return false;
}
}
return nextName > prevName;
@@ -111,6 +131,14 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
return /^[A-Z]*$/.test(string);
}
/**
* @param {string} character
* @returns {boolean}
*/
private static isDigitCharacter (string: string): boolean {
return /^[0-9]*$/.test(string);
}
/**
* Generates next name based on a global previous mangled name
* We can ignore nameLength parameter here, it hasn't sense with this generator