package scotch.compiler.intermediate; import static lombok.AccessLevel.PACKAGE; import static me.qmx.jitescript.util.CodegenUtils.p; import static me.qmx.jitescript.util.CodegenUtils.sig; import java.math.BigInteger; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.ToString; import me.qmx.jitescript.CodeBlock; import scotch.compiler.target.BytecodeGenerator; import scotch.runtime.Callable; import scotch.runtime.RuntimeSupport; @AllArgsConstructor(access = PACKAGE) @EqualsAndHashCode(callSuper = false) @ToString public class IntermediateBigInt extends IntermediateValue { private final BigInteger value; @Override public CodeBlock generateBytecode(BytecodeGenerator generator) { return new CodeBlock() {{ newobj(p(BigInteger.class)); dup(); ldc(value.toString()); invokespecial(p(BigInteger.class), "<init>", sig(void.class, String.class)); invokestatic(p(RuntimeSupport.class), "box", sig(Callable.class, Object.class)); }}; } }