@specs-feup/kadabra
Version:
A Java source-to-source compiler written in Typescript
35 lines (27 loc) • 1.12 kB
text/typescript
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);
}
}
}