Skip to content

Commit 13e520a

Browse files
committed
feat: create default constructor
1 parent 69f91df commit 13e520a

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

backend/jvm/src/main/java/com/github/kayjamlang/backend/jvm/JVMKayJamExpressionVisitor.java

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,24 +72,26 @@ public Object visitKayJamFile(KayJamFile file) {
7272
ClassWriter fileClassWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
7373

7474
String fileName = packageName + "/" + normalizeClassName(file.getFileName()) + "KJ";
75+
String fileSuperClass = "java/lang/Object";
7576
fileClassWriter.visit(V1_8,
7677
ACC_PUBLIC,
7778
fileName,
7879
null,
79-
"java/lang/Object",
80+
fileSuperClass,
8081
new String[]{}
8182
);
8283

8384
for (Map.Entry<String, ClassContainer> entry : file.classes.entrySet()) {
8485
ClassContainer classContainer = entry.getValue();
8586
String className = packageName + "/" + normalizeClassName(classContainer.name);
87+
String superClass = "java/lang/Object";
8688
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
8789
classWriter.visit(
8890
V1_8,
8991
ACC_PUBLIC,
9092
className,
9193
null,
92-
"java/lang/Object",
94+
superClass,
9395
new String[]{}
9496
);
9597

@@ -106,7 +108,7 @@ public Object visitKayJamFile(KayJamFile file) {
106108
for (Map.Entry<String, Expression> constant: objectContainer.constants.entrySet()){
107109
JVMType fieldType = typeVisitor.visit(constant.getValue());
108110
classWriter.visitField(
109-
ACC_STATIC + ACC_FINAL + ACC_PUBLIC,
111+
ACC_STATIC | ACC_FINAL | ACC_PUBLIC,
110112
constant.getKey(),
111113
fieldType.getDescriptor(),
112114
null,
@@ -141,17 +143,35 @@ public Object visitKayJamFile(KayJamFile file) {
141143
clearStack();
142144
}
143145

144-
// MethodVisitor constructorVisitor = classWriter.visitMethod(
145-
// ACC_STATIC, "<init>", "()V", null, null
146-
// );
147-
//
148-
// constructorVisitor.visitMaxs(maxStack, 0);
149-
// constructorVisitor.visitEnd();
150-
// clearStack();
146+
MethodVisitor constructorVisitor = classWriter.visitMethod(
147+
ACC_PUBLIC, "<init>", "()V", null, null
148+
);
149+
150+
constructorVisitor.visitCode();
151+
constructorVisitor.visitVarInsn(ALOAD, 0);
152+
constructorVisitor.visitMethodInsn(INVOKESPECIAL, superClass, "<init>", "()V", false);
153+
constructorVisitor.visitInsn(RETURN);
154+
155+
constructorVisitor.visitMaxs(maxStack, 1);
156+
constructorVisitor.visitEnd();
157+
clearStack();
151158

152159
finalClassWriters.put(className, classWriter);
153160
}
154161

162+
MethodVisitor constructorVisitor = fileClassWriter.visitMethod(
163+
ACC_PUBLIC, "<init>", "()V", null, null
164+
);
165+
166+
constructorVisitor.visitCode();
167+
constructorVisitor.visitVarInsn(ALOAD, 0);
168+
constructorVisitor.visitMethodInsn(INVOKESPECIAL, fileSuperClass, "<init>", "()V", false);
169+
constructorVisitor.visitInsn(RETURN);
170+
171+
constructorVisitor.visitMaxs(maxStack, 1);
172+
constructorVisitor.visitEnd();
173+
clearStack();
174+
155175
finalClassWriters.put(fileName, fileClassWriter);
156176
return null;
157177
}
@@ -307,7 +327,7 @@ public HashMap<String, ClassWriter> getClasses() {
307327
private void pushToStack() {
308328
currentStack += 1;
309329

310-
if(maxStack < currentStack) {
330+
if(currentStack > maxStack) {
311331
maxStack = currentStack;
312332
}
313333
}

0 commit comments

Comments
 (0)