Browse Source

WIP Array initializers, pt. III

kindlich 6 years ago
parent
commit
c01d584edb
No known key found for this signature in database

+ 3
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java View File

3269
 
3269
 
3270
 								//TODO invoke?
3270
 								//TODO invoke?
3271
 								//javaWriter.invokeVirtual(new JavaMethod(JavaClass.fromInternalName("lambda1", JavaClass.Kind.CLASS), JavaMethod.Kind.INSTANCE, "accept", true, "(Ljava/lang/String;)Ljava/lang/String;", 0, false));
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 View File

1
 package org.openzen.zenscript.javabytecode.compiler;
1
 package org.openzen.zenscript.javabytecode.compiler;
2
 
2
 
3
 import org.objectweb.asm.Label;
3
 import org.objectweb.asm.Label;
4
+import org.objectweb.asm.Type;
4
 import org.openzen.zenscript.codemodel.statement.Statement;
5
 import org.openzen.zenscript.codemodel.statement.Statement;
5
 import org.openzen.zenscript.codemodel.statement.VarStatement;
6
 import org.openzen.zenscript.codemodel.statement.VarStatement;
6
 import org.openzen.zenscript.javabytecode.JavaLocalVariableInfo;
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
 public class JavaForeachWriter {
14
 public class JavaForeachWriter {
9
 
15
 
83
 	}
89
 	}
84
 
90
 
85
 	public void visitAssocKeyValueIterator() {
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 View File

393
                 case Type.DOUBLE:
393
                 case Type.DOUBLE:
394
                     type = Opcodes.T_DOUBLE;
394
                     type = Opcodes.T_DOUBLE;
395
                     break;
395
                     break;
396
+                case Type.CHAR:
397
+                    type = Opcodes.T_CHAR;
398
+                    break;
396
                 default:
399
                 default:
397
                     throw new RuntimeException("Unsupported array type: " + componentType);
400
                     throw new RuntimeException("Unsupported array type: " + componentType);
398
             }
401
             }

+ 2
- 1
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaExpansionMemberVisitor.java View File

83
 
83
 
84
 		if (!isStatic) {
84
 		if (!isStatic) {
85
 			methodWriter.nameVariable(0, "expandedObj", methodStart, methodEnd, Type.getType(expandedClassDescriptor));
85
 			methodWriter.nameVariable(0, "expandedObj", methodStart, methodEnd, Type.getType(expandedClassDescriptor));
86
+			methodWriter.nameParameter(0, "expandedObj");
86
 			for (final FunctionParameter parameter : member.header.parameters) {
87
 			for (final FunctionParameter parameter : member.header.parameters) {
87
 				methodWriter.nameParameter(0, parameter.name);
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
 		} else {
91
 		} else {
91
 			for (final FunctionParameter parameter : member.header.parameters) {
92
 			for (final FunctionParameter parameter : member.header.parameters) {

Loading…
Cancel
Save