Skip to content

Commit

Permalink
Showing 2 changed files with 19 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -95,7 +95,8 @@ public static Object getStore(RubyBasicObject array) {
assert RubyGuards.isRubyArray(array);
assert array.getDynamicObject().getShape().hasProperty(STORE_IDENTIFIER);

return STORE_PROPERTY.get(array.getDynamicObject(), true);
//return STORE_PROPERTY.get(array.getDynamicObject(), true);
return ((RubyArray) array).store;
}

public static void setStore(RubyBasicObject array, Object store, int size) {
@@ -110,7 +111,7 @@ public static void setStore(RubyBasicObject array, Object store, int size) {
assert verifyStore(store, size);
}

try {
/*try {
STORE_PROPERTY.set(array.getDynamicObject(), store, array.getDynamicObject().getShape());
} catch (IncompatibleLocationException | FinalLocationException e) {
throw new UnsupportedOperationException(e);
@@ -120,25 +121,31 @@ public static void setStore(RubyBasicObject array, Object store, int size) {
SIZE_PROPERTY.set(array.getDynamicObject(), size, array.getDynamicObject().getShape());
} catch (IncompatibleLocationException | FinalLocationException e) {
throw new UnsupportedOperationException(e);
}
}*/

((RubyArray) array).store = store;
((RubyArray) array).size = size;
}

public static void setSize(RubyBasicObject array, int size) {
assert RubyGuards.isRubyArray(array);
assert array.getDynamicObject().getShape().hasProperty(SIZE_IDENTIFIER);

try {
/*try {
SIZE_PROPERTY.set(array.getDynamicObject(), size, array.getDynamicObject().getShape());
} catch (IncompatibleLocationException | FinalLocationException e) {
throw new UnsupportedOperationException(e);
}
}*/

((RubyArray) array).size = size;
}

public static int getSize(RubyBasicObject array) {
assert RubyGuards.isRubyArray(array);
assert array.getDynamicObject().getShape().hasProperty(SIZE_IDENTIFIER);

return (int) SIZE_PROPERTY.get(array.getDynamicObject(), true);
//return (int) SIZE_PROPERTY.get(array.getDynamicObject(), true);
return ((RubyArray) array).size;
}

public static final int ARRAYS_SMALL = Options.TRUFFLE_ARRAYS_SMALL.load();
@@ -383,7 +390,7 @@ public static RubyBasicObject createArray(RubyClass arrayClass, Object[] store,
}

public static RubyArray createGeneralArray(RubyClass arrayClass, Object store, int size) {
return new RubyArray(arrayClass, ARRAY_FACTORY.newInstance(store, size));
return new RubyArray(arrayClass, store, size, ARRAY_FACTORY.newInstance(store, size));
}

@CoreMethod(names = "+", required = 1)
Original file line number Diff line number Diff line change
@@ -14,8 +14,12 @@

public final class RubyArray extends RubyBasicObject {

public RubyArray(RubyClass arrayClass, DynamicObject dynamicObject) {
public Object store;
public int size;

public RubyArray(RubyClass arrayClass, Object store, int size, DynamicObject dynamicObject) {
super(arrayClass, dynamicObject);
ArrayNodes.setStore(this, store, size);
}

}

0 comments on commit c6b02af

Please sign in to comment.