package scotch.compiler.intermediate; import java.util.List; import com.google.common.collect.ImmutableList; import lombok.EqualsAndHashCode; import lombok.ToString; import me.qmx.jitescript.CodeBlock; import scotch.compiler.target.BytecodeGenerator; import scotch.symbol.MethodSignature; import scotch.symbol.Symbol; @EqualsAndHashCode(callSuper = false) @ToString public class IntermediateConstructor extends IntermediateValue { private final Symbol symbol; private final String className; private final MethodSignature methodSignature; private final List<IntermediateValue> arguments; public IntermediateConstructor(Symbol symbol, String className, MethodSignature methodSignature, List<IntermediateValue> arguments) { this.symbol = symbol; this.className = className; this.methodSignature = methodSignature; this.arguments = ImmutableList.copyOf(arguments); } @Override public CodeBlock generateBytecode(BytecodeGenerator generator) { return new CodeBlock() {{ newobj(className); dup(); arguments.forEach(argument -> append(argument.generateBytecode(generator))); append(methodSignature.reference()); }}; } }