Skip to content
Snippets Groups Projects
Commit ec23dd24 authored by Zbynek Slajchrt's avatar Zbynek Slajchrt
Browse files

Non-compilation final Location objects accessed within the truffle boundary only

parent 0711e731
Branches
No related tags found
No related merge requests found
Showing
with 24 additions and 10 deletions
......@@ -46,10 +46,11 @@ public abstract class ArrayAttributeNode extends AttributeIterativeAccessNode {
@ExplodeLoop
protected RAttribute[] getArrayFromConstantLayouts(DynamicObject attrs,
@Cached("findLayout(attrs)") AttrsLayout attrsLayout) {
Property[] props = attrsLayout.properties;
final Property[] props = attrsLayout.properties;
RAttribute[] result = new RAttribute[props.length];
for (int i = 0; i < props.length; i++) {
result[i] = new RAttributesLayout.AttrInstance((String) props[i].getKey(), props[i].get(attrs, attrsLayout.shape));
Object value = readProperty(attrs, attrsLayout.shape, props[i]);
result[i] = new RAttributesLayout.AttrInstance((String) props[i].getKey(), value);
}
return result;
......@@ -62,7 +63,8 @@ public abstract class ArrayAttributeNode extends AttributeIterativeAccessNode {
RAttribute[] result = new RAttribute[props.size()];
int i = 0;
for (Property p : props) {
result[i] = new RAttributesLayout.AttrInstance((String) p.getKey(), p.get(attrs, shape));
Object value = readProperty(attrs, shape, p);
result[i] = new RAttributesLayout.AttrInstance((String) p.getKey(), value);
i++;
}
......
......@@ -23,15 +23,10 @@
package com.oracle.truffle.r.nodes.attributes;
import com.oracle.truffle.api.CompilerAsserts;
import com.oracle.truffle.api.nodes.ExplodeLoop;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.Location;
import com.oracle.truffle.api.object.Property;
import com.oracle.truffle.api.object.Shape;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.runtime.data.RAttributesLayout;
import com.oracle.truffle.r.runtime.data.RAttributesLayout.AttrsLayout;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
/**
......
......@@ -23,12 +23,11 @@
package com.oracle.truffle.r.nodes.attributes;
import com.oracle.truffle.api.CompilerAsserts;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.nodes.ExplodeLoop;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.Location;
import com.oracle.truffle.api.object.Property;
import com.oracle.truffle.api.object.Shape;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.runtime.data.RAttributesLayout;
import com.oracle.truffle.r.runtime.data.RAttributesLayout.AttrsLayout;
......@@ -76,4 +75,9 @@ public abstract class AttributeIterativeAccessNode extends RBaseNode {
return shape != null && shape.check(attrs);
}
@TruffleBoundary
protected static Object readProperty(DynamicObject attrs, Shape shape, final Property prop) {
return prop.get(attrs, shape);
}
}
......@@ -22,6 +22,7 @@
*/
package com.oracle.truffle.r.nodes.attributes;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.object.DynamicObject;
......@@ -64,6 +65,7 @@ public abstract class GetFixedAttributeNode extends FixedAttributeAccessNode {
}
@Specialization(contains = "getAttrCached")
@TruffleBoundary
protected Object getAttrFallback(DynamicObject attrs) {
return attrs.get(name);
}
......
......@@ -22,6 +22,7 @@
*/
package com.oracle.truffle.r.nodes.attributes;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.object.DynamicObject;
......@@ -43,6 +44,7 @@ public abstract class IterableAttributeNode extends AttributeIterativeAccessNode
}
@Specialization(contains = "getArrayFromConstantLayouts")
@TruffleBoundary
protected RAttributesLayout.RAttributeIterable getArrayFallback(DynamicObject attrs) {
return RAttributesLayout.asIterable(attrs);
}
......
......@@ -22,6 +22,7 @@
*/
package com.oracle.truffle.r.nodes.attributes;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.object.DynamicObject;
......@@ -68,6 +69,7 @@ public abstract class RemoveFixedAttributeNode extends FixedAttributeAccessNode
}
@Specialization(contains = "removeAttrCached")
@TruffleBoundary
protected void removeAttrFallback(DynamicObject attrs) {
attrs.delete(this.name);
}
......
......@@ -22,6 +22,7 @@
*/
package com.oracle.truffle.r.nodes.attributes;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.object.DynamicObject;
......@@ -74,6 +75,7 @@ public abstract class SetFixedAttributeNode extends FixedAttributeAccessNode {
}
@Specialization(contains = "setAttrCached")
@TruffleBoundary
protected void setFallback(DynamicObject attrs, Object value) {
attrs.define(name, value);
}
......
......@@ -27,6 +27,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.CompilerDirectives.ValueType;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.DynamicObjectFactory;
......@@ -182,12 +184,14 @@ public final class RAttributesLayout {
return new RAttributeIterable(attrs, attrsLayout.propertyList);
}
@TruffleBoundary
public static DynamicObject copy(DynamicObject attrs) {
assert isRAttributes(attrs);
return attrs.copy(attrs.getShape());
}
@TruffleBoundary
public static void clear(DynamicObject attrs) {
assert isRAttributes(attrs);
......@@ -306,6 +310,7 @@ public final class RAttributesLayout {
}
@Override
@TruffleBoundary
public RAttribute next() {
Property p = iter.next();
Object value = p.get(attrs, shape);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment