mirror of
https://github.com/JonathanFleischmann/CompilerULTIMATE.git
synced 2024-10-06 16:21:40 +00:00
add prerequisites for method block codegen
This commit is contained in:
parent
b61af71076
commit
dbbb181ba5
11
src/main/java/de/maishai/typedast/MethodContext.java
Normal file
11
src/main/java/de/maishai/typedast/MethodContext.java
Normal file
@ -0,0 +1,11 @@
|
||||
package de.maishai.typedast;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class MethodContext {
|
||||
}
|
@ -1,4 +1,7 @@
|
||||
package de.maishai.typedast;
|
||||
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
public interface TypedStatement extends TypedNode {
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx);
|
||||
}
|
||||
|
@ -2,11 +2,9 @@ package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.AssignSign;
|
||||
import de.maishai.ast.records.Assignment;
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -41,4 +39,9 @@ public class TypedAssignment implements TypedStatement {
|
||||
typedAssignment.setValue((TypedExpression) value.convertToTypedAST(localVar, classes, untyped.value()));
|
||||
return typedAssignment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -2,10 +2,12 @@ package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.Block;
|
||||
import de.maishai.ast.records.LocalVariable;
|
||||
import de.maishai.typedast.MethodContext;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -46,4 +48,13 @@ public class TypedBlock implements TypedNode {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
for (TypedLocalVariable var : vars) {
|
||||
var.codeGen(mv, ctx);
|
||||
}
|
||||
for (TypedStatement stmt : stmts) {
|
||||
stmt.codeGen(mv, ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.typedast.MethodContext;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@ -17,4 +19,9 @@ public class TypedBreak implements TypedStatement {
|
||||
public TypedNode convertToTypedAST(Map<String, Type> localVar, Map<String, TypedClass> classes, de.maishai.ast.records.Node unTypedAST) {
|
||||
return new TypedBreak();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import de.maishai.ast.records.Block;
|
||||
import de.maishai.ast.records.Constructor;
|
||||
import de.maishai.ast.records.Parameter;
|
||||
import de.maishai.typedast.CodeGenUtils;
|
||||
import de.maishai.typedast.MethodContext;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.Type;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -69,12 +70,12 @@ public class TypedConstructor implements TypedNode {
|
||||
MethodVisitor mv = cw.visitMethod(accessModifier, "<init>", CodeGenUtils.generateDescriptor(typedParameters, Type.VOID), null, null);
|
||||
mv.visitCode();
|
||||
|
||||
mv.visitVarInsn(Opcodes.ALOAD, 0);
|
||||
|
||||
//super();
|
||||
mv.visitVarInsn(Opcodes.ALOAD, 0);
|
||||
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
|
||||
|
||||
//TODO: deal with block
|
||||
MethodContext context = new MethodContext();
|
||||
typedBlock.codeGen(mv, context);
|
||||
|
||||
mv.visitInsn(Opcodes.RETURN);
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.typedast.MethodContext;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@ -18,4 +20,9 @@ public class TypedContinue implements TypedStatement {
|
||||
public TypedNode convertToTypedAST(Map<String, Type> localVar, Map<String, TypedClass> classes, de.maishai.ast.records.Node unTypedAST) {
|
||||
return new TypedContinue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.DoWhile;
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@ -31,4 +29,9 @@ public class TypedDoWhile implements TypedStatement {
|
||||
|
||||
return typedDoWhile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,11 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.For;
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -40,4 +38,9 @@ public class TypedFor implements TypedStatement {
|
||||
|
||||
return typedFor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.IfElse;
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -39,4 +37,9 @@ public class TypedIfElse implements TypedStatement {
|
||||
|
||||
return typedIfElse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,14 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.LocalVariable;
|
||||
import de.maishai.typedast.MethodContext;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.TypeMapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@ -35,4 +37,7 @@ public final class TypedLocalVariable implements TypedNode {
|
||||
|
||||
return typedLocalVariable;
|
||||
}
|
||||
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
}
|
||||
}
|
||||
|
@ -2,10 +2,11 @@ package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.Method;
|
||||
import de.maishai.ast.records.Parameter;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.TypeMapper;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -70,5 +71,18 @@ public class TypedMethod implements TypedNode {
|
||||
return typedParameter;
|
||||
}
|
||||
|
||||
public void codeGen(ClassWriter cw) {
|
||||
int accessModifier = Opcodes.ACC_PUBLIC; // ist laut Andi ok
|
||||
MethodVisitor mv = cw.visitMethod(accessModifier, typedId.getName(),
|
||||
CodeGenUtils.generateDescriptor(typedParameters, returnType), null, null);
|
||||
mv.visitCode();
|
||||
|
||||
|
||||
MethodContext context = new MethodContext();
|
||||
typedBlock.codeGen(mv, context);
|
||||
|
||||
mv.visitMaxs(0, 0);
|
||||
mv.visitEnd();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,8 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -27,4 +25,9 @@ public class TypedMethodCall implements TypedExpression, TypedStatement {
|
||||
//TODO: Implement this
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package de.maishai.typedast.typedclass;
|
||||
import de.maishai.ast.records.New;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -47,4 +48,9 @@ public class TypedNew implements TypedExpression, TypedStatement {
|
||||
}
|
||||
return typedNew;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -2,11 +2,9 @@ package de.maishai.typedast.typedclass;
|
||||
|
||||
|
||||
import de.maishai.ast.records.Return;
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@ -25,4 +23,9 @@ public class TypedReturn implements TypedStatement {
|
||||
typedReturn.setRet((TypedExpression) ret.convertToTypedAST(localVar, classes, untyped.ret()));
|
||||
return typedReturn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,12 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.Method;
|
||||
import de.maishai.typedast.MethodContext;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
@Data
|
||||
@ -23,4 +25,9 @@ public class TypedReturnVoid implements TypedStatement {
|
||||
}
|
||||
return new TypedReturnVoid();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
package de.maishai.typedast.typedclass;
|
||||
|
||||
import de.maishai.ast.records.While;
|
||||
import de.maishai.typedast.TypedExpression;
|
||||
import de.maishai.typedast.TypedNode;
|
||||
import de.maishai.typedast.TypedStatement;
|
||||
import de.maishai.typedast.Type;
|
||||
import de.maishai.typedast.*;
|
||||
import lombok.Data;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -29,4 +27,9 @@ public class TypedWhile implements TypedStatement {
|
||||
typedWhile.setTypedBlock((TypedBlock) typedBlock.convertToTypedAST(localVar, classes, untyped.block()));
|
||||
return typedWhile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void codeGen(MethodVisitor mv, MethodContext ctx) {
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user