Skip to content

Commit cff5cde

Browse files
committed
Fix: uninitialized slots did not raise an 'AttributeError'.
1 parent 0ff7d28 commit cff5cde

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/getsetdescriptor/GetSetDescriptorTypeBuiltins.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import com.oracle.graal.python.builtins.CoreFunctions;
5353
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5454
import com.oracle.graal.python.builtins.PythonBuiltins;
55+
import com.oracle.graal.python.builtins.objects.PNone;
5556
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
5657
import com.oracle.graal.python.builtins.objects.type.PythonClass;
5758
import com.oracle.graal.python.nodes.PGuards;
@@ -144,11 +145,16 @@ Object get(GetSetDescriptor descr, Object obj, PythonClass type,
144145

145146
@Specialization
146147
Object getSlot(HiddenKeyDescriptor descr, Object obj, PythonClass type,
147-
@Cached("create()") ReadAttributeFromObjectNode readNode) {
148+
@Cached("create()") ReadAttributeFromObjectNode readNode,
149+
@Cached("createBinaryProfile()") ConditionProfile profile) {
148150
if (descr_check(descr.getType(), descr.getKey().getName(), obj, type)) {
149151
return descr;
150152
}
151-
return readNode.execute(obj, descr.getKey());
153+
Object val = readNode.execute(obj, descr.getKey());
154+
if (profile.profile(val != PNone.NO_VALUE)) {
155+
return val;
156+
}
157+
throw raise(AttributeError, descr.getKey().getName());
152158
}
153159
}
154160

0 commit comments

Comments
 (0)