package scotch.compiler.intermediate;
import static scotch.compiler.syntax.reference.DefinitionReference.dataRef;
import java.util.List;
import com.google.common.collect.ImmutableList;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import scotch.compiler.syntax.reference.DefinitionReference;
import scotch.compiler.target.BytecodeGenerator;
import scotch.symbol.Symbol;
import scotch.compiler.syntax.type.Type;
@EqualsAndHashCode(callSuper = false)
@ToString
public class IntermediateDataDefinition extends IntermediateDefinition {
private final Symbol symbol;
private final List<Type> parameters;
private final List<IntermediateConstructorDefinition> constructors;
public IntermediateDataDefinition(Symbol symbol, List<Type> parameters, List<IntermediateConstructorDefinition> constructors) {
this.symbol = symbol;
this.parameters = ImmutableList.copyOf(parameters);
this.constructors = ImmutableList.copyOf(constructors);
}
@Override
public void generateBytecode(BytecodeGenerator generator) {
generator.beginData(symbol);
constructors.forEach(constructor -> constructor.generateBytecode(generator));
generator.endClass();
}
@Override
public DefinitionReference getReference() {
return dataRef(symbol);
}
}