diff --git a/ASTree.cpp b/ASTree.cpp index d76fd49..0cc1314 100644 --- a/ASTree.cpp +++ b/ASTree.cpp @@ -394,6 +394,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) break; case Pyc::BUILD_TUPLE_A: { + // if class is a closure code, ignore this tuple + PycRef tos = stack.top(); + if (tos->type() == ASTNode::NODE_LOADBUILDCLASS) { + break; + } + ASTTuple::value_t values; values.resize(operand); for (int i=0; i BuildFromCode(PycRef code, PycModule* mod) } break; case Pyc::LOAD_DEREF_A: + case Pyc::LOAD_CLASSDEREF_A: stack.push(new ASTName(code->getCellVar(mod, operand))); break; case Pyc::LOAD_FAST_A: @@ -3358,8 +3365,7 @@ void decompyle(PycRef code, PycModule* mod, std::ostream& pyc_output) PycRef src = store->src().cast(); PycRef srcString = src->object().try_cast(); PycRef dest = store->dest().cast(); - if (srcString != nullptr && srcString->isEqual(code->name().cast()) - && dest->name()->isEqual("__qualname__")) { + if (dest->name()->isEqual("__qualname__")) { // __qualname__ = '' // Automatically added by Python 3.3 and later clean->removeFirst(); diff --git a/tests/compiled/load_classderef.3.4.pyc b/tests/compiled/load_classderef.3.4.pyc new file mode 100644 index 0000000..899e91f Binary files /dev/null and b/tests/compiled/load_classderef.3.4.pyc differ diff --git a/tests/input/load_classderef.py b/tests/input/load_classderef.py new file mode 100644 index 0000000..fb0f40d --- /dev/null +++ b/tests/input/load_classderef.py @@ -0,0 +1,4 @@ +def func(): + x = 1 + class my_class: + y = x diff --git a/tests/tokenized/load_classderef.txt b/tests/tokenized/load_classderef.txt new file mode 100644 index 0000000..b815043 --- /dev/null +++ b/tests/tokenized/load_classderef.txt @@ -0,0 +1,6 @@ +def func ( ) : + +x = 1 +class my_class : + +y = x