Skip to content

Commit

Permalink
Merge pull request #176 from ZenCodeLang/fix/map-keys-and-values
Browse files Browse the repository at this point in the history
Fix: Map keys and values getters
  • Loading branch information
stanhebben authored Oct 4, 2024
2 parents e643a46 + 314e6d0 commit 9fe6b61
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,8 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
private static final JavaMethod MAP_CONTAINS_KEY = JavaMethod.getInterface(JavaClass.MAP, "containsKey", "(Ljava/lang/Object;)Z");
private static final JavaMethod MAP_SIZE = JavaMethod.getInterface(JavaClass.MAP, "size", "()I");
private static final JavaMethod MAP_ISEMPTY = JavaMethod.getInterface(JavaClass.MAP, "isEmpty", "()Z");
private static final JavaMethod MAP_KEYS = JavaMethod.getInterface(JavaClass.MAP, "keys", "()Ljava/lang/Object;");
private static final JavaMethod MAP_VALUES = JavaMethod.getInterface(JavaClass.MAP, "values", "()Ljava/lang/Object;");
private static final JavaMethod MAP_KEYS = JavaMethod.getInterface(JavaClass.MAP, "keySet", "()Ljava/util/Set;");
private static final JavaMethod MAP_VALUES = JavaMethod.getInterface(JavaClass.MAP, "values", "()Ljava/util/Collection;");
private static final JavaMethod ARRAYS_COPY_OF_RANGE_OBJECTS = JavaMethod.getNativeStatic(JavaClass.ARRAYS, "copyOfRange", "([Ljava/lang/Object;II)[Ljava/lang/Object;");
private static final JavaMethod ARRAYS_COPY_OF_RANGE_BOOLS = JavaMethod.getNativeStatic(JavaClass.ARRAYS, "copyOfRange", "([ZII)[Z");
private static final JavaMethod ARRAYS_COPY_OF_RANGE_BYTES = JavaMethod.getNativeStatic(JavaClass.ARRAYS, "copyOfRange", "([BII)[B");
Expand Down Expand Up @@ -2433,7 +2433,7 @@ public Void visitGetter(GetterExpression expression) {
javaWriter.invokeVirtual(MAP_KEYS);
javaWriter.dup();
javaWriter.invokeVirtual(COLLECTION_SIZE);
javaWriter.newArray(resultType);
javaWriter.newArray(resultType.getElementType());
javaWriter.invokeVirtual(COLLECTION_TOARRAY);
javaWriter.checkCast(resultType);
break;
Expand All @@ -2444,7 +2444,7 @@ public Void visitGetter(GetterExpression expression) {
javaWriter.invokeVirtual(MAP_VALUES);
javaWriter.dup();
javaWriter.invokeVirtual(COLLECTION_SIZE);
javaWriter.newArray(resultType);
javaWriter.newArray(resultType.getElementType());
javaWriter.invokeVirtual(COLLECTION_TOARRAY);
javaWriter.checkCast(resultType);
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.openzen.zenscript.scriptingexample.tests.actual_test;

import org.junit.jupiter.api.Test;
import org.openzen.zenscript.scriptingexample.tests.helpers.ScriptBuilder;
import org.openzen.zenscript.scriptingexample.tests.helpers.ZenCodeTest;

class MapTests extends ZenCodeTest {
@Test
void keysWork() {
ScriptBuilder.create()
.add("var map = {'Hello': 'World'};")
.add("println(map.keys.length);")
.add("println(map.keys[$-1]);")
.execute(this);

logger.assertPrintOutputSize(2);
logger.assertPrintOutput(0, "1");
logger.assertPrintOutput(1, "Hello");
}

@Test
void valuesWork() {
ScriptBuilder.create()
.add("var map = {'Hello': 'World'};")
.add("println(map.values.length);")
.add("println(map.values[$-1]);")
.execute(this);

logger.assertPrintOutputSize(2);
logger.assertPrintOutput(0, "1");
logger.assertPrintOutput(1, "World");
}
}

0 comments on commit 9fe6b61

Please sign in to comment.