Skip to content

Commit 6214e7f

Browse files
committed
only exact dicts as locals can use the fast path
1 parent 5cea4c9 commit 6214e7f

File tree

5 files changed

+13
-5
lines changed

5 files changed

+13
-5
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_builtin.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_exec_redirected
1616
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_filter
1717
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_filter_pickle
18+
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_general_eval
1819
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_hex
1920
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_id
2021
*graalpython.lib-python.3.test.test_builtin.BuiltinTest.test_isinstance

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/frame/AccessNameNode.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@
4040
*/
4141
package com.oracle.graal.python.nodes.frame;
4242

43+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4344
import com.oracle.graal.python.builtins.objects.dict.PDict;
4445
import com.oracle.graal.python.builtins.objects.function.PArguments;
46+
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
4547
import com.oracle.truffle.api.frame.VirtualFrame;
4648

4749
public interface AccessNameNode {
@@ -51,8 +53,9 @@ default boolean hasLocals(VirtualFrame frame) {
5153
return PArguments.getSpecialArgument(frame) != null;
5254
}
5355

54-
default boolean hasLocalsDict(VirtualFrame frame) {
55-
return PArguments.getSpecialArgument(frame) instanceof PDict;
56+
default boolean hasLocalsDict(VirtualFrame frame, IsBuiltinClassProfile isBuiltin) {
57+
Object specialArgument = PArguments.getSpecialArgument(frame);
58+
return specialArgument instanceof PDict && isBuiltin.profileObject(specialArgument, PythonBuiltinClassType.PDict);
5659
}
5760

5861
public abstract String getAttributeId();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/frame/DeleteNameNode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,10 @@ private void deleteGlobalIfKeyError(VirtualFrame frame, PException e) {
8383
getDeleteGlobalNode().executeVoid(frame);
8484
}
8585

86-
@Specialization(guards = "hasLocalsDict(frame)")
86+
@Specialization(guards = "hasLocalsDict(frame, isBuiltin)")
8787
protected void readFromLocalsDict(VirtualFrame frame,
8888
@Cached BranchProfile updatedStorage,
89+
@SuppressWarnings("unused") @Cached IsBuiltinClassProfile isBuiltin,
8990
@Cached("createBinaryProfile()") ConditionProfile hasFrame,
9091
@CachedLibrary(limit = "3") HashingStorageLibrary lib) {
9192
PDict frameLocals = (PDict) PArguments.getSpecialArgument(frame);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/frame/ReadNameNode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,9 @@ protected static HashingStorage getStorage(VirtualFrame frame) {
8989
return ((PDict) PArguments.getSpecialArgument(frame)).getDictStorage();
9090
}
9191

92-
@Specialization(guards = "hasLocalsDict(frame)", limit = "1")
92+
@Specialization(guards = "hasLocalsDict(frame, isBuiltin)", limit = "1")
9393
protected Object readFromLocalsDict(VirtualFrame frame,
94+
@SuppressWarnings("unused") @Cached IsBuiltinClassProfile isBuiltin,
9495
@CachedLibrary(value = "getStorage(frame)") HashingStorageLibrary hlib) {
9596
Object result = hlib.getItem(getStorage(frame), attributeId);
9697
if (result == null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/frame/WriteNameNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.oracle.graal.python.builtins.objects.dict.PDict;
4545
import com.oracle.graal.python.builtins.objects.function.PArguments;
4646
import com.oracle.graal.python.nodes.expression.ExpressionNode;
47+
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
4748
import com.oracle.graal.python.nodes.statement.StatementNode;
4849
import com.oracle.graal.python.nodes.subscript.SetItemNode;
4950
import com.oracle.truffle.api.dsl.Cached;
@@ -63,8 +64,9 @@ public static WriteNameNode create(String attributeId, ExpressionNode rhs) {
6364
return WriteNameNodeGen.create(attributeId, rhs);
6465
}
6566

66-
@Specialization(guards = "hasLocalsDict(frame)")
67+
@Specialization(guards = "hasLocalsDict(frame, isBuiltin)")
6768
protected void writeLocalsDict(VirtualFrame frame, Object value,
69+
@SuppressWarnings("unused") @Cached IsBuiltinClassProfile isBuiltin,
6870
@Cached("create()") HashingCollectionNodes.SetItemNode setItem) {
6971
PDict frameLocals = (PDict) PArguments.getSpecialArgument(frame);
7072
setItem.execute(frame, frameLocals, attributeId, value);

0 commit comments

Comments
 (0)