@specs-feup/kadabra
Version:
A Java source-to-source compiler written in Typescript
55 lines (45 loc) • 1.61 kB
text/typescript
import Mutator from "@specs-feup/lara/api/lara/mutation/Mutator.js";
import { BinaryExpression } from "../../Joinpoints.js";
/**
* @param binaryExpression - A join point of type binaryExpression.
* @param newOperators - Operators that will be used to mutate the given binaryExpression.
*/
export default abstract class BinaryExpressionMutator extends Mutator {
binaryExpression: BinaryExpression;
newOperators: string[];
currentIndex: number;
previousOp?: string;
constructor(binaryExpression: BinaryExpression, ...newOperators: string[]) {
super();
// Instance variables
this.binaryExpression = binaryExpression;
this.newOperators = newOperators;
this.currentIndex = 0;
this.previousOp = undefined;
// Checks
// TODO: Check if operators are valid
}
hasMutations() {
return this.currentIndex < this.newOperators.length;
}
getMutationPoint() {
return this.binaryExpression;
}
mutatePrivate() {
// Obtain new operator, increment index
const newOp = this.newOperators[this.currentIndex];
this.currentIndex++;
// Store current operator
this.previousOp = this.binaryExpression.operator;
// Set new operator
this.binaryExpression.operator = newOp;
}
restorePrivate() {
// Restore operator
if (this.previousOp === undefined) {
throw new Error("PreviousOp is undefined.");
}
this.binaryExpression.operator = this.previousOp;
this.previousOp = undefined;
}
}