package io.gitlab.jfronny.muscript.ast.math; import io.gitlab.jfronny.muscript.data.dynamic.Dynamic; import io.gitlab.jfronny.muscript.ast.Expr; import io.gitlab.jfronny.muscript.ast.NumberExpr; import io.gitlab.jfronny.muscript.ast.literal.NumberLiteral; public class Invert extends NumberExpr { public final NumberExpr inner; public Invert(int chStart, int chEnd, NumberExpr inner) { super(chStart, chEnd); this.inner = inner; } @Override public Double get(Dynamic dataRoot) { return -inner.get(dataRoot); } @Override public NumberExpr optimize() { NumberExpr inner = this.inner.optimize(); if (inner instanceof Invert invert) return invert.inner; if (inner instanceof NumberLiteral literal) return Expr.literal(chStart, chEnd, -literal.value); return new Invert(chStart, chEnd, inner); } @Override public boolean equals(Object obj) { return obj instanceof Invert invert && inner.equals(invert.inner); } }