https://github.com/python/cpython/commit/ff1857d6ed52fab8ef1507c289d89ee545ca6478
commit: ff1857d6ed52fab8ef1507c289d89ee545ca6478
branch: main
author: Bénédikt Tran <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2024-06-04T07:24:22-07:00
summary:

gh-120029: export `DEF_TYPE_PARAM` compiler flag (#120028)

files:
A Misc/NEWS.d/next/Library/2024-06-04-14-54-46.gh-issue-120029._1YdTf.rst
M Doc/library/symtable.rst
M Lib/symtable.py
M Lib/test/test_symtable.py
M Modules/symtablemodule.c

diff --git a/Doc/library/symtable.rst b/Doc/library/symtable.rst
index 0480502158433a..e17a33f7feb1ab 100644
--- a/Doc/library/symtable.rst
+++ b/Doc/library/symtable.rst
@@ -151,6 +151,10 @@ Examining Symbol Tables
 
       Return ``True`` if the symbol is a parameter.
 
+   .. method:: is_type_parameter()
+
+      Return ``True`` if the symbol is a type parameter.
+
    .. method:: is_global()
 
       Return ``True`` if the symbol is global.
diff --git a/Lib/symtable.py b/Lib/symtable.py
index 17f820abd56660..ba2f0dafcd0063 100644
--- a/Lib/symtable.py
+++ b/Lib/symtable.py
@@ -1,9 +1,13 @@
 """Interface to the compiler's internal symbol tables"""
 
 import _symtable
-from _symtable import (USE, DEF_GLOBAL, DEF_NONLOCAL, DEF_LOCAL, DEF_PARAM,
-     DEF_IMPORT, DEF_BOUND, DEF_ANNOT, SCOPE_OFF, SCOPE_MASK, FREE,
-     LOCAL, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT, CELL)
+from _symtable import (
+    USE,
+    DEF_GLOBAL, DEF_NONLOCAL, DEF_LOCAL,
+    DEF_PARAM, DEF_TYPE_PARAM, DEF_IMPORT, DEF_BOUND, DEF_ANNOT,
+    SCOPE_OFF, SCOPE_MASK,
+    FREE, LOCAL, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT, CELL
+)
 
 import weakref
 
@@ -253,13 +257,18 @@ def is_referenced(self):
         """Return *True* if the symbol is used in
         its block.
         """
-        return bool(self.__flags & _symtable.USE)
+        return bool(self.__flags & USE)
 
     def is_parameter(self):
         """Return *True* if the symbol is a parameter.
         """
         return bool(self.__flags & DEF_PARAM)
 
+    def is_type_parameter(self):
+        """Return *True* if the symbol is a type parameter.
+        """
+        return bool(self.__flags & DEF_TYPE_PARAM)
+
     def is_global(self):
         """Return *True* if the symbol is global.
         """
diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py
index 92b78a8086a83d..ef2a228b15ed4e 100644
--- a/Lib/test/test_symtable.py
+++ b/Lib/test/test_symtable.py
@@ -299,6 +299,8 @@ def test_symbol_repr(self):
                          "<symbol 'x': FREE, USE>")
         self.assertEqual(repr(self.other_internal.lookup("some_var")),
                          "<symbol 'some_var': FREE, 
USE|DEF_NONLOCAL|DEF_LOCAL>")
+        self.assertEqual(repr(self.GenericMine.lookup("T")),
+                         "<symbol 'T': LOCAL, DEF_LOCAL|DEF_TYPE_PARAM>")
 
     def test_symtable_entry_repr(self):
         expected = f"<symtable entry top({self.top.get_id()}), line 
{self.top.get_lineno()}>"
diff --git 
a/Misc/NEWS.d/next/Library/2024-06-04-14-54-46.gh-issue-120029._1YdTf.rst 
b/Misc/NEWS.d/next/Library/2024-06-04-14-54-46.gh-issue-120029._1YdTf.rst
new file mode 100644
index 00000000000000..e8ea1077139f71
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-06-04-14-54-46.gh-issue-120029._1YdTf.rst
@@ -0,0 +1,2 @@
+Expose :meth:`symtable.Symbol.is_type_parameter` in the :mod:`symtable`
+module. Patch by Bénédikt Tran.
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index b4dbb54c3b47b0..63c4dd4225298d 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -75,6 +75,7 @@ symtable_init_constants(PyObject *m)
     if (PyModule_AddIntMacro(m, DEF_NONLOCAL) < 0) return -1;
     if (PyModule_AddIntMacro(m, DEF_LOCAL) < 0) return -1;
     if (PyModule_AddIntMacro(m, DEF_PARAM) < 0) return -1;
+    if (PyModule_AddIntMacro(m, DEF_TYPE_PARAM) < 0) return -1;
     if (PyModule_AddIntMacro(m, DEF_FREE) < 0) return -1;
     if (PyModule_AddIntMacro(m, DEF_FREE_CLASS) < 0) return -1;
     if (PyModule_AddIntMacro(m, DEF_IMPORT) < 0) return -1;
@@ -83,7 +84,8 @@ symtable_init_constants(PyObject *m)
 
     if (PyModule_AddIntConstant(m, "TYPE_FUNCTION", FunctionBlock) < 0)
         return -1;
-    if (PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock) < 0) return -1;
+    if (PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock) < 0)
+        return -1;
     if (PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock) < 0)
         return -1;
     if (PyModule_AddIntConstant(m, "TYPE_ANNOTATION", AnnotationBlock) < 0)

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to