package scotch.compiler.intermediate; import static java.util.Collections.emptyList; import static scotch.compiler.syntax.reference.DefinitionReference.valueRef; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; import me.qmx.jitescript.CodeBlock; import scotch.compiler.syntax.reference.DefinitionReference; import scotch.compiler.syntax.type.Type; import scotch.compiler.target.BytecodeGenerator; import scotch.symbol.Symbol; import scotch.symbol.Value; import scotch.symbol.ValueType; @Getter @AllArgsConstructor @EqualsAndHashCode(callSuper = false) @ToString public class IntermediateValueDefinition extends IntermediateDefinition { private final Symbol symbol; private final Type type; private final IntermediateValue value; @Override public void generateBytecode(BytecodeGenerator generator) { generator.createValue(symbol, new CodeBlock() {{ annotate(Value.class).value("memberName", symbol.getSimpleName()); generator.beginMethod(emptyList()); //markLine(this); TODO append(value.generateBytecode(generator)); areturn(); generator.endMethod(); }}); generator.createValueType(symbol, new CodeBlock() {{ annotate(ValueType.class).value("forMember", symbol.getSimpleName()); append(type.generateBytecode()); areturn(); }}); } @Override public DefinitionReference getReference() { return valueRef(symbol); } }