WIP: added random string array scope calls wrappers parameters

This commit is contained in:
sanex
2020-11-15 22:15:37 +03:00
parent 4bc8a76e46
commit 4079b42fbd
22 changed files with 50244 additions and 78 deletions
@@ -15,9 +15,11 @@ import { IIdentifierNamesGenerator } from '../../interfaces/generators/identifie
import { ILiteralNodesCacheStorage } from '../../interfaces/storages/string-array-transformers/ILiteralNodesCacheStorage';
import { IOptions } from '../../interfaces/options/IOptions';
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
import { IStringArrayScopeCallsWrapperLexicalScopeData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeData';
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
import { IStringArrayScopeCallsWrapperParameterIndexesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperParameterIndexesData';
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
import { IStringArrayStorageAnalyzer } from '../../interfaces/analyzers/string-array-storage-analyzer/IStringArrayStorageAnalyzer';
import { IStringArrayStorageItemData } from '../../interfaces/storages/string-array-transformers/IStringArrayStorageItem';
@@ -28,6 +30,8 @@ import { NodeTransformationStage } from '../../enums/node-transformers/NodeTrans
import { StringArrayCustomNode } from '../../enums/custom-nodes/StringArrayCustomNode';
import { StringArrayWrappersType } from '../../enums/node-transformers/string-array-transformers/StringArrayWrappersType';
import { stringArrayScopeCallsWrapperParametersMaxCount } from '../../constants/node-transformers/string-array-transformers/StringArrayScopeCallsWrapperParametersMaxCount';
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { NodeGuards } from '../../node/NodeGuards';
import { NodeLiteralUtils } from '../../node/NodeLiteralUtils';
@@ -207,7 +211,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
* @returns {Expression}
*/
private getStringArrayCallNode (stringArrayStorageItemData: IStringArrayStorageItemData): ESTree.Expression {
const [stringArrayCallsWrapperName, index] = this.getStringArrayCallsWrapperData(stringArrayStorageItemData);
const {
name: stringArrayCallsWrapperName,
index,
parameterIndexesData
} = this.getStringArrayCallsWrapperData(stringArrayStorageItemData);
const {decodeKey } = stringArrayStorageItemData;
const stringArrayCallCustomNode: ICustomNode<TInitialData<StringArrayCallNode>> =
@@ -215,6 +223,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
stringArrayCallCustomNode.initialize(
stringArrayCallsWrapperName,
parameterIndexesData,
index,
this.stringArrayStorage.getIndexShiftAmount(),
decodeKey
@@ -231,11 +240,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
/**
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
* @returns {[name: string, index: number]}
* @returns {IStringArrayScopeCallsWrapperData}
*/
private getStringArrayCallsWrapperData (
stringArrayStorageItemData: IStringArrayStorageItemData
): [name: string, index: number] {
): IStringArrayScopeCallsWrapperData {
return !this.options.stringArrayWrappersCount
? this.getRootStringArrayCallsWrapperData(stringArrayStorageItemData)
: this.getUpperStringArrayCallsWrapperData(stringArrayStorageItemData);
@@ -243,28 +252,29 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
/**
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
* @returns {[name: string, index: number]}
* @returns {IStringArrayScopeCallsWrapperData}
*/
private getRootStringArrayCallsWrapperData (
stringArrayStorageItemData: IStringArrayStorageItemData
): [name: string, index: number] {
): IStringArrayScopeCallsWrapperData {
const {encoding, index} = stringArrayStorageItemData;
const rootStringArrayCallsWrapperName: string = this.stringArrayStorage.getStorageCallsWrapperName(encoding);
return [
rootStringArrayCallsWrapperName,
return {
name: rootStringArrayCallsWrapperName,
parameterIndexesData: null,
index
];
};
}
/**
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
* @returns {[name: string, index: number]}
* @returns {IStringArrayScopeCallsWrapperData}
*/
private getUpperStringArrayCallsWrapperData (
stringArrayStorageItemData: IStringArrayStorageItemData
): [name: string, index: number] {
): IStringArrayScopeCallsWrapperData {
const {encoding, index} = stringArrayStorageItemData;
const currentLexicalScopeBodyNode: TNodeWithLexicalScopeStatements | null =
this.visitedLexicalScopeNodesStackStorage.getLastElement() ?? null;
@@ -295,10 +305,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
? stringArrayScopeCallsWrapperLexicalScopeData.resultShiftedIndex + index
: index;
return [
randomUpperStringArrayCallsWrapperName,
resultIndex
];
return {
name: randomUpperStringArrayCallsWrapperName,
index: resultIndex,
parameterIndexesData: stringArrayScopeCallsWrapperLexicalScopeData.callsWrappersParameterIndexesData
};
}
/**
@@ -362,6 +373,10 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
? this.stringArrayScopeCallsWrapperLexicalScopeDataStorage.get(parentLexicalScopeBodyNode) ?? null
: null;
const callsWrappersParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null =
this.options.stringArrayWrappersType === StringArrayWrappersType.Function
? this.getStringArrayCallsWrapperParameterIndexesData()
: null;
const scopeShiftedIndex: number = this.options.stringArrayWrappersType === StringArrayWrappersType.Function
? this.randomGenerator.getRandomInteger(
StringArrayTransformer.minShiftedIndexValue,
@@ -373,6 +388,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
: scopeShiftedIndex;
const lexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData = {
callsWrappersParameterIndexesData,
parentLexicalScopeBodyNode,
resultShiftedIndex,
scopeShiftedIndex
@@ -385,4 +401,20 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
return lexicalScopeData;
}
/**
* @returns {IStringArrayScopeCallsWrapperParameterIndexesData}
*/
private getStringArrayCallsWrapperParameterIndexesData (): IStringArrayScopeCallsWrapperParameterIndexesData {
const minIndexValue: number = 0;
const maxIndexValue: number = stringArrayScopeCallsWrapperParametersMaxCount - 1;
const index: number = this.randomGenerator.getRandomInteger(minIndexValue, maxIndexValue);
const decodeKey: number = this.randomGenerator.getRandomIntegerExcluding(minIndexValue, maxIndexValue, [index]);
return {
index,
decodeKey
};
}
}