123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { injectable, inject } from 'inversify';
- import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers';
- import * as escodegen from 'escodegen';
- import * as ESTree from 'estree';
- import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
- import { IOptions } from '../../../interfaces/IOptions';
- import { IStorage } from '../../../interfaces/IStorage';
- import { AbstractControlFlowReplacer } from './AbstractControlFlowReplacer';
- import { BinaryExpressionFunctionNode } from '../../../custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/BinaryExpressionFunctionNode';
- import { ControlFlowStorageCallNode } from '../../../custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/ControlFlowStorageCallNode';
- @injectable()
- export class BinaryExpressionControlFlowReplacer extends AbstractControlFlowReplacer {
- /**
- * @param customNodesStorage
- * @param options
- */
- constructor (
- @inject(ServiceIdentifiers['IStorage<ICustomNode>']) customNodesStorage: IStorage<ICustomNode>,
- @inject(ServiceIdentifiers.IOptions) options: IOptions
- ) {
- super(customNodesStorage, options);
- }
- /**
- * @param expressionNode
- * @returns {string}
- */
- private static getExpressionValue (expressionNode: ESTree.Expression): string {
- return escodegen.generate(expressionNode, {
- sourceMapWithCode: true
- }).code;
- }
- /**
- * @param binaryExpressionNode
- * @param parentNode
- * @param controlFlowStorage
- * @param controlFlowStorageCustomNodeName
- * @returns {ICustomNode | undefined}
- */
- public replace (
- binaryExpressionNode: ESTree.BinaryExpression,
- parentNode: ESTree.Node,
- controlFlowStorage: IStorage <ICustomNode>,
- controlFlowStorageCustomNodeName: string
- ): ICustomNode | undefined {
- const key: string = AbstractControlFlowReplacer.getStorageKey();
- controlFlowStorage.set(key, new BinaryExpressionFunctionNode(binaryExpressionNode.operator, this.options));
- return new ControlFlowStorageCallNode(
- controlFlowStorageCustomNodeName,
- key,
- BinaryExpressionControlFlowReplacer.getExpressionValue(binaryExpressionNode.left),
- BinaryExpressionControlFlowReplacer.getExpressionValue(binaryExpressionNode.right),
- this.options
- );
- }
- }
|