Skip to content

Commit 993def5

Browse files
committed
Support foreign objects when reading an attribute from an object.
1 parent 51ad1f2 commit 993def5

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/ReadAttributeFromObjectNode.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@
4747
import com.oracle.truffle.api.dsl.NodeChild;
4848
import com.oracle.truffle.api.dsl.NodeChildren;
4949
import com.oracle.truffle.api.dsl.Specialization;
50+
import com.oracle.truffle.api.interop.ForeignAccess;
51+
import com.oracle.truffle.api.interop.Message;
52+
import com.oracle.truffle.api.interop.TruffleObject;
53+
import com.oracle.truffle.api.interop.UnknownIdentifierException;
54+
import com.oracle.truffle.api.interop.UnsupportedMessageException;
55+
import com.oracle.truffle.api.nodes.Node;
5056
import com.oracle.truffle.api.object.Location;
5157
import com.oracle.truffle.api.object.Property;
5258
import com.oracle.truffle.api.object.Shape;
@@ -107,9 +113,23 @@ protected Object readIndirect(PythonObject object, Object key) {
107113
}
108114
}
109115

116+
@Specialization(guards = "isForeignObject(object)")
117+
protected Object readForeign(TruffleObject object, Object key,
118+
@Cached("createReadNode()") Node readNode) {
119+
try {
120+
return ForeignAccess.sendRead(readNode, object, key);
121+
} catch (UnknownIdentifierException | UnsupportedMessageException e) {
122+
return PNone.NO_VALUE;
123+
}
124+
}
125+
110126
@SuppressWarnings("unused")
111-
@Specialization(guards = "!isPythonObject(object)")
127+
@Specialization(guards = {"!isPythonObject(object)", "!isForeignObject(object)"})
112128
protected PNone readUnboxed(Object object, Object key) {
113129
return PNone.NO_VALUE;
114130
}
131+
132+
protected Node createReadNode() {
133+
return Message.READ.createNode();
134+
}
115135
}

0 commit comments

Comments
 (0)