diff --git a/Doc/library/symtable.rst b/Doc/library/symtable.rst index 0082287c338..ee2482377de 100644 --- a/Doc/library/symtable.rst +++ b/Doc/library/symtable.rst @@ -144,15 +144,6 @@ Examining Symbol Tables Return ``True`` if the symbol is global. - .. method:: is_vararg() - - Return ``True`` if the symbol is a star arg (receives varargs). - - .. method:: is_kewordarg() - - Return ``True`` if the symbol is a two-star arg (receives keyword - arguments). - .. method:: is_local() Return ``True`` if the symbol is local to its block. diff --git a/Lib/symtable.py b/Lib/symtable.py index 66c0e0354c5..4a5662d2992 100644 --- a/Lib/symtable.py +++ b/Lib/symtable.py @@ -2,11 +2,10 @@ import _symtable from _symtable import (USE, DEF_GLOBAL, DEF_LOCAL, DEF_PARAM, - DEF_STAR, DEF_DOUBLESTAR, DEF_INTUPLE, DEF_FREE, - DEF_FREE_GLOBAL, DEF_FREE_CLASS, DEF_IMPORT, DEF_BOUND, - OPT_IMPORT_STAR, OPT_EXEC, OPT_BARE_EXEC, SCOPE_OFF, SCOPE_MASK, - FREE, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) + DEF_IMPORT, DEF_BOUND, OPT_IMPORT_STAR, OPT_EXEC, OPT_BARE_EXEC, + SCOPE_OFF, SCOPE_MASK, FREE, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) +import warnings import weakref __all__ = ["symtable", "SymbolTable", "newSymbolTable", "Class", @@ -194,10 +193,14 @@ class Symbol(object): return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT)) def is_vararg(self): - return bool(self.__flags & DEF_STAR) + warnings.warn("is_vararg() is obsolete and will be removed", + DeprecationWarning, 2) + return False def is_keywordarg(self): - return bool(self.__flags & DEF_DOUBLESTAR) + warnings.warn("is_keywordarg() is obsolete and will be removed", + DeprecationWarning, 2) + return False def is_local(self): return bool(self.__flags & DEF_BOUND) @@ -212,7 +215,8 @@ class Symbol(object): return bool(self.__flags & DEF_LOCAL) def is_in_tuple(self): - return bool(self.__flags & DEF_INTUPLE) + warnings.warn("is_in_tuple() is obsolete and will be removed", + DeprecationWarning, 2) def is_namespace(self): """Returns true if name binding introduces new namespace. diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index fc678a84a9a..05b237a97a2 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -55,6 +55,22 @@ class SymtableTest(unittest.TestCase): internal = find_block(spam, "internal") foo = find_block(top, "foo") + def test_noops(self): + # Check methods that don't work. They should warn and return False. + def check(w, msg): + self.assertEqual(str(w.message), msg) + sym = self.top.lookup("glob") + with test_support.catch_warning() as w: + warnings.simplefilter("always", DeprecationWarning) + self.assertFalse(sym.is_vararg()) + check(w, "is_vararg() is obsolete and will be removed") + w.reset() + self.assertFalse(sym.is_keywordarg()) + check(w, "is_keywordarg() is obsolete and will be removed") + w.reset() + self.assertFalse(sym.is_in_tuple()) + check(w, "is_in_tuple() is obsolete and will be removed") + def test_type(self): self.assertEqual(self.top.get_type(), "module") self.assertEqual(self.Mine.get_type(), "class") diff --git a/Misc/NEWS b/Misc/NEWS index daba2840930..9aaf5ebfc74 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -54,6 +54,9 @@ Core and Builtins Library ------- +- The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of + symtable.Symbol have been deprecated for removal in 3.0 and the next release. + - Issue #2234: distutils failed for some versions of the cygwin compiler. The version reported by these tools does not necessarily follow the python version numbering scheme, so the module is less strict when parsing it.