Make numerous improvements

- Python static hello world now 1.8mb
- Python static fully loaded now 10mb
- Python HTTPS client now uses MbedTLS
- Python REPL now completes import stmts
- Increase stack size for Python for now
- Begin synthesizing posixpath and ntpath
- Restore Python \N{UNICODE NAME} support
- Restore Python NFKD symbol normalization
- Add optimized code path for Intel SHA-NI
- Get more Python unit tests passing faster
- Get Python help() pagination working on NT
- Python hashlib now supports MbedTLS PBKDF2
- Make memcpy/memmove/memcmp/bcmp/etc. faster
- Add Mersenne Twister and Vigna to LIBC_RAND
- Provide privileged __printf() for error code
- Fix zipos opendir() so that it reports ENOTDIR
- Add basic chmod() implementation for Windows NT
- Add Cosmo's best functions to Python cosmo module
- Pin function trace indent depth to that of caller
- Show memory diagram on invalid access in MODE=dbg
- Differentiate stack overflow on crash in MODE=dbg
- Add stb_truetype and tools for analyzing font files
- Upgrade to UNICODE 13 and reduce its binary footprint
- COMPILE.COM now logs resource usage of build commands
- Start implementing basic poll() support on bare metal
- Set getauxval(AT_EXECFN) to GetModuleFileName() on NT
- Add descriptions to strerror() in non-TINY build modes
- Add COUNTBRANCH() macro to help with micro-optimizations
- Make error / backtrace / asan / memory code more unbreakable
- Add fast perfect C implementation of μ-Law and a-Law audio codecs
- Make strtol() functions consistent with other libc implementations
- Improve Linenoise implementation (see also github.com/jart/bestline)
- COMPILE.COM now suppresses stdout/stderr of successful build commands
This commit is contained in:
Justine Tunney 2021-09-27 22:58:51 -07:00
parent fa7b4f5bd1
commit 39bf41f4eb
806 changed files with 77494 additions and 63859 deletions

View file

@ -599,14 +599,13 @@ non-important content
self.assertEqual(f'{2}\U00000394{3}', '2\u03943')
self.assertEqual(f'\U00000394{3}', '\u03943')
# # TODO(jart): pycomp.com needs \N thing
# self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}', '\u0394')
# self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
# self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}{3}', '2\u03943')
# self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}{3}', '\u03943')
# self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
# self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}3', '2\u03943')
# self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}3', '\u03943')
self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}', '\u0394')
self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}{3}', '2\u03943')
self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}{3}', '\u03943')
self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}3', '2\u03943')
self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}3', '\u03943')
self.assertEqual(f'\x20', ' ')
self.assertEqual(r'\x20', '\\x20')
@ -625,53 +624,49 @@ non-important content
self.assertEqual(f'\\{6*7}', '\\42')
self.assertEqual(fr'\{6*7}', '\\42')
# # TODO(jart): pycomp.com needs \N thing
# AMPERSAND = 'spam'
# # Get the right unicode character (&), or pick up local variable
# # depending on the number of backslashes.
# self.assertEqual(f'\N{AMPERSAND}', '&')
# self.assertEqual(f'\\N{AMPERSAND}', '\\Nspam')
# self.assertEqual(fr'\N{AMPERSAND}', '\\Nspam')
# self.assertEqual(f'\\\N{AMPERSAND}', '\\&')
AMPERSAND = 'spam'
# Get the right unicode character (&), or pick up local variable
# depending on the number of backslashes.
self.assertEqual(f'\N{AMPERSAND}', '&')
self.assertEqual(f'\\N{AMPERSAND}', '\\Nspam')
self.assertEqual(fr'\N{AMPERSAND}', '\\Nspam')
self.assertEqual(f'\\\N{AMPERSAND}', '\\&')
# # TODO(jart): pycomp.com needs \N thing
# def test_misformed_unicode_character_name(self):
# # These test are needed because unicode names are parsed
# # differently inside f-strings.
# self.assertAllRaise(SyntaxError, r"\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escape",
# [r"f'\N'",
# r"f'\N{'",
# r"f'\N{GREEK CAPITAL LETTER DELTA'",
# # Here are the non-f-string versions,
# # which should give the same errors.
# r"'\N'",
# r"'\N{'",
# r"'\N{GREEK CAPITAL LETTER DELTA'",
# ])
def test_misformed_unicode_character_name(self):
# These test are needed because unicode names are parsed
# differently inside f-strings.
self.assertAllRaise(SyntaxError, r"\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escape",
[r"f'\N'",
r"f'\N{'",
r"f'\N{GREEK CAPITAL LETTER DELTA'",
# Here are the non-f-string versions,
# which should give the same errors.
r"'\N'",
r"'\N{'",
r"'\N{GREEK CAPITAL LETTER DELTA'",
])
# # TODO(jart): pycomp.com needs \N thing
# def test_no_backslashes_in_expression_part(self):
# self.assertAllRaise(SyntaxError, 'f-string expression part cannot include a backslash',
# [r"f'{\'a\'}'",
# r"f'{\t3}'",
# r"f'{\}'",
# r"rf'{\'a\'}'",
# r"rf'{\t3}'",
# r"rf'{\}'",
# r"""rf'{"\N{LEFT CURLY BRACKET}"}'""",
# r"f'{\n}'",
# ])
def test_no_backslashes_in_expression_part(self):
self.assertAllRaise(SyntaxError, 'f-string expression part cannot include a backslash',
[r"f'{\'a\'}'",
r"f'{\t3}'",
r"f'{\}'",
r"rf'{\'a\'}'",
r"rf'{\t3}'",
r"rf'{\}'",
r"""rf'{"\N{LEFT CURLY BRACKET}"}'""",
r"f'{\n}'",
])
# # TODO(jart): pycomp.com needs \N thing
# def test_no_escapes_for_braces(self):
# """
# Only literal curly braces begin an expression.
# """
# # \x7b is '{'.
# self.assertEqual(f'\x7b1+1}}', '{1+1}')
# self.assertEqual(f'\x7b1+1', '{1+1')
# self.assertEqual(f'\u007b1+1', '{1+1')
# self.assertEqual(f'\N{LEFT CURLY BRACKET}1+1\N{RIGHT CURLY BRACKET}', '{1+1}')
def test_no_escapes_for_braces(self):
"""
Only literal curly braces begin an expression.
"""
# \x7b is '{'.
self.assertEqual(f'\x7b1+1}}', '{1+1}')
self.assertEqual(f'\x7b1+1', '{1+1')
self.assertEqual(f'\u007b1+1', '{1+1')
self.assertEqual(f'\N{LEFT CURLY BRACKET}1+1\N{RIGHT CURLY BRACKET}', '{1+1}')
def test_newlines_in_expressions(self):
self.assertEqual(f'{0}', '0')