package io.gitlab.jfronny.muscript.ast.dynamic.assign; import io.gitlab.jfronny.muscript.ast.BoolExpr; import io.gitlab.jfronny.muscript.compiler.ExprWriter; import io.gitlab.jfronny.muscript.compiler.Order; import io.gitlab.jfronny.muscript.data.Scope; import io.gitlab.jfronny.muscript.error.LocationalException; import java.io.IOException; public class BoolAssign extends BoolExpr { private final String name; private final BoolExpr value; protected BoolAssign(int chStart, int chEnd, String name, BoolExpr value) { super(Order.Primary, chStart, chEnd); if (name.equals("this")) throw new LocationalException(chStart, chEnd, "Cannot reassign 'this'"); this.name = name; this.value = value; } @Override public Boolean get(Scope dataRoot) { boolean data = value.get(dataRoot); dataRoot.set(name, data); return data; } @Override public BoolExpr optimize() { return new BoolAssign(chStart, chEnd, name, value.optimize()); } @Override public void decompile(ExprWriter writer) throws IOException { writer.appendLiteral(name).append(" = "); value.decompile(writer); } @Override public boolean equals(Object obj) { return obj instanceof BoolAssign assign && name.equals(assign.name) && value.equals(assign.value); } }