Skip to content

Commit

Permalink
Added empty array cache
Browse files Browse the repository at this point in the history
  • Loading branch information
LatvianModder committed Jun 1, 2024
1 parent 5357aff commit e3420d4
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
4 changes: 1 addition & 3 deletions src/main/java/dev/latvian/mods/rhino/type/ArrayTypeInfo.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.latvian.mods.rhino.type;

import java.lang.reflect.Array;

public final class ArrayTypeInfo extends TypeInfoBase {
private final TypeInfo component;
private Class<?> asClass;
Expand All @@ -13,7 +11,7 @@ public final class ArrayTypeInfo extends TypeInfoBase {
@Override
public Class<?> asClass() {
if (asClass == null) {
asClass = Array.newInstance(component.asClass(), 0).getClass();
asClass = component.newArray(0).getClass();
}

return asClass;
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/dev/latvian/mods/rhino/type/TypeInfoBase.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package dev.latvian.mods.rhino.type;

import java.lang.reflect.Array;

public abstract class TypeInfoBase implements TypeInfo {
private TypeInfo asArray;
private Object emptyArray;

@Override
public TypeInfo asArray() {
Expand All @@ -11,4 +14,17 @@ public TypeInfo asArray() {

return asArray;
}

@Override
public Object newArray(int length) {
if (length == 0) {
if (emptyArray == null) {
emptyArray = Array.newInstance(asClass(), 0);
}

return emptyArray;
}

return Array.newInstance(asClass(), length);
}
}

0 comments on commit e3420d4

Please sign in to comment.