UNPKG

@specs-feup/kadabra

Version:

A Java source-to-source compiler written in Typescript

35 lines (27 loc) 1.12 kB
import IterativeMutation from "@specs-feup/lara/api/lara/mutation/IterativeMutation.js"; import MutationResult from "@specs-feup/lara/api/lara/mutation/MutationResult.js"; import { Joinpoint, BinaryExpression } from "../../Joinpoints.js"; /** * @param newOperators - Operators that will be used to mutate the binaryExpression. */ export default class BinaryExpressionMutation extends IterativeMutation { newOperators: string[]; // Parent constructor constructor(...newOperators: string[]) { super("BinaryExpressionMutation"); // TODO: Check if operators are valid this.newOperators = newOperators; } isMutationPoint(jp: Joinpoint): jp is BinaryExpression { return jp instanceof BinaryExpression; } *mutate(jp: BinaryExpression) { for (const newOp of this.newOperators) { const mutation = jp.copy() as BinaryExpression; // Skip when operators are the same if (mutation.operator === newOp) continue; mutation.operator = newOp; yield new MutationResult(mutation); } } }