Compare commits
5 Commits
7f82f22eba
...
427613f005
Author | SHA1 | Date |
---|---|---|
Irit Katriel | 427613f005 | |
pxinwr | 1244c816d7 | |
Christian Heimes | 5c73afc36e | |
Pablo Galindo | 9bdc40ee3e | |
James Gerity | bcc9579227 |
|
@ -253,3 +253,41 @@ Unix Platforms
|
||||||
using :program:`gcc`.
|
using :program:`gcc`.
|
||||||
|
|
||||||
The file is read and scanned in chunks of *chunksize* bytes.
|
The file is read and scanned in chunks of *chunksize* bytes.
|
||||||
|
|
||||||
|
|
||||||
|
Linux Platforms
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. function:: freedesktop_os_release()
|
||||||
|
|
||||||
|
Get operating system identification from ``os-release`` file and return
|
||||||
|
it as a dict. The ``os-release`` file is a `freedesktop.org standard
|
||||||
|
<https://www.freedesktop.org/software/systemd/man/os-release.html>`_ and
|
||||||
|
is available in most Linux distributions. A noticeable exception is
|
||||||
|
Android and Android-based distributions.
|
||||||
|
|
||||||
|
Raises :exc:`OSError` or subclass when neither ``/etc/os-release`` nor
|
||||||
|
``/usr/lib/os-release`` can be read.
|
||||||
|
|
||||||
|
On success, the function returns a dictionary where keys and values are
|
||||||
|
strings. Values have their special characters like ``"`` and ``$``
|
||||||
|
unquoted. The fields ``NAME``, ``ID``, and ``PRETTY_NAME`` are always
|
||||||
|
defined according to the standard. All other fields are optional. Vendors
|
||||||
|
may include additional fields.
|
||||||
|
|
||||||
|
Note that fields like ``NAME``, ``VERSION``, and ``VARIANT`` are strings
|
||||||
|
suitable for presentation to users. Programs should use fields like
|
||||||
|
``ID``, ``ID_LIKE``, ``VERSION_ID``, or ``VARIANT_ID`` to identify
|
||||||
|
Linux distributions.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
def get_like_distro():
|
||||||
|
info = platform.freedesktop_os_release()
|
||||||
|
ids = [info["ID"]]
|
||||||
|
if "ID_LIKE" in info:
|
||||||
|
# ids are space separated and ordered by precedence
|
||||||
|
ids.extend(info["ID_LIKE"].split())
|
||||||
|
return ids
|
||||||
|
|
||||||
|
.. versionadded:: 3.10
|
||||||
|
|
|
@ -13,7 +13,8 @@ In particular, ``&`` followed by a symbol, token or parenthesized
|
||||||
group indicates a positive lookahead (i.e., is required to match but
|
group indicates a positive lookahead (i.e., is required to match but
|
||||||
not consumed), while ``!`` indicates a negative lookahead (i.e., is
|
not consumed), while ``!`` indicates a negative lookahead (i.e., is
|
||||||
required _not_ to match). We use the ``|`` separator to mean PEG's
|
required _not_ to match). We use the ``|`` separator to mean PEG's
|
||||||
"ordered choice" (written as ``/`` in traditional PEG grammars).
|
"ordered choice" (written as ``/`` in traditional PEG grammars). See
|
||||||
|
:pep:`617` for more details on the grammar's syntax.
|
||||||
|
|
||||||
.. literalinclude:: ../../Grammar/python.gram
|
.. literalinclude:: ../../Grammar/python.gram
|
||||||
:language: peg
|
:language: peg
|
||||||
|
|
|
@ -254,6 +254,14 @@ Added negative indexing support to :attr:`PurePath.parents
|
||||||
<pathlib.PurePath.parents>`.
|
<pathlib.PurePath.parents>`.
|
||||||
(Contributed by Yaroslav Pankovych in :issue:`21041`)
|
(Contributed by Yaroslav Pankovych in :issue:`21041`)
|
||||||
|
|
||||||
|
platform
|
||||||
|
--------
|
||||||
|
|
||||||
|
Added :func:`platform.freedesktop_os_release()` to retrieve operation system
|
||||||
|
identification from `freedesktop.org os-release
|
||||||
|
<https://www.freedesktop.org/software/systemd/man/os-release.html>`_ standard file.
|
||||||
|
(Contributed by Christian Heimes in :issue:`28468`)
|
||||||
|
|
||||||
py_compile
|
py_compile
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|
|
@ -52,18 +52,18 @@ type_expressions[asdl_expr_seq*]:
|
||||||
| a[asdl_expr_seq*]=','.expression+ {a}
|
| a[asdl_expr_seq*]=','.expression+ {a}
|
||||||
|
|
||||||
statements[asdl_stmt_seq*]: a=statement+ { (asdl_stmt_seq*)_PyPegen_seq_flatten(p, a) }
|
statements[asdl_stmt_seq*]: a=statement+ { (asdl_stmt_seq*)_PyPegen_seq_flatten(p, a) }
|
||||||
statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | a[asdl_stmt_seq*]=simple_stmt { a }
|
statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | a[asdl_stmt_seq*]=simple_stmts { a }
|
||||||
statement_newline[asdl_stmt_seq*]:
|
statement_newline[asdl_stmt_seq*]:
|
||||||
| a=compound_stmt NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) }
|
| a=compound_stmt NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) }
|
||||||
| simple_stmt
|
| simple_stmts
|
||||||
| NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, CHECK(stmt_ty, _Py_Pass(EXTRA))) }
|
| NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, CHECK(stmt_ty, _Py_Pass(EXTRA))) }
|
||||||
| ENDMARKER { _PyPegen_interactive_exit(p) }
|
| ENDMARKER { _PyPegen_interactive_exit(p) }
|
||||||
simple_stmt[asdl_stmt_seq*]:
|
simple_stmts[asdl_stmt_seq*]:
|
||||||
| a=small_stmt !';' NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } # Not needed, there for speedup
|
| a=simple_stmt !';' NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } # Not needed, there for speedup
|
||||||
| a[asdl_stmt_seq*]=';'.small_stmt+ [';'] NEWLINE { a }
|
| a[asdl_stmt_seq*]=';'.simple_stmt+ [';'] NEWLINE { a }
|
||||||
# NOTE: assignment MUST precede expression, else parsing a simple assignment
|
# NOTE: assignment MUST precede expression, else parsing a simple assignment
|
||||||
# will throw a SyntaxError.
|
# will throw a SyntaxError.
|
||||||
small_stmt[stmt_ty] (memo):
|
simple_stmt[stmt_ty] (memo):
|
||||||
| assignment
|
| assignment
|
||||||
| e=star_expressions { _Py_Expr(e, EXTRA) }
|
| e=star_expressions { _Py_Expr(e, EXTRA) }
|
||||||
| &'return' return_stmt
|
| &'return' return_stmt
|
||||||
|
@ -308,7 +308,7 @@ class_def_raw[stmt_ty]:
|
||||||
|
|
||||||
block[asdl_stmt_seq*] (memo):
|
block[asdl_stmt_seq*] (memo):
|
||||||
| NEWLINE INDENT a=statements DEDENT { a }
|
| NEWLINE INDENT a=statements DEDENT { a }
|
||||||
| simple_stmt
|
| simple_stmts
|
||||||
| invalid_block
|
| invalid_block
|
||||||
|
|
||||||
star_expressions[expr_ty]:
|
star_expressions[expr_ty]:
|
||||||
|
|
|
@ -1230,6 +1230,63 @@ def platform(aliased=0, terse=0):
|
||||||
_platform_cache[(aliased, terse)] = platform
|
_platform_cache[(aliased, terse)] = platform
|
||||||
return platform
|
return platform
|
||||||
|
|
||||||
|
### freedesktop.org os-release standard
|
||||||
|
# https://www.freedesktop.org/software/systemd/man/os-release.html
|
||||||
|
|
||||||
|
# NAME=value with optional quotes (' or "). The regular expression is less
|
||||||
|
# strict than shell lexer, but that's ok.
|
||||||
|
_os_release_line = re.compile(
|
||||||
|
"^(?P<name>[a-zA-Z0-9_]+)=(?P<quote>[\"\']?)(?P<value>.*)(?P=quote)$"
|
||||||
|
)
|
||||||
|
# unescape five special characters mentioned in the standard
|
||||||
|
_os_release_unescape = re.compile(r"\\([\\\$\"\'`])")
|
||||||
|
# /etc takes precedence over /usr/lib
|
||||||
|
_os_release_candidates = ("/etc/os-release", "/usr/lib/os-relesase")
|
||||||
|
_os_release_cache = None
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_os_release(lines):
|
||||||
|
# These fields are mandatory fields with well-known defaults
|
||||||
|
# in pratice all Linux distributions override NAME, ID, and PRETTY_NAME.
|
||||||
|
info = {
|
||||||
|
"NAME": "Linux",
|
||||||
|
"ID": "linux",
|
||||||
|
"PRETTY_NAME": "Linux",
|
||||||
|
}
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
mo = _os_release_line.match(line)
|
||||||
|
if mo is not None:
|
||||||
|
info[mo.group('name')] = _os_release_unescape.sub(
|
||||||
|
r"\1", mo.group('value')
|
||||||
|
)
|
||||||
|
|
||||||
|
return info
|
||||||
|
|
||||||
|
|
||||||
|
def freedesktop_os_release():
|
||||||
|
"""Return operation system identification from freedesktop.org os-release
|
||||||
|
"""
|
||||||
|
global _os_release_cache
|
||||||
|
|
||||||
|
if _os_release_cache is None:
|
||||||
|
errno = None
|
||||||
|
for candidate in _os_release_candidates:
|
||||||
|
try:
|
||||||
|
with open(candidate, encoding="utf-8") as f:
|
||||||
|
_os_release_cache = _parse_os_release(f)
|
||||||
|
break
|
||||||
|
except OSError as e:
|
||||||
|
errno = e.errno
|
||||||
|
else:
|
||||||
|
raise OSError(
|
||||||
|
errno,
|
||||||
|
f"Unable to read files {', '.join(_os_release_candidates)}"
|
||||||
|
)
|
||||||
|
|
||||||
|
return _os_release_cache.copy()
|
||||||
|
|
||||||
|
|
||||||
### Command line interface
|
### Command line interface
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -8,12 +8,70 @@ from unittest import mock
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
|
|
||||||
|
FEDORA_OS_RELEASE = """\
|
||||||
|
NAME=Fedora
|
||||||
|
VERSION="32 (Thirty Two)"
|
||||||
|
ID=fedora
|
||||||
|
VERSION_ID=32
|
||||||
|
VERSION_CODENAME=""
|
||||||
|
PLATFORM_ID="platform:f32"
|
||||||
|
PRETTY_NAME="Fedora 32 (Thirty Two)"
|
||||||
|
ANSI_COLOR="0;34"
|
||||||
|
LOGO=fedora-logo-icon
|
||||||
|
CPE_NAME="cpe:/o:fedoraproject:fedora:32"
|
||||||
|
HOME_URL="https://fedoraproject.org/"
|
||||||
|
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f32/system-administrators-guide/"
|
||||||
|
SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help"
|
||||||
|
BUG_REPORT_URL="https://bugzilla.redhat.com/"
|
||||||
|
REDHAT_BUGZILLA_PRODUCT="Fedora"
|
||||||
|
REDHAT_BUGZILLA_PRODUCT_VERSION=32
|
||||||
|
REDHAT_SUPPORT_PRODUCT="Fedora"
|
||||||
|
REDHAT_SUPPORT_PRODUCT_VERSION=32
|
||||||
|
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
|
||||||
|
"""
|
||||||
|
|
||||||
|
UBUNTU_OS_RELEASE = """\
|
||||||
|
NAME="Ubuntu"
|
||||||
|
VERSION="20.04.1 LTS (Focal Fossa)"
|
||||||
|
ID=ubuntu
|
||||||
|
ID_LIKE=debian
|
||||||
|
PRETTY_NAME="Ubuntu 20.04.1 LTS"
|
||||||
|
VERSION_ID="20.04"
|
||||||
|
HOME_URL="https://www.ubuntu.com/"
|
||||||
|
SUPPORT_URL="https://help.ubuntu.com/"
|
||||||
|
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
|
||||||
|
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
|
||||||
|
VERSION_CODENAME=focal
|
||||||
|
UBUNTU_CODENAME=focal
|
||||||
|
"""
|
||||||
|
|
||||||
|
TEST_OS_RELEASE = r"""
|
||||||
|
# test data
|
||||||
|
ID_LIKE="egg spam viking"
|
||||||
|
EMPTY=
|
||||||
|
# comments and empty lines are ignored
|
||||||
|
|
||||||
|
SINGLE_QUOTE='single'
|
||||||
|
EMPTY_SINGLE=''
|
||||||
|
DOUBLE_QUOTE="double"
|
||||||
|
EMPTY_DOUBLE=""
|
||||||
|
QUOTES="double\'s"
|
||||||
|
SPECIALS="\$\`\\\'\""
|
||||||
|
# invalid lines
|
||||||
|
=invalid
|
||||||
|
=
|
||||||
|
INVALID
|
||||||
|
IN-VALID=value
|
||||||
|
IN VALID=value
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class PlatformTest(unittest.TestCase):
|
class PlatformTest(unittest.TestCase):
|
||||||
def clear_caches(self):
|
def clear_caches(self):
|
||||||
platform._platform_cache.clear()
|
platform._platform_cache.clear()
|
||||||
platform._sys_version_cache.clear()
|
platform._sys_version_cache.clear()
|
||||||
platform._uname_cache = None
|
platform._uname_cache = None
|
||||||
|
platform._os_release_cache = None
|
||||||
|
|
||||||
def test_architecture(self):
|
def test_architecture(self):
|
||||||
res = platform.architecture()
|
res = platform.architecture()
|
||||||
|
@ -382,6 +440,54 @@ class PlatformTest(unittest.TestCase):
|
||||||
self.assertEqual(platform.platform(terse=1), expected_terse)
|
self.assertEqual(platform.platform(terse=1), expected_terse)
|
||||||
self.assertEqual(platform.platform(), expected)
|
self.assertEqual(platform.platform(), expected)
|
||||||
|
|
||||||
|
def test_freedesktop_os_release(self):
|
||||||
|
self.addCleanup(self.clear_caches)
|
||||||
|
self.clear_caches()
|
||||||
|
|
||||||
|
if any(os.path.isfile(fn) for fn in platform._os_release_candidates):
|
||||||
|
info = platform.freedesktop_os_release()
|
||||||
|
self.assertIn("NAME", info)
|
||||||
|
self.assertIn("ID", info)
|
||||||
|
|
||||||
|
info["CPYTHON_TEST"] = "test"
|
||||||
|
self.assertNotIn(
|
||||||
|
"CPYTHON_TEST",
|
||||||
|
platform.freedesktop_os_release()
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
with self.assertRaises(OSError):
|
||||||
|
platform.freedesktop_os_release()
|
||||||
|
|
||||||
|
def test_parse_os_release(self):
|
||||||
|
info = platform._parse_os_release(FEDORA_OS_RELEASE.splitlines())
|
||||||
|
self.assertEqual(info["NAME"], "Fedora")
|
||||||
|
self.assertEqual(info["ID"], "fedora")
|
||||||
|
self.assertNotIn("ID_LIKE", info)
|
||||||
|
self.assertEqual(info["VERSION_CODENAME"], "")
|
||||||
|
|
||||||
|
info = platform._parse_os_release(UBUNTU_OS_RELEASE.splitlines())
|
||||||
|
self.assertEqual(info["NAME"], "Ubuntu")
|
||||||
|
self.assertEqual(info["ID"], "ubuntu")
|
||||||
|
self.assertEqual(info["ID_LIKE"], "debian")
|
||||||
|
self.assertEqual(info["VERSION_CODENAME"], "focal")
|
||||||
|
|
||||||
|
info = platform._parse_os_release(TEST_OS_RELEASE.splitlines())
|
||||||
|
expected = {
|
||||||
|
"ID": "linux",
|
||||||
|
"NAME": "Linux",
|
||||||
|
"PRETTY_NAME": "Linux",
|
||||||
|
"ID_LIKE": "egg spam viking",
|
||||||
|
"EMPTY": "",
|
||||||
|
"DOUBLE_QUOTE": "double",
|
||||||
|
"EMPTY_DOUBLE": "",
|
||||||
|
"SINGLE_QUOTE": "single",
|
||||||
|
"EMPTY_SINGLE": "",
|
||||||
|
"QUOTES": "double's",
|
||||||
|
"SPECIALS": "$`\\'\"",
|
||||||
|
}
|
||||||
|
self.assertEqual(info, expected)
|
||||||
|
self.assertEqual(len(info["SPECIALS"]), 5)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -519,10 +519,14 @@ class WakeupSocketSignalTests(unittest.TestCase):
|
||||||
else:
|
else:
|
||||||
write.setblocking(False)
|
write.setblocking(False)
|
||||||
|
|
||||||
# Start with large chunk size to reduce the
|
|
||||||
# number of send needed to fill the buffer.
|
|
||||||
written = 0
|
written = 0
|
||||||
for chunk_size in (2 ** 16, 2 ** 8, 1):
|
if sys.platform == "vxworks":
|
||||||
|
CHUNK_SIZES = (1,)
|
||||||
|
else:
|
||||||
|
# Start with large chunk size to reduce the
|
||||||
|
# number of send needed to fill the buffer.
|
||||||
|
CHUNK_SIZES = (2 ** 16, 2 ** 8, 1)
|
||||||
|
for chunk_size in CHUNK_SIZES:
|
||||||
chunk = b"x" * chunk_size
|
chunk = b"x" * chunk_size
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
|
@ -595,6 +599,7 @@ class WakeupSocketSignalTests(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
|
@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
|
||||||
|
@unittest.skipUnless(hasattr(signal, 'siginterrupt'), "needs signal.siginterrupt()")
|
||||||
class SiginterruptTest(unittest.TestCase):
|
class SiginterruptTest(unittest.TestCase):
|
||||||
|
|
||||||
def readpipe_interrupted(self, interrupt):
|
def readpipe_interrupted(self, interrupt):
|
||||||
|
@ -680,6 +685,8 @@ class SiginterruptTest(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
|
@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
|
||||||
|
@unittest.skipUnless(hasattr(signal, 'getitimer') and hasattr(signal, 'setitimer'),
|
||||||
|
"needs signal.getitimer() and signal.setitimer()")
|
||||||
class ItimerTest(unittest.TestCase):
|
class ItimerTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.hndl_called = False
|
self.hndl_called = False
|
||||||
|
|
|
@ -1123,6 +1123,18 @@ class TestTracebackException(unittest.TestCase):
|
||||||
self.assertEqual(exc_info[0], exc.exc_type)
|
self.assertEqual(exc_info[0], exc.exc_type)
|
||||||
self.assertEqual(str(exc_info[1]), str(exc))
|
self.assertEqual(str(exc_info[1]), str(exc))
|
||||||
|
|
||||||
|
def test_no_refs_to_exception_and_traceback_objects(self):
|
||||||
|
try:
|
||||||
|
1/0
|
||||||
|
except Exception:
|
||||||
|
exc_info = sys.exc_info()
|
||||||
|
|
||||||
|
refcnt1 = sys.getrefcount(exc_info[1])
|
||||||
|
refcnt2 = sys.getrefcount(exc_info[2])
|
||||||
|
exc = traceback.TracebackException(*exc_info)
|
||||||
|
self.assertEqual(sys.getrefcount(exc_info[1]), refcnt1)
|
||||||
|
self.assertEqual(sys.getrefcount(exc_info[2]), refcnt2)
|
||||||
|
|
||||||
def test_comparison_basic(self):
|
def test_comparison_basic(self):
|
||||||
try:
|
try:
|
||||||
1/0
|
1/0
|
||||||
|
@ -1172,6 +1184,16 @@ class TestTracebackException(unittest.TestCase):
|
||||||
exc7 = traceback.TracebackException(*exc_info, limit=-2, capture_locals=True)
|
exc7 = traceback.TracebackException(*exc_info, limit=-2, capture_locals=True)
|
||||||
self.assertNotEqual(exc6, exc7)
|
self.assertNotEqual(exc6, exc7)
|
||||||
|
|
||||||
|
def test_comparison_equivalent_exceptions_are_equal(self):
|
||||||
|
excs = []
|
||||||
|
for _ in range(2):
|
||||||
|
try:
|
||||||
|
1/0
|
||||||
|
except:
|
||||||
|
excs.append(traceback.TracebackException(*sys.exc_info()))
|
||||||
|
self.assertEqual(excs[0], excs[1])
|
||||||
|
self.assertEqual(list(excs[0].format()), list(excs[1].format()))
|
||||||
|
|
||||||
def test_unhashable(self):
|
def test_unhashable(self):
|
||||||
class UnhashableException(Exception):
|
class UnhashableException(Exception):
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
|
|
|
@ -510,7 +510,6 @@ class TracebackException:
|
||||||
_seen=_seen)
|
_seen=_seen)
|
||||||
else:
|
else:
|
||||||
context = None
|
context = None
|
||||||
self.exc_traceback = exc_traceback
|
|
||||||
self.__cause__ = cause
|
self.__cause__ = cause
|
||||||
self.__context__ = context
|
self.__context__ = context
|
||||||
self.__suppress_context__ = \
|
self.__suppress_context__ = \
|
||||||
|
@ -627,7 +626,7 @@ class TracebackException:
|
||||||
not self.__suppress_context__):
|
not self.__suppress_context__):
|
||||||
yield from self.__context__.format(chain=chain)
|
yield from self.__context__.format(chain=chain)
|
||||||
yield _context_message
|
yield _context_message
|
||||||
if self.exc_traceback is not None:
|
if self.stack:
|
||||||
yield 'Traceback (most recent call last):\n'
|
yield 'Traceback (most recent call last):\n'
|
||||||
yield from self.stack.format()
|
yield from self.stack.format()
|
||||||
yield from self.format_exception_only()
|
yield from self.format_exception_only()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Support signal module on VxWorks.
|
|
@ -0,0 +1,2 @@
|
||||||
|
Add :func:`platform.freedesktop_os_release` function to parse freedesktop.org
|
||||||
|
``os-release`` files.
|
|
@ -0,0 +1 @@
|
||||||
|
:class:`~traceback.TracebackException` no longer holds a reference to the exception's traceback object. Consequently, instances of TracebackException for equivalent but non-equal exceptions now compare as equal.
|
|
@ -120,7 +120,11 @@ static volatile struct {
|
||||||
#else
|
#else
|
||||||
#define INVALID_FD (-1)
|
#define INVALID_FD (-1)
|
||||||
static volatile struct {
|
static volatile struct {
|
||||||
|
#ifdef __VXWORKS__
|
||||||
|
int fd;
|
||||||
|
#else
|
||||||
sig_atomic_t fd;
|
sig_atomic_t fd;
|
||||||
|
#endif
|
||||||
int warn_on_full_buffer;
|
int warn_on_full_buffer;
|
||||||
} wakeup = {.fd = INVALID_FD, .warn_on_full_buffer = 1};
|
} wakeup = {.fd = INVALID_FD, .warn_on_full_buffer = 1};
|
||||||
#endif
|
#endif
|
||||||
|
|
188
Parser/parser.c
188
Parser/parser.c
|
@ -75,8 +75,8 @@ static KeywordToken *reserved_keywords[] = {
|
||||||
#define statements_type 1006
|
#define statements_type 1006
|
||||||
#define statement_type 1007
|
#define statement_type 1007
|
||||||
#define statement_newline_type 1008
|
#define statement_newline_type 1008
|
||||||
#define simple_stmt_type 1009
|
#define simple_stmts_type 1009
|
||||||
#define small_stmt_type 1010
|
#define simple_stmt_type 1010
|
||||||
#define compound_stmt_type 1011
|
#define compound_stmt_type 1011
|
||||||
#define assignment_type 1012
|
#define assignment_type 1012
|
||||||
#define augassign_type 1013
|
#define augassign_type 1013
|
||||||
|
@ -391,8 +391,8 @@ static asdl_expr_seq* type_expressions_rule(Parser *p);
|
||||||
static asdl_stmt_seq* statements_rule(Parser *p);
|
static asdl_stmt_seq* statements_rule(Parser *p);
|
||||||
static asdl_stmt_seq* statement_rule(Parser *p);
|
static asdl_stmt_seq* statement_rule(Parser *p);
|
||||||
static asdl_stmt_seq* statement_newline_rule(Parser *p);
|
static asdl_stmt_seq* statement_newline_rule(Parser *p);
|
||||||
static asdl_stmt_seq* simple_stmt_rule(Parser *p);
|
static asdl_stmt_seq* simple_stmts_rule(Parser *p);
|
||||||
static stmt_ty small_stmt_rule(Parser *p);
|
static stmt_ty simple_stmt_rule(Parser *p);
|
||||||
static stmt_ty compound_stmt_rule(Parser *p);
|
static stmt_ty compound_stmt_rule(Parser *p);
|
||||||
static stmt_ty assignment_rule(Parser *p);
|
static stmt_ty assignment_rule(Parser *p);
|
||||||
static AugOperator* augassign_rule(Parser *p);
|
static AugOperator* augassign_rule(Parser *p);
|
||||||
|
@ -1213,7 +1213,7 @@ statements_rule(Parser *p)
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// statement: compound_stmt | simple_stmt
|
// statement: compound_stmt | simple_stmts
|
||||||
static asdl_stmt_seq*
|
static asdl_stmt_seq*
|
||||||
statement_rule(Parser *p)
|
statement_rule(Parser *p)
|
||||||
{
|
{
|
||||||
|
@ -1248,18 +1248,18 @@ statement_rule(Parser *p)
|
||||||
D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
|
||||||
}
|
}
|
||||||
{ // simple_stmt
|
{ // simple_stmts
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
|
D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
|
||||||
asdl_stmt_seq* a;
|
asdl_stmt_seq* a;
|
||||||
if (
|
if (
|
||||||
(a = (asdl_stmt_seq*)simple_stmt_rule(p)) // simple_stmt
|
(a = (asdl_stmt_seq*)simple_stmts_rule(p)) // simple_stmts
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
|
D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
|
||||||
_res = a;
|
_res = a;
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
|
@ -1270,7 +1270,7 @@ statement_rule(Parser *p)
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
|
||||||
}
|
}
|
||||||
_res = NULL;
|
_res = NULL;
|
||||||
done:
|
done:
|
||||||
|
@ -1278,7 +1278,7 @@ statement_rule(Parser *p)
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// statement_newline: compound_stmt NEWLINE | simple_stmt | NEWLINE | $
|
// statement_newline: compound_stmt NEWLINE | simple_stmts | NEWLINE | $
|
||||||
static asdl_stmt_seq*
|
static asdl_stmt_seq*
|
||||||
statement_newline_rule(Parser *p)
|
statement_newline_rule(Parser *p)
|
||||||
{
|
{
|
||||||
|
@ -1325,24 +1325,24 @@ statement_newline_rule(Parser *p)
|
||||||
D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt NEWLINE"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt NEWLINE"));
|
||||||
}
|
}
|
||||||
{ // simple_stmt
|
{ // simple_stmts
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
|
D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
|
||||||
asdl_stmt_seq* simple_stmt_var;
|
asdl_stmt_seq* simple_stmts_var;
|
||||||
if (
|
if (
|
||||||
(simple_stmt_var = simple_stmt_rule(p)) // simple_stmt
|
(simple_stmts_var = simple_stmts_rule(p)) // simple_stmts
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
|
D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
|
||||||
_res = simple_stmt_var;
|
_res = simple_stmts_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
|
||||||
}
|
}
|
||||||
{ // NEWLINE
|
{ // NEWLINE
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
|
@ -1407,9 +1407,9 @@ statement_newline_rule(Parser *p)
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// simple_stmt: small_stmt !';' NEWLINE | ';'.small_stmt+ ';'? NEWLINE
|
// simple_stmts: simple_stmt !';' NEWLINE | ';'.simple_stmt+ ';'? NEWLINE
|
||||||
static asdl_stmt_seq*
|
static asdl_stmt_seq*
|
||||||
simple_stmt_rule(Parser *p)
|
simple_stmts_rule(Parser *p)
|
||||||
{
|
{
|
||||||
D(p->level++);
|
D(p->level++);
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
|
@ -1418,23 +1418,23 @@ simple_stmt_rule(Parser *p)
|
||||||
}
|
}
|
||||||
asdl_stmt_seq* _res = NULL;
|
asdl_stmt_seq* _res = NULL;
|
||||||
int _mark = p->mark;
|
int _mark = p->mark;
|
||||||
{ // small_stmt !';' NEWLINE
|
{ // simple_stmt !';' NEWLINE
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "small_stmt !';' NEWLINE"));
|
D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
|
||||||
stmt_ty a;
|
stmt_ty a;
|
||||||
Token * newline_var;
|
Token * newline_var;
|
||||||
if (
|
if (
|
||||||
(a = small_stmt_rule(p)) // small_stmt
|
(a = simple_stmt_rule(p)) // simple_stmt
|
||||||
&&
|
&&
|
||||||
_PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 13) // token=';'
|
_PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 13) // token=';'
|
||||||
&&
|
&&
|
||||||
(newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE'
|
(newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "small_stmt !';' NEWLINE"));
|
D(fprintf(stderr, "%*c+ simple_stmts[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
|
||||||
_res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a );
|
_res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
|
@ -1444,28 +1444,28 @@ simple_stmt_rule(Parser *p)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmts[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "small_stmt !';' NEWLINE"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt !';' NEWLINE"));
|
||||||
}
|
}
|
||||||
{ // ';'.small_stmt+ ';'? NEWLINE
|
{ // ';'.simple_stmt+ ';'? NEWLINE
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'.small_stmt+ ';'? NEWLINE"));
|
D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
|
||||||
void *_opt_var;
|
void *_opt_var;
|
||||||
UNUSED(_opt_var); // Silence compiler warnings
|
UNUSED(_opt_var); // Silence compiler warnings
|
||||||
asdl_stmt_seq* a;
|
asdl_stmt_seq* a;
|
||||||
Token * newline_var;
|
Token * newline_var;
|
||||||
if (
|
if (
|
||||||
(a = (asdl_stmt_seq*)_gather_12_rule(p)) // ';'.small_stmt+
|
(a = (asdl_stmt_seq*)_gather_12_rule(p)) // ';'.simple_stmt+
|
||||||
&&
|
&&
|
||||||
(_opt_var = _PyPegen_expect_token(p, 13), 1) // ';'?
|
(_opt_var = _PyPegen_expect_token(p, 13), 1) // ';'?
|
||||||
&&
|
&&
|
||||||
(newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE'
|
(newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'.small_stmt+ ';'? NEWLINE"));
|
D(fprintf(stderr, "%*c+ simple_stmts[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
|
||||||
_res = a;
|
_res = a;
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
|
@ -1475,8 +1475,8 @@ simple_stmt_rule(Parser *p)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmts[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'.small_stmt+ ';'? NEWLINE"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
|
||||||
}
|
}
|
||||||
_res = NULL;
|
_res = NULL;
|
||||||
done:
|
done:
|
||||||
|
@ -1484,7 +1484,7 @@ simple_stmt_rule(Parser *p)
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// small_stmt:
|
// simple_stmt:
|
||||||
// | assignment
|
// | assignment
|
||||||
// | star_expressions
|
// | star_expressions
|
||||||
// | &'return' return_stmt
|
// | &'return' return_stmt
|
||||||
|
@ -1499,7 +1499,7 @@ simple_stmt_rule(Parser *p)
|
||||||
// | &'global' global_stmt
|
// | &'global' global_stmt
|
||||||
// | &'nonlocal' nonlocal_stmt
|
// | &'nonlocal' nonlocal_stmt
|
||||||
static stmt_ty
|
static stmt_ty
|
||||||
small_stmt_rule(Parser *p)
|
simple_stmt_rule(Parser *p)
|
||||||
{
|
{
|
||||||
D(p->level++);
|
D(p->level++);
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
|
@ -1507,7 +1507,7 @@ small_stmt_rule(Parser *p)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
stmt_ty _res = NULL;
|
stmt_ty _res = NULL;
|
||||||
if (_PyPegen_is_memoized(p, small_stmt_type, &_res)) {
|
if (_PyPegen_is_memoized(p, simple_stmt_type, &_res)) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
@ -1526,18 +1526,18 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment"));
|
||||||
stmt_ty assignment_var;
|
stmt_ty assignment_var;
|
||||||
if (
|
if (
|
||||||
(assignment_var = assignment_rule(p)) // assignment
|
(assignment_var = assignment_rule(p)) // assignment
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment"));
|
||||||
_res = assignment_var;
|
_res = assignment_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment"));
|
||||||
}
|
}
|
||||||
{ // star_expressions
|
{ // star_expressions
|
||||||
|
@ -1545,13 +1545,13 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
|
||||||
expr_ty e;
|
expr_ty e;
|
||||||
if (
|
if (
|
||||||
(e = star_expressions_rule(p)) // star_expressions
|
(e = star_expressions_rule(p)) // star_expressions
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
|
||||||
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
||||||
if (_token == NULL) {
|
if (_token == NULL) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
|
@ -1570,7 +1570,7 @@ small_stmt_rule(Parser *p)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
|
||||||
}
|
}
|
||||||
{ // &'return' return_stmt
|
{ // &'return' return_stmt
|
||||||
|
@ -1578,7 +1578,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
|
||||||
stmt_ty return_stmt_var;
|
stmt_ty return_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 500) // token='return'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 500) // token='return'
|
||||||
|
@ -1586,12 +1586,12 @@ small_stmt_rule(Parser *p)
|
||||||
(return_stmt_var = return_stmt_rule(p)) // return_stmt
|
(return_stmt_var = return_stmt_rule(p)) // return_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
|
||||||
_res = return_stmt_var;
|
_res = return_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'return' return_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'return' return_stmt"));
|
||||||
}
|
}
|
||||||
{ // &('import' | 'from') import_stmt
|
{ // &('import' | 'from') import_stmt
|
||||||
|
@ -1599,7 +1599,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
|
||||||
stmt_ty import_stmt_var;
|
stmt_ty import_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead(1, _tmp_14_rule, p)
|
_PyPegen_lookahead(1, _tmp_14_rule, p)
|
||||||
|
@ -1607,12 +1607,12 @@ small_stmt_rule(Parser *p)
|
||||||
(import_stmt_var = import_stmt_rule(p)) // import_stmt
|
(import_stmt_var = import_stmt_rule(p)) // import_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
|
||||||
_res = import_stmt_var;
|
_res = import_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('import' | 'from') import_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('import' | 'from') import_stmt"));
|
||||||
}
|
}
|
||||||
{ // &'raise' raise_stmt
|
{ // &'raise' raise_stmt
|
||||||
|
@ -1620,7 +1620,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
|
||||||
stmt_ty raise_stmt_var;
|
stmt_ty raise_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 501) // token='raise'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 501) // token='raise'
|
||||||
|
@ -1628,12 +1628,12 @@ small_stmt_rule(Parser *p)
|
||||||
(raise_stmt_var = raise_stmt_rule(p)) // raise_stmt
|
(raise_stmt_var = raise_stmt_rule(p)) // raise_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
|
||||||
_res = raise_stmt_var;
|
_res = raise_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'raise' raise_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'raise' raise_stmt"));
|
||||||
}
|
}
|
||||||
{ // 'pass'
|
{ // 'pass'
|
||||||
|
@ -1641,13 +1641,13 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'"));
|
||||||
Token * _keyword;
|
Token * _keyword;
|
||||||
if (
|
if (
|
||||||
(_keyword = _PyPegen_expect_token(p, 502)) // token='pass'
|
(_keyword = _PyPegen_expect_token(p, 502)) // token='pass'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'"));
|
||||||
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
||||||
if (_token == NULL) {
|
if (_token == NULL) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
|
@ -1666,7 +1666,7 @@ small_stmt_rule(Parser *p)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'pass'"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'pass'"));
|
||||||
}
|
}
|
||||||
{ // &'del' del_stmt
|
{ // &'del' del_stmt
|
||||||
|
@ -1674,7 +1674,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
|
||||||
stmt_ty del_stmt_var;
|
stmt_ty del_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 503) // token='del'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 503) // token='del'
|
||||||
|
@ -1682,12 +1682,12 @@ small_stmt_rule(Parser *p)
|
||||||
(del_stmt_var = del_stmt_rule(p)) // del_stmt
|
(del_stmt_var = del_stmt_rule(p)) // del_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
|
||||||
_res = del_stmt_var;
|
_res = del_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'del' del_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'del' del_stmt"));
|
||||||
}
|
}
|
||||||
{ // &'yield' yield_stmt
|
{ // &'yield' yield_stmt
|
||||||
|
@ -1695,7 +1695,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
|
||||||
stmt_ty yield_stmt_var;
|
stmt_ty yield_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 504) // token='yield'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 504) // token='yield'
|
||||||
|
@ -1703,12 +1703,12 @@ small_stmt_rule(Parser *p)
|
||||||
(yield_stmt_var = yield_stmt_rule(p)) // yield_stmt
|
(yield_stmt_var = yield_stmt_rule(p)) // yield_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
|
||||||
_res = yield_stmt_var;
|
_res = yield_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'yield' yield_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'yield' yield_stmt"));
|
||||||
}
|
}
|
||||||
{ // &'assert' assert_stmt
|
{ // &'assert' assert_stmt
|
||||||
|
@ -1716,7 +1716,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
|
||||||
stmt_ty assert_stmt_var;
|
stmt_ty assert_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 505) // token='assert'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 505) // token='assert'
|
||||||
|
@ -1724,12 +1724,12 @@ small_stmt_rule(Parser *p)
|
||||||
(assert_stmt_var = assert_stmt_rule(p)) // assert_stmt
|
(assert_stmt_var = assert_stmt_rule(p)) // assert_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
|
||||||
_res = assert_stmt_var;
|
_res = assert_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'assert' assert_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'assert' assert_stmt"));
|
||||||
}
|
}
|
||||||
{ // 'break'
|
{ // 'break'
|
||||||
|
@ -1737,13 +1737,13 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'"));
|
||||||
Token * _keyword;
|
Token * _keyword;
|
||||||
if (
|
if (
|
||||||
(_keyword = _PyPegen_expect_token(p, 506)) // token='break'
|
(_keyword = _PyPegen_expect_token(p, 506)) // token='break'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'"));
|
||||||
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
||||||
if (_token == NULL) {
|
if (_token == NULL) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
|
@ -1762,7 +1762,7 @@ small_stmt_rule(Parser *p)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'break'"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'break'"));
|
||||||
}
|
}
|
||||||
{ // 'continue'
|
{ // 'continue'
|
||||||
|
@ -1770,13 +1770,13 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'"));
|
||||||
Token * _keyword;
|
Token * _keyword;
|
||||||
if (
|
if (
|
||||||
(_keyword = _PyPegen_expect_token(p, 507)) // token='continue'
|
(_keyword = _PyPegen_expect_token(p, 507)) // token='continue'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'"));
|
||||||
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
|
||||||
if (_token == NULL) {
|
if (_token == NULL) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
|
@ -1795,7 +1795,7 @@ small_stmt_rule(Parser *p)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'continue'"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'continue'"));
|
||||||
}
|
}
|
||||||
{ // &'global' global_stmt
|
{ // &'global' global_stmt
|
||||||
|
@ -1803,7 +1803,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
|
||||||
stmt_ty global_stmt_var;
|
stmt_ty global_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 508) // token='global'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 508) // token='global'
|
||||||
|
@ -1811,12 +1811,12 @@ small_stmt_rule(Parser *p)
|
||||||
(global_stmt_var = global_stmt_rule(p)) // global_stmt
|
(global_stmt_var = global_stmt_rule(p)) // global_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
|
||||||
_res = global_stmt_var;
|
_res = global_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'global' global_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'global' global_stmt"));
|
||||||
}
|
}
|
||||||
{ // &'nonlocal' nonlocal_stmt
|
{ // &'nonlocal' nonlocal_stmt
|
||||||
|
@ -1824,7 +1824,7 @@ small_stmt_rule(Parser *p)
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
|
D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
|
||||||
stmt_ty nonlocal_stmt_var;
|
stmt_ty nonlocal_stmt_var;
|
||||||
if (
|
if (
|
||||||
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 509) // token='nonlocal'
|
_PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 509) // token='nonlocal'
|
||||||
|
@ -1832,17 +1832,17 @@ small_stmt_rule(Parser *p)
|
||||||
(nonlocal_stmt_var = nonlocal_stmt_rule(p)) // nonlocal_stmt
|
(nonlocal_stmt_var = nonlocal_stmt_rule(p)) // nonlocal_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
|
D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
|
||||||
_res = nonlocal_stmt_var;
|
_res = nonlocal_stmt_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
|
||||||
}
|
}
|
||||||
_res = NULL;
|
_res = NULL;
|
||||||
done:
|
done:
|
||||||
_PyPegen_insert_memo(p, _mark, small_stmt_type, _res);
|
_PyPegen_insert_memo(p, _mark, simple_stmt_type, _res);
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
@ -6235,7 +6235,7 @@ class_def_raw_rule(Parser *p)
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// block: NEWLINE INDENT statements DEDENT | simple_stmt | invalid_block
|
// block: NEWLINE INDENT statements DEDENT | simple_stmts | invalid_block
|
||||||
static asdl_stmt_seq*
|
static asdl_stmt_seq*
|
||||||
block_rule(Parser *p)
|
block_rule(Parser *p)
|
||||||
{
|
{
|
||||||
|
@ -6283,24 +6283,24 @@ block_rule(Parser *p)
|
||||||
D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
|
||||||
}
|
}
|
||||||
{ // simple_stmt
|
{ // simple_stmts
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
|
D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
|
||||||
asdl_stmt_seq* simple_stmt_var;
|
asdl_stmt_seq* simple_stmts_var;
|
||||||
if (
|
if (
|
||||||
(simple_stmt_var = simple_stmt_rule(p)) // simple_stmt
|
(simple_stmts_var = simple_stmts_rule(p)) // simple_stmts
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
|
D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
|
||||||
_res = simple_stmt_var;
|
_res = simple_stmts_var;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
|
||||||
}
|
}
|
||||||
if (p->call_invalid_rules) { // invalid_block
|
if (p->call_invalid_rules) { // invalid_block
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
|
@ -16274,7 +16274,7 @@ _loop1_11_rule(Parser *p)
|
||||||
return _seq;
|
return _seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
// _loop0_13: ';' small_stmt
|
// _loop0_13: ';' simple_stmt
|
||||||
static asdl_seq *
|
static asdl_seq *
|
||||||
_loop0_13_rule(Parser *p)
|
_loop0_13_rule(Parser *p)
|
||||||
{
|
{
|
||||||
|
@ -16295,18 +16295,18 @@ _loop0_13_rule(Parser *p)
|
||||||
}
|
}
|
||||||
ssize_t _children_capacity = 1;
|
ssize_t _children_capacity = 1;
|
||||||
ssize_t _n = 0;
|
ssize_t _n = 0;
|
||||||
{ // ';' small_stmt
|
{ // ';' simple_stmt
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' small_stmt"));
|
D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt"));
|
||||||
Token * _literal;
|
Token * _literal;
|
||||||
stmt_ty elem;
|
stmt_ty elem;
|
||||||
while (
|
while (
|
||||||
(_literal = _PyPegen_expect_token(p, 13)) // token=';'
|
(_literal = _PyPegen_expect_token(p, 13)) // token=';'
|
||||||
&&
|
&&
|
||||||
(elem = small_stmt_rule(p)) // small_stmt
|
(elem = simple_stmt_rule(p)) // simple_stmt
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_res = elem;
|
_res = elem;
|
||||||
|
@ -16332,7 +16332,7 @@ _loop0_13_rule(Parser *p)
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' small_stmt"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' simple_stmt"));
|
||||||
}
|
}
|
||||||
asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
|
asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
|
||||||
if (!_seq) {
|
if (!_seq) {
|
||||||
|
@ -16349,7 +16349,7 @@ _loop0_13_rule(Parser *p)
|
||||||
return _seq;
|
return _seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
// _gather_12: small_stmt _loop0_13
|
// _gather_12: simple_stmt _loop0_13
|
||||||
static asdl_seq *
|
static asdl_seq *
|
||||||
_gather_12_rule(Parser *p)
|
_gather_12_rule(Parser *p)
|
||||||
{
|
{
|
||||||
|
@ -16360,27 +16360,27 @@ _gather_12_rule(Parser *p)
|
||||||
}
|
}
|
||||||
asdl_seq * _res = NULL;
|
asdl_seq * _res = NULL;
|
||||||
int _mark = p->mark;
|
int _mark = p->mark;
|
||||||
{ // small_stmt _loop0_13
|
{ // simple_stmt _loop0_13
|
||||||
if (p->error_indicator) {
|
if (p->error_indicator) {
|
||||||
D(p->level--);
|
D(p->level--);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
D(fprintf(stderr, "%*c> _gather_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "small_stmt _loop0_13"));
|
D(fprintf(stderr, "%*c> _gather_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_13"));
|
||||||
stmt_ty elem;
|
stmt_ty elem;
|
||||||
asdl_seq * seq;
|
asdl_seq * seq;
|
||||||
if (
|
if (
|
||||||
(elem = small_stmt_rule(p)) // small_stmt
|
(elem = simple_stmt_rule(p)) // simple_stmt
|
||||||
&&
|
&&
|
||||||
(seq = _loop0_13_rule(p)) // _loop0_13
|
(seq = _loop0_13_rule(p)) // _loop0_13
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ _gather_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "small_stmt _loop0_13"));
|
D(fprintf(stderr, "%*c+ _gather_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_13"));
|
||||||
_res = _PyPegen_seq_insert_in_front(p, elem, seq);
|
_res = _PyPegen_seq_insert_in_front(p, elem, seq);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
p->mark = _mark;
|
p->mark = _mark;
|
||||||
D(fprintf(stderr, "%*c%s _gather_12[%d-%d]: %s failed!\n", p->level, ' ',
|
D(fprintf(stderr, "%*c%s _gather_12[%d-%d]: %s failed!\n", p->level, ' ',
|
||||||
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "small_stmt _loop0_13"));
|
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_13"));
|
||||||
}
|
}
|
||||||
_res = NULL;
|
_res = NULL;
|
||||||
done:
|
done:
|
||||||
|
|
Loading…
Reference in New Issue