mirror of
https://github.com/JonathanFleischmann/CompilerULTIMATE.git
synced 2024-12-28 14:08:04 +00:00
add codeGen for Main-Method
This commit is contained in:
parent
9cda095a0b
commit
d0e2af5da6
@ -1,13 +1,13 @@
|
|||||||
package de.maishai.typedast.typedclass;
|
package de.maishai.typedast.typedclass;
|
||||||
|
|
||||||
import de.maishai.ast.Operator;
|
|
||||||
import de.maishai.ast.records.*;
|
|
||||||
import de.maishai.ast.records.Class;
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.ast.records.Constructor;
|
||||||
|
import de.maishai.ast.records.Declaration;
|
||||||
|
import de.maishai.ast.records.Method;
|
||||||
import de.maishai.typedast.ClassContext;
|
import de.maishai.typedast.ClassContext;
|
||||||
import de.maishai.typedast.CodeGenUtils;
|
|
||||||
import de.maishai.typedast.Type;
|
import de.maishai.typedast.Type;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import de.maishai.typedast.TypedNode;
|
import de.maishai.typedast.TypedNode;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
@ -218,6 +218,10 @@ public class TypedClass implements TypedNode {
|
|||||||
m.codeGen(ctx);
|
m.codeGen(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typedMain != null) {
|
||||||
|
typedMain.codeGen(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
return cw.toByteArray();
|
return cw.toByteArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
package de.maishai.typedast.typedclass;
|
package de.maishai.typedast.typedclass;
|
||||||
|
|
||||||
import de.maishai.ast.records.Class;
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.typedast.ClassContext;
|
||||||
import de.maishai.typedast.Type;
|
import de.maishai.typedast.Type;
|
||||||
import de.maishai.typedast.TypedNode;
|
import de.maishai.typedast.TypedNode;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ -31,4 +30,8 @@ public class TypedMain implements TypedNode {
|
|||||||
public Type typeCheck(TypedProgram typedProgram) {
|
public Type typeCheck(TypedProgram typedProgram) {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void codeGen(ClassContext ctx) {
|
||||||
|
typedMethod.codeGenMain(ctx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,11 +124,20 @@ public class TypedMethod implements TypedNode {
|
|||||||
int accessModifier = Opcodes.ACC_PUBLIC; // ist laut Andi ok
|
int accessModifier = Opcodes.ACC_PUBLIC; // ist laut Andi ok
|
||||||
MethodVisitor mv = ctx.getCw().visitMethod(accessModifier, name,
|
MethodVisitor mv = ctx.getCw().visitMethod(accessModifier, name,
|
||||||
CodeGenUtils.generateDescriptor(typedParameters.stream().map(TypedParameter::getType).toList(), returnType), null, null);
|
CodeGenUtils.generateDescriptor(typedParameters.stream().map(TypedParameter::getType).toList(), returnType), null, null);
|
||||||
MethodContext context = new MethodContext(ctx, mv);
|
MethodContext mctx = new MethodContext(ctx, mv);
|
||||||
typedParameters.forEach(param -> context.registerVariable(param.getParaName(), param.getType()));
|
typedParameters.forEach(param -> mctx.registerVariable(param.getParaName(), param.getType()));
|
||||||
|
|
||||||
typedBlock.codeGen(context);
|
typedBlock.codeGen(mctx);
|
||||||
context.wrapUp();
|
mctx.wrapUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void codeGenMain(ClassContext ctx) {
|
||||||
|
MethodVisitor mv = ctx.getCw().visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC,
|
||||||
|
name, "([Ljava/lang/String;)V", null, null);
|
||||||
|
MethodContext mctx = new MethodContext(ctx, mv);
|
||||||
|
typedParameters.forEach(param -> mctx.registerVariable(param.getParaName(), param.getType()));
|
||||||
|
|
||||||
|
typedBlock.codeGen(mctx);
|
||||||
|
mctx.wrapUp();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user