check local class namespace before reaching for cells (closes #17853)
diff --git a/Python/compile.c b/Python/compile.c
index 52e8188..1ecbae8 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -970,6 +970,7 @@
case LOAD_CLOSURE:
return 1;
case LOAD_DEREF:
+ case LOAD_CLASSDEREF:
return 1;
case STORE_DEREF:
return -1;
@@ -2677,7 +2678,9 @@
switch (optype) {
case OP_DEREF:
switch (ctx) {
- case Load: op = LOAD_DEREF; break;
+ case Load:
+ op = (c->u->u_ste->ste_type == ClassBlock) ? LOAD_CLASSDEREF : LOAD_DEREF;
+ break;
case Store: op = STORE_DEREF; break;
case AugLoad:
case AugStore: