|
@@ -12,10 +12,12 @@ import { TStringArrayCustomNodeFactory } from '../../types/container/custom-node
|
|
import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
|
|
import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
|
|
import { IOptions } from '../../interfaces/options/IOptions';
|
|
import { IOptions } from '../../interfaces/options/IOptions';
|
|
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
|
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 { IStringArrayScopeCallsWrapperLexicalScopeData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeData';
|
|
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
|
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
|
import { IStringArrayScopeCallsWrapperNamesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperNamesData';
|
|
import { IStringArrayScopeCallsWrapperNamesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperNamesData';
|
|
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
|
|
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 { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
|
import { IVisitedLexicalScopeNodesStackStorage } from '../../interfaces/storages/string-array-transformers/IVisitedLexicalScopeNodesStackStorage';
|
|
import { IVisitedLexicalScopeNodesStackStorage } from '../../interfaces/storages/string-array-transformers/IVisitedLexicalScopeNodesStackStorage';
|
|
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
|
|
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
|
|
@@ -132,6 +134,9 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
return lexicalScopeBodyNode;
|
|
return lexicalScopeBodyNode;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ const {
|
|
|
|
+ callsWrappersParameterIndexesData: stringArrayScopeCallsWrapperParameterIndexes
|
|
|
|
+ } = stringArrayScopeCallsWrapperLexicalScopeData;
|
|
const stringArrayScopeCallsWrapperNamesDataList: (IStringArrayScopeCallsWrapperNamesData | undefined)[] =
|
|
const stringArrayScopeCallsWrapperNamesDataList: (IStringArrayScopeCallsWrapperNamesData | undefined)[] =
|
|
Object.values(stringArrayScopeCallsWrapperNamesDataByEncoding);
|
|
Object.values(stringArrayScopeCallsWrapperNamesDataByEncoding);
|
|
|
|
|
|
@@ -150,17 +155,20 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
*/
|
|
*/
|
|
for (let i = namesLength - 1; i >= 0; i--) {
|
|
for (let i = namesLength - 1; i >= 0; i--) {
|
|
const stringArrayScopeCallsWrapperName: string = names[i];
|
|
const stringArrayScopeCallsWrapperName: string = names[i];
|
|
- const [
|
|
|
|
- upperStringArrayCallsWrapperName,
|
|
|
|
- upperStringArrayCallsWrapperShiftedIndex,
|
|
|
|
- ] = this.getUpperStringArrayCallsWrapperData(
|
|
|
|
|
|
+ const {
|
|
|
|
+ name: upperStringArrayCallsWrapperName,
|
|
|
|
+ index: upperStringArrayCallsWrapperShiftedIndex,
|
|
|
|
+ parameterIndexesData: upperStringArrayCallsWrapperParameterIndexes
|
|
|
|
+ } = this.getUpperStringArrayCallsWrapperData(
|
|
stringArrayScopeCallsWrapperNamesData,
|
|
stringArrayScopeCallsWrapperNamesData,
|
|
stringArrayScopeCallsWrapperLexicalScopeData,
|
|
stringArrayScopeCallsWrapperLexicalScopeData,
|
|
);
|
|
);
|
|
|
|
|
|
const stringArrayScopeCallsWrapperNode: TStatement[] = this.getStringArrayScopeCallsWrapperNode(
|
|
const stringArrayScopeCallsWrapperNode: TStatement[] = this.getStringArrayScopeCallsWrapperNode(
|
|
stringArrayScopeCallsWrapperName,
|
|
stringArrayScopeCallsWrapperName,
|
|
|
|
+ stringArrayScopeCallsWrapperParameterIndexes,
|
|
upperStringArrayCallsWrapperName,
|
|
upperStringArrayCallsWrapperName,
|
|
|
|
+ upperStringArrayCallsWrapperParameterIndexes,
|
|
upperStringArrayCallsWrapperShiftedIndex
|
|
upperStringArrayCallsWrapperShiftedIndex
|
|
);
|
|
);
|
|
|
|
|
|
@@ -177,30 +185,31 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
/**
|
|
/**
|
|
* @param {IStringArrayScopeCallsWrapperNamesData} stringArrayScopeCallsWrapperNamesData
|
|
* @param {IStringArrayScopeCallsWrapperNamesData} stringArrayScopeCallsWrapperNamesData
|
|
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
|
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
|
- * @returns {[name: string, index: number]}
|
|
|
|
|
|
+ * @returns {IStringArrayScopeCallsWrapperData}
|
|
*/
|
|
*/
|
|
private getRootStringArrayCallsWrapperData (
|
|
private getRootStringArrayCallsWrapperData (
|
|
stringArrayScopeCallsWrapperNamesData: IStringArrayScopeCallsWrapperNamesData,
|
|
stringArrayScopeCallsWrapperNamesData: IStringArrayScopeCallsWrapperNamesData,
|
|
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
|
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
|
- ): [name: string, index: number] {
|
|
|
|
|
|
+ ): IStringArrayScopeCallsWrapperData {
|
|
const {encoding} = stringArrayScopeCallsWrapperNamesData;
|
|
const {encoding} = stringArrayScopeCallsWrapperNamesData;
|
|
const {resultShiftedIndex} = stringArrayScopeCallsWrapperLexicalScopeData;
|
|
const {resultShiftedIndex} = stringArrayScopeCallsWrapperLexicalScopeData;
|
|
|
|
|
|
- return [
|
|
|
|
- this.stringArrayStorage.getStorageCallsWrapperName(encoding),
|
|
|
|
- resultShiftedIndex
|
|
|
|
- ];
|
|
|
|
|
|
+ return {
|
|
|
|
+ name: this.stringArrayStorage.getStorageCallsWrapperName(encoding),
|
|
|
|
+ index: resultShiftedIndex,
|
|
|
|
+ parameterIndexesData: null
|
|
|
|
+ };
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* @param {IStringArrayScopeCallsWrapperNamesData} stringArrayScopeCallsWrapperNamesData
|
|
* @param {IStringArrayScopeCallsWrapperNamesData} stringArrayScopeCallsWrapperNamesData
|
|
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
|
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
|
- * @returns {[name: string, index: number]}
|
|
|
|
|
|
+ * @returns {IStringArrayScopeCallsWrapperData}
|
|
*/
|
|
*/
|
|
private getUpperStringArrayCallsWrapperData (
|
|
private getUpperStringArrayCallsWrapperData (
|
|
stringArrayScopeCallsWrapperNamesData: IStringArrayScopeCallsWrapperNamesData,
|
|
stringArrayScopeCallsWrapperNamesData: IStringArrayScopeCallsWrapperNamesData,
|
|
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
|
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
|
- ): [name: string, index: number] {
|
|
|
|
|
|
+ ): IStringArrayScopeCallsWrapperData {
|
|
const {encoding} = stringArrayScopeCallsWrapperNamesData;
|
|
const {encoding} = stringArrayScopeCallsWrapperNamesData;
|
|
const {scopeShiftedIndex} = stringArrayScopeCallsWrapperLexicalScopeData;
|
|
const {scopeShiftedIndex} = stringArrayScopeCallsWrapperLexicalScopeData;
|
|
|
|
|
|
@@ -223,6 +232,9 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
|
|
|
|
const parentLexicalScopeNamesDataByEncoding: TStringArrayScopeCallsWrapperNamesDataByEncoding | null = this.stringArrayScopeCallsWrapperNamesDataStorage
|
|
const parentLexicalScopeNamesDataByEncoding: TStringArrayScopeCallsWrapperNamesDataByEncoding | null = this.stringArrayScopeCallsWrapperNamesDataStorage
|
|
.get(parentLexicalScopeBodyNode) ?? null;
|
|
.get(parentLexicalScopeBodyNode) ?? null;
|
|
|
|
+ const parentScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData | null = this.stringArrayScopeCallsWrapperLexicalScopeDataStorage
|
|
|
|
+ .get(parentLexicalScopeBodyNode) ?? null;
|
|
|
|
+
|
|
const parentLexicalScopeNames: string[] | null = parentLexicalScopeNamesDataByEncoding?.[encoding]?.names ?? null;
|
|
const parentLexicalScopeNames: string[] | null = parentLexicalScopeNamesDataByEncoding?.[encoding]?.names ?? null;
|
|
|
|
|
|
if (!parentLexicalScopeNames?.length) {
|
|
if (!parentLexicalScopeNames?.length) {
|
|
@@ -232,29 +244,38 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
const upperStringArrayCallsWrapperName: string = this.randomGenerator
|
|
const upperStringArrayCallsWrapperName: string = this.randomGenerator
|
|
.getRandomGenerator()
|
|
.getRandomGenerator()
|
|
.pickone(parentLexicalScopeNames);
|
|
.pickone(parentLexicalScopeNames);
|
|
-
|
|
|
|
- return [
|
|
|
|
- upperStringArrayCallsWrapperName,
|
|
|
|
- scopeShiftedIndex
|
|
|
|
- ];
|
|
|
|
|
|
+ const parameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null =
|
|
|
|
+ parentScopeCallsWrapperLexicalScopeData?.callsWrappersParameterIndexesData ?? null;
|
|
|
|
+
|
|
|
|
+ return {
|
|
|
|
+ name: upperStringArrayCallsWrapperName,
|
|
|
|
+ index: scopeShiftedIndex,
|
|
|
|
+ parameterIndexesData
|
|
|
|
+ };
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* @param {string} stringArrayScopeCallsWrapperName
|
|
* @param {string} stringArrayScopeCallsWrapperName
|
|
|
|
+ * @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayScopeCallsWrapperParameterIndexes
|
|
* @param {string} upperStringArrayCallsWrapperName
|
|
* @param {string} upperStringArrayCallsWrapperName
|
|
|
|
+ * @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} upperStringArrayCallsWrapperParameterIndexes
|
|
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
|
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
|
* @returns {TStatement[]}
|
|
* @returns {TStatement[]}
|
|
*/
|
|
*/
|
|
private getStringArrayScopeCallsWrapperNode (
|
|
private getStringArrayScopeCallsWrapperNode (
|
|
stringArrayScopeCallsWrapperName: string,
|
|
stringArrayScopeCallsWrapperName: string,
|
|
|
|
+ stringArrayScopeCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
|
upperStringArrayCallsWrapperName: string,
|
|
upperStringArrayCallsWrapperName: string,
|
|
|
|
+ upperStringArrayCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
|
stringArrayScopeCallsWrapperShiftedIndex: number
|
|
stringArrayScopeCallsWrapperShiftedIndex: number
|
|
): TStatement[] {
|
|
): TStatement[] {
|
|
switch (this.options.stringArrayWrappersType) {
|
|
switch (this.options.stringArrayWrappersType) {
|
|
case StringArrayWrappersType.Function:
|
|
case StringArrayWrappersType.Function:
|
|
return this.getStringArrayScopeCallsWrapperFunctionNode(
|
|
return this.getStringArrayScopeCallsWrapperFunctionNode(
|
|
stringArrayScopeCallsWrapperName,
|
|
stringArrayScopeCallsWrapperName,
|
|
|
|
+ stringArrayScopeCallsWrapperParameterIndexes,
|
|
upperStringArrayCallsWrapperName,
|
|
upperStringArrayCallsWrapperName,
|
|
|
|
+ upperStringArrayCallsWrapperParameterIndexes,
|
|
stringArrayScopeCallsWrapperShiftedIndex
|
|
stringArrayScopeCallsWrapperShiftedIndex
|
|
);
|
|
);
|
|
|
|
|
|
@@ -291,13 +312,17 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
|
|
|
|
/**
|
|
/**
|
|
* @param {string} stringArrayScopeCallsWrapperName
|
|
* @param {string} stringArrayScopeCallsWrapperName
|
|
|
|
+ * @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayScopeCallsWrapperParameterIndexes
|
|
* @param {string} upperStringArrayCallsWrapperName
|
|
* @param {string} upperStringArrayCallsWrapperName
|
|
|
|
+ * @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} upperStringArrayCallsWrapperParameterIndexes
|
|
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
|
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
|
* @returns {TStatement[]}
|
|
* @returns {TStatement[]}
|
|
*/
|
|
*/
|
|
private getStringArrayScopeCallsWrapperFunctionNode (
|
|
private getStringArrayScopeCallsWrapperFunctionNode (
|
|
stringArrayScopeCallsWrapperName: string,
|
|
stringArrayScopeCallsWrapperName: string,
|
|
|
|
+ stringArrayScopeCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
|
upperStringArrayCallsWrapperName: string,
|
|
upperStringArrayCallsWrapperName: string,
|
|
|
|
+ upperStringArrayCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
|
stringArrayScopeCallsWrapperShiftedIndex: number
|
|
stringArrayScopeCallsWrapperShiftedIndex: number
|
|
): TStatement[] {
|
|
): TStatement[] {
|
|
const stringArrayScopeCallsWrapperFunctionNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperFunctionNode>> =
|
|
const stringArrayScopeCallsWrapperFunctionNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperFunctionNode>> =
|
|
@@ -307,8 +332,10 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
|
|
|
|
|
stringArrayScopeCallsWrapperFunctionNode.initialize(
|
|
stringArrayScopeCallsWrapperFunctionNode.initialize(
|
|
stringArrayScopeCallsWrapperName,
|
|
stringArrayScopeCallsWrapperName,
|
|
|
|
+ stringArrayScopeCallsWrapperParameterIndexes,
|
|
upperStringArrayCallsWrapperName,
|
|
upperStringArrayCallsWrapperName,
|
|
- stringArrayScopeCallsWrapperShiftedIndex
|
|
|
|
|
|
+ upperStringArrayCallsWrapperParameterIndexes,
|
|
|
|
+ stringArrayScopeCallsWrapperShiftedIndex,
|
|
);
|
|
);
|
|
|
|
|
|
return stringArrayScopeCallsWrapperFunctionNode.getNode();
|
|
return stringArrayScopeCallsWrapperFunctionNode.getNode();
|