浏览代码

Fixed compiled dependencies not being registered properly. Also fixed accidental recursion in visitGetField.

Stan Hebben 6 年前
父节点
当前提交
131ede5818

+ 2
- 1
Constructor/src/main/java/org/openzen/zenscript/constructor/ConstructorRegistry.java 查看文件

@@ -200,12 +200,13 @@ public class ConstructorRegistry {
200 200
 		
201 201
 		private final JavaCompiler compiler = new JavaCompiler();
202 202
 		private final List<JavaBytecodeModule> modules = new ArrayList<>();
203
-		private final JavaCompileSpace space = new SimpleJavaCompileSpace(registry);
203
+		private final SimpleJavaCompileSpace space = new SimpleJavaCompileSpace(registry);
204 204
 
205 205
 		@Override
206 206
 		public void addModule(SemanticModule module) {
207 207
 			JavaBytecodeModule result = compiler.compile(module.modulePackage.fullName, module, space);
208 208
 			modules.add(result);
209
+			space.register(result);
209 210
 		}
210 211
 
211 212
 		@Override

+ 1
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java 查看文件

@@ -1883,7 +1883,7 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1883 1883
 
1884 1884
 	@Override
1885 1885
 	public Void visitGetField(GetFieldExpression expression) {
1886
-		expression.accept(this);
1886
+		expression.target.accept(this);
1887 1887
 		getField(expression.field);
1888 1888
 		return null;
1889 1889
 	}

+ 7
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java 查看文件

@@ -104,7 +104,13 @@ public class JavaMemberVisitor implements MemberVisitor<Void> {
104 104
 
105 105
 	@Override
106 106
 	public Void visitDestructor(DestructorMember member) {
107
-		final JavaMethod method = JavaMethod.getVirtual(toClass, "close", "()V", Opcodes.ACC_PUBLIC);
107
+		int modifiers = Opcodes.ACC_PUBLIC;
108
+		if (member.body == null)
109
+			modifiers |= Opcodes.ACC_ABSTRACT;
110
+		
111
+		final JavaMethod method = JavaMethod.getVirtual(toClass, "close", "()V", modifiers);
112
+		if (member.body == null)
113
+			return null;
108 114
 
109 115
 		final Label constructorStart = new Label();
110 116
 		final Label constructorEnd = new Label();

正在加载...
取消
保存