package io.gitlab.jfronny.muscript.ast.dynamic.assign; import io.gitlab.jfronny.muscript.ast.NumberExpr; 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 NumberAssign extends NumberExpr { private final String name; private final NumberExpr value; protected NumberAssign(int chStart, int chEnd, String name, NumberExpr 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 Double get(Scope dataRoot) { double data = value.get(dataRoot); dataRoot.set(name, data); return data; } @Override public NumberExpr optimize() { return new NumberAssign(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 NumberAssign assign && name.equals(assign.name) && value.equals(assign.value); } }