Pārlūkot izejas kodu

WIP Array initializers, pt. III

kindlich 6 gadus atpakaļ
vecāks
revīzija
c01d584edb
Šim parakstam datu bāzē netika atrasta zināma atslēga

+ 3
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java Parādīt failu

@@ -3269,7 +3269,9 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
3269 3269
 
3270 3270
 								//TODO invoke?
3271 3271
 								//javaWriter.invokeVirtual(new JavaMethod(JavaClass.fromInternalName("lambda1", JavaClass.Kind.CLASS), JavaMethod.Kind.INSTANCE, "accept", true, "(Ljava/lang/String;)Ljava/lang/String;", 0, false));
3272
-								throw new UnsupportedOperationException("Cannot use projection functions yet!");
3272
+
3273
+								//FIXME Critical! Currently returning the same object!
3274
+								//throw new UnsupportedOperationException("Cannot use projection functions yet!");
3273 3275
 							}
3274 3276
 						});
3275 3277
 

+ 30
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaForeachWriter.java Parādīt failu

@@ -1,9 +1,15 @@
1 1
 package org.openzen.zenscript.javabytecode.compiler;
2 2
 
3 3
 import org.objectweb.asm.Label;
4
+import org.objectweb.asm.Type;
4 5
 import org.openzen.zenscript.codemodel.statement.Statement;
5 6
 import org.openzen.zenscript.codemodel.statement.VarStatement;
6 7
 import org.openzen.zenscript.javabytecode.JavaLocalVariableInfo;
8
+import org.openzen.zenscript.javashared.JavaClass;
9
+import org.openzen.zenscript.javashared.JavaMethod;
10
+
11
+import java.util.HashMap;
12
+import java.util.Map;
7 13
 
8 14
 public class JavaForeachWriter {
9 15
 
@@ -83,6 +89,29 @@ public class JavaForeachWriter {
83 89
 	}
84 90
 
85 91
 	public void visitAssocKeyValueIterator() {
86
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
92
+		javaWriter.invokeInterface(JavaMethod.getVirtual(JavaClass.MAP, "entrySet", "()Ljava/util/Set;", 0));
93
+		javaWriter.invokeInterface(JavaMethod.getVirtual(JavaClass.COLLECTION, "iterator", "()Ljava/util/Iterator;", 0));
94
+
95
+		javaWriter.label(startLabel);
96
+		javaWriter.dup();
97
+		javaWriter.invokeInterface(JavaMethod.getVirtual(JavaClass.ITERATOR, "hasNext", "()Z", 0));
98
+		javaWriter.ifEQ(endLabel);
99
+		javaWriter.invokeInterface(JavaMethod.getVirtual(JavaClass.ITERATOR, "next", "()Ljava/lang/Object;", 0));
100
+		javaWriter.checkCast(Type.getType(Map.Entry.class));
101
+		javaWriter.dup(false);
102
+
103
+
104
+		final JavaLocalVariableInfo keyVariable = javaWriter.getLocalVariable(variables[0].variable);
105
+		final JavaLocalVariableInfo valueVariable = javaWriter.getLocalVariable(variables[1].variable);
106
+
107
+		javaWriter.invokeInterface(JavaMethod.getVirtual(JavaClass.fromInternalName("java/util/Map$Entry", JavaClass.Kind.INTERFACE), "getKey", "()Ljava/lang/Object;", 0));
108
+		javaWriter.store(keyVariable.type, keyVariable.local);
109
+
110
+		javaWriter.invokeInterface(JavaMethod.getVirtual(JavaClass.fromInternalName("java/util/Map$Entry", JavaClass.Kind.INTERFACE), "getValue", "()Ljava/lang/Object;", 0));
111
+		javaWriter.store(valueVariable.type, valueVariable.local);
112
+		content.accept(statementVisitor);
113
+
114
+
115
+		//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
87 116
 	}
88 117
 }

+ 3
- 0
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaWriter.java Parādīt failu

@@ -393,6 +393,9 @@ public class JavaWriter {
393 393
                 case Type.DOUBLE:
394 394
                     type = Opcodes.T_DOUBLE;
395 395
                     break;
396
+                case Type.CHAR:
397
+                    type = Opcodes.T_CHAR;
398
+                    break;
396 399
                 default:
397 400
                     throw new RuntimeException("Unsupported array type: " + componentType);
398 401
             }

+ 2
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaExpansionMemberVisitor.java Parādīt failu

@@ -83,9 +83,10 @@ public class JavaExpansionMemberVisitor implements MemberVisitor<Void> {
83 83
 
84 84
 		if (!isStatic) {
85 85
 			methodWriter.nameVariable(0, "expandedObj", methodStart, methodEnd, Type.getType(expandedClassDescriptor));
86
+			methodWriter.nameParameter(0, "expandedObj");
86 87
 			for (final FunctionParameter parameter : member.header.parameters) {
87 88
 				methodWriter.nameParameter(0, parameter.name);
88
-				methodWriter.nameVariable(javaModule.getParameterInfo(parameter).index + 1, parameter.name, methodStart, methodEnd, context.getType(parameter.type));
89
+				methodWriter.nameVariable(javaModule.getParameterInfo(parameter).index, parameter.name, methodStart, methodEnd, context.getType(parameter.type));
89 90
 			}
90 91
 		} else {
91 92
 			for (final FunctionParameter parameter : member.header.parameters) {

Notiek ielāde…
Atcelt
Saglabāt