use of com.oracle.truffle.api.object.DynamicObject in project graal by oracle.
the class LayoutParser method parseGetAndSet.
private void parseGetAndSet(ExecutableElement methodElement) {
if (methodElement.getParameters().size() != 2) {
processor.reportError(methodElement, "@Layout get and set methods must have two parameters");
}
final VariableElement objectParameter = methodElement.getParameters().get(0);
final VariableElement newValueParameter = methodElement.getParameters().get(1);
if (!isSameType(objectParameter.asType(), DynamicObject.class)) {
processor.reportError(methodElement, "@Layout get and set method should have a first parameter of type DynamicObject");
}
if (!objectParameter.getSimpleName().toString().equals("object")) {
processor.reportError(methodElement, "@Layout get and set method should have a first parameter named object");
}
if (!newValueParameter.getSimpleName().toString().equals("value")) {
processor.reportError(methodElement, "@Layout get and set method should have a second parameter named value");
}
String propertyName = NameUtils.titleToCamel(methodElement.getSimpleName().toString().substring("getAndSet".length()));
final PropertyBuilder property = getProperty(propertyName);
property.setHasGetAndSet(true);
setPropertyType(methodElement, property, methodElement.getParameters().get(1).asType());
setPropertyType(methodElement, property, methodElement.getReturnType());
}
use of com.oracle.truffle.api.object.DynamicObject in project graal by oracle.
the class LayoutParser method parseCompareAndSet.
private void parseCompareAndSet(ExecutableElement methodElement) {
if (methodElement.getParameters().size() != 3) {
processor.reportError(methodElement, "@Layout compare and set methods must have three parameters");
}
final VariableElement objectParameter = methodElement.getParameters().get(0);
final VariableElement currentValueParameter = methodElement.getParameters().get(1);
final VariableElement newValueParameter = methodElement.getParameters().get(2);
if (!isSameType(objectParameter.asType(), DynamicObject.class)) {
processor.reportError(methodElement, "@Layout compare and set method should have a first parameter of type DynamicObject");
}
if (!objectParameter.getSimpleName().toString().equals("object")) {
processor.reportError(methodElement, "@Layout compare and set method should have a first parameter named object");
}
if (!currentValueParameter.getSimpleName().toString().equals("expectedValue")) {
processor.reportError(methodElement, "@Layout compare and set method should have a second parameter named expectedValue");
}
if (!newValueParameter.getSimpleName().toString().equals("value")) {
processor.reportError(methodElement, "@Layout compare and set method should have a third parameter named value");
}
String propertyName = NameUtils.titleToCamel(methodElement.getSimpleName().toString().substring("compareAndSet".length()));
final PropertyBuilder property = getProperty(propertyName);
property.setHasCompareAndSet(true);
setPropertyType(methodElement, property, methodElement.getParameters().get(1).asType());
setPropertyType(methodElement, property, methodElement.getParameters().get(2).asType());
}
use of com.oracle.truffle.api.object.DynamicObject in project graal by oracle.
the class ImplicitCastTest method testOtherInt.
@Test
public void testOtherInt() {
Shape rootShape = layout.createShape(new ObjectType());
DynamicObject object = rootShape.newInstance();
object.define("a", otherVal);
Location location1 = object.getShape().getProperty("a").getLocation();
Assert.assertEquals(otherPrimClass, getLocationType(location1));
object.define("a", intVal);
Location location2 = object.getShape().getProperty("a").getLocation();
Assert.assertEquals(otherPrimClass, getLocationType(location2));
Assert.assertEquals(otherVal.getClass(), object.get("a").getClass());
DOTestAsserts.assertSameLocation(location1, location2);
}
use of com.oracle.truffle.api.object.DynamicObject in project graal by oracle.
the class ImplicitCastTest method testLocationDecoratorEquals.
@Test
public void testLocationDecoratorEquals() {
Layout defaultLayout = new DefaultLayoutFactory().createLayout(Layout.newLayout());
Shape defaultRootShape = defaultLayout.createShape(new ObjectType());
Shape implicitCastRootShape = layout.createShape(new ObjectType());
DynamicObject object1 = implicitCastRootShape.newInstance();
object1.define("a", otherVal);
Location location1 = object1.getShape().getProperty("a").getLocation();
// Location of "a" should not change if an Integer is set
object1.set("a", intVal);
Assert.assertEquals(location1, object1.getShape().getProperty("a").getLocation());
DynamicObject object2 = defaultRootShape.newInstance();
object2.define("a", otherVal);
Location location2 = object2.getShape().getProperty("a").getLocation();
// This test relies on the assumption that both locations are of the same class
Assert.assertEquals(location1.getClass(), location2.getClass());
Assert.assertNotEquals(location1, location2);
}
use of com.oracle.truffle.api.object.DynamicObject in project graal by oracle.
the class ImplicitCastTest method testIntObject.
@Test
public void testIntObject() {
Shape rootShape = layout.createShape(new ObjectType());
DynamicObject object = rootShape.newInstance();
object.define("a", intVal);
object.define("a", "");
Location location = object.getShape().getProperty("a").getLocation();
Assert.assertEquals(Object.class, getLocationType(location));
Assert.assertEquals(String.class, object.get("a").getClass());
}
Aggregations