Skip to content

Commit 0f01a19

Browse files
committed
[GR-13467] GetItemNode should raise TypeError not return NotImplemented value
1 parent 11bd05c commit 0f01a19

File tree

1 file changed

+14
-3
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/subscript

1 file changed

+14
-3
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/subscript/GetItemNode.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,17 @@
3232
import com.oracle.graal.python.nodes.expression.ExpressionNode;
3333
import com.oracle.graal.python.nodes.frame.ReadNode;
3434
import com.oracle.graal.python.nodes.statement.StatementNode;
35-
import com.oracle.truffle.api.dsl.Cached;
35+
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
36+
import com.oracle.truffle.api.CompilerDirectives;
3637
import com.oracle.truffle.api.dsl.Specialization;
3738
import com.oracle.truffle.api.frame.VirtualFrame;
3839
import com.oracle.truffle.api.nodes.NodeInfo;
3940

4041
@NodeInfo(shortName = __GETITEM__)
4142
public abstract class GetItemNode extends BinaryOpNode implements ReadNode {
4243

44+
@Child private LookupAndCallBinaryNode callGetitemNode;
45+
4346
public ExpressionNode getPrimary() {
4447
return getLeftNode();
4548
}
@@ -53,8 +56,16 @@ public ExpressionNode getSlice() {
5356
public abstract Object execute(Object primary, Object slice);
5457

5558
@Specialization
56-
public Object doSpecialObject(Object primary, Object index,
57-
@Cached("create(__GETITEM__)") LookupAndCallBinaryNode callGetitemNode) {
59+
public Object doSpecialObject(Object primary, Object index) {
60+
if (callGetitemNode == null) {
61+
CompilerDirectives.transferToInterpreterAndInvalidate();
62+
callGetitemNode = insert(LookupAndCallBinaryNode.create(__GETITEM__, null, () -> new LookupAndCallBinaryNode.NotImplementedHandler() {
63+
@Override
64+
public Object execute(@SuppressWarnings("unused") Object arg, Object arg2) {
65+
throw raise(TypeError, "'%p' object is not subscriptable", arg2);
66+
}
67+
}));
68+
}
5869
return callGetitemNode.executeObject(primary, index);
5970
}
6071

0 commit comments

Comments
 (0)