]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-124019: do not call codegen_annotations_in_scope if there are no annotations ...
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Thu, 12 Sep 2024 19:24:15 +0000 (20:24 +0100)
committerGitHub <noreply@github.com>
Thu, 12 Sep 2024 19:24:15 +0000 (20:24 +0100)
Python/codegen.c

index 9ce4e1fb1f6c921615c1da2097b2b859ae3c6c5c..2ca5db1fc6ad343c28719326e7dabe6e3fd1a193 100644 (file)
@@ -1002,26 +1002,22 @@ codegen_annotations(compiler *c, location loc,
     PySTEntryObject *ste;
     RETURN_IF_ERROR(_PySymtable_LookupOptional(SYMTABLE(c), args, &ste));
     assert(ste != NULL);
-    bool annotations_used = ste->ste_annotations_used;
 
-    int err = annotations_used ?
-        codegen_setup_annotations_scope(c, loc, (void *)args, ste->ste_name) : SUCCESS;
-    Py_DECREF(ste);
-    RETURN_IF_ERROR(err);
-
-    if (codegen_annotations_in_scope(c, loc, args, returns, &annotations_len) < 0) {
-        if (annotations_used) {
-            _PyCompile_ExitScope(c);
-        }
-        return ERROR;
-    }
-
-    if (annotations_used) {
+    if (ste->ste_annotations_used) {
+        int err = codegen_setup_annotations_scope(c, loc, (void *)args, ste->ste_name);
+        Py_DECREF(ste);
+        RETURN_IF_ERROR(err);
+        RETURN_IF_ERROR_IN_SCOPE(
+            c, codegen_annotations_in_scope(c, loc, args, returns, &annotations_len)
+        );
         RETURN_IF_ERROR(
             codegen_leave_annotations_scope(c, loc, annotations_len)
         );
         return MAKE_FUNCTION_ANNOTATE;
     }
+    else {
+        Py_DECREF(ste);
+    }
 
     return 0;
 }