@@ -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