|
1 | 1 | /*
|
2 |
| - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
4 | 4 | *
|
5 | 5 | * The Universal Permissive License (UPL), Version 1.0
|
|
45 | 45 | import com.oracle.graal.python.builtins.objects.function.PArguments;
|
46 | 46 | import com.oracle.graal.python.nodes.attributes.SetAttributeNode;
|
47 | 47 | import com.oracle.graal.python.nodes.expression.ExpressionNode;
|
| 48 | +import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile; |
48 | 49 | import com.oracle.graal.python.nodes.statement.StatementNode;
|
49 | 50 | import com.oracle.graal.python.nodes.subscript.SetItemNode;
|
50 | 51 | import com.oracle.truffle.api.dsl.Cached;
|
|
55 | 56 | @NodeChild(value = "rhs", type = ExpressionNode.class)
|
56 | 57 | public abstract class WriteGlobalNode extends StatementNode implements GlobalNode, WriteNode {
|
57 | 58 | protected final String attributeId;
|
| 59 | + protected final IsBuiltinClassProfile builtinProfile = IsBuiltinClassProfile.create(); |
58 | 60 |
|
59 | 61 | WriteGlobalNode(String attributeId) {
|
60 | 62 | this.attributeId = attributeId;
|
@@ -102,31 +104,31 @@ private static PDict getGlobalsDict(VirtualFrame frame) {
|
102 | 104 | return (PDict) PArguments.getGlobals(frame);
|
103 | 105 | }
|
104 | 106 |
|
105 |
| - @Specialization(guards = "isInBuiltinDict(frame)") |
| 107 | + @Specialization(guards = "isInBuiltinDict(frame, builtinProfile)") |
106 | 108 | void writeDictBoolean(VirtualFrame frame, boolean value,
|
107 | 109 | @Cached("create()") HashingCollectionNodes.SetItemNode storeNode) {
|
108 | 110 | storeNode.execute(getGlobalsDict(frame), attributeId, value);
|
109 | 111 | }
|
110 | 112 |
|
111 |
| - @Specialization(guards = "isInBuiltinDict(frame)") |
| 113 | + @Specialization(guards = "isInBuiltinDict(frame, builtinProfile)") |
112 | 114 | void writeDictInt(VirtualFrame frame, int value,
|
113 | 115 | @Cached("create()") HashingCollectionNodes.SetItemNode storeNode) {
|
114 | 116 | storeNode.execute(getGlobalsDict(frame), attributeId, value);
|
115 | 117 | }
|
116 | 118 |
|
117 |
| - @Specialization(guards = "isInBuiltinDict(frame)") |
| 119 | + @Specialization(guards = "isInBuiltinDict(frame, builtinProfile)") |
118 | 120 | void writeDictLong(VirtualFrame frame, long value,
|
119 | 121 | @Cached("create()") HashingCollectionNodes.SetItemNode storeNode) {
|
120 | 122 | storeNode.execute(getGlobalsDict(frame), attributeId, value);
|
121 | 123 | }
|
122 | 124 |
|
123 |
| - @Specialization(guards = "isInBuiltinDict(frame)") |
| 125 | + @Specialization(guards = "isInBuiltinDict(frame, builtinProfile)") |
124 | 126 | void writeDictDouble(VirtualFrame frame, double value,
|
125 | 127 | @Cached("create()") HashingCollectionNodes.SetItemNode storeNode) {
|
126 | 128 | storeNode.execute(getGlobalsDict(frame), attributeId, value);
|
127 | 129 | }
|
128 | 130 |
|
129 |
| - @Specialization(replaces = {"writeDictBoolean", "writeDictInt", "writeDictLong", "writeDictDouble"}, guards = "isInBuiltinDict(frame)") |
| 131 | + @Specialization(replaces = {"writeDictBoolean", "writeDictInt", "writeDictLong", "writeDictDouble"}, guards = "isInBuiltinDict(frame, builtinProfile)") |
130 | 132 | void writeDictObject(VirtualFrame frame, Object value,
|
131 | 133 | @Cached("create()") HashingCollectionNodes.SetItemNode storeNode) {
|
132 | 134 | storeNode.execute(getGlobalsDict(frame), attributeId, value);
|
|
0 commit comments