Staging
v0.8.1
https://github.com/python/cpython

sort by:
Revision Author Date Message Commit Date
2e3f570 bpo-30416: Protect the optimizer during constant folding. (#4860) It no longer spends much time doing complex calculations and no longer consumes much memory for creating large constants that will be dropped later. This fixes also bpo-21074. 15 December 2017, 12:11:43 UTC
a5552f0 bpo-32240: Add the const qualifier to declarations of PyObject* array arguments. (#4746) 15 December 2017, 11:11:11 UTC
3325a67 bpo-27169: The __debug__ constant is now optimized out at compile time. (#4880) This fixes also bpo-22091. 15 December 2017, 10:35:48 UTC
297fd87 bpo-28393: Update encoding lookup docs wrt bpo-27938 (#4871) 15 December 2017, 10:19:23 UTC
e425bd7 move pygetopt.h to internal (closes bpo-32264) (#4830) 15 December 2017, 07:48:12 UTC
f74ef45 bpo-32311: Implement asyncio.create_task() shortcut (#4848) * Implement functionality * Add documentation 15 December 2017, 05:04:38 UTC
19a44f6 bpo-32327: Convert asyncio functions documented as coroutines to coroutines. (#4872) 15 December 2017, 01:53:26 UTC
41264f1 bpo-32030: Add _PyMainInterpreterConfig.executable (#4876) * Add new fields to _PyMainInterpreterConfig: * executable * prefix * base_prefix * exec_prefix * base_exec_prefix * _PySys_EndInit() now sets sys attributes from _PyMainInterpreterConfig 15 December 2017, 01:05:29 UTC
da27341 bpo-32030: Add _PyCoreConfig_Copy() (#4874) Each interpreter now has its core_config and main_config copy: * Add _PyCoreConfig_Copy() and _PyMainInterpreterConfig_Copy() * Move _PyCoreConfig_Read(), _PyCoreConfig_Clear() and _PyMainInterpreterConfig_Clear() from Python/pylifecycle.c to Modules/main.c * Fix _Py_InitializeEx_Private(): call _PyCoreConfig_ReadEnv() before _Py_InitializeCore() 15 December 2017, 00:46:02 UTC
358e5e1 bpo-32329: Fix -R option for hash randomization (#4873) bpo-32329, bpo-32030: * The -R option now turns on hash randomization when the PYTHONHASHSEED environment variable is set to 0 Previously, the option was ignored. * sys.flags.hash_randomization is now properly set to 0 when hash randomization is turned off by PYTHONHASHSEED=0. * _PyCoreConfig_ReadEnv() now reads the PYTHONHASHSEED environment variable. _Py_HashRandomization_Init() now only apply the configuration, it doesn't read PYTHONHASHSEED anymore. 14 December 2017, 23:51:22 UTC
96a5e50 bpo-32143: add f_fsid to os.statvfs() (#4571) Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com> 14 December 2017, 22:46:46 UTC
2b5fd1e bpo-32226: Implementation of PEP 560 (core components) (#4732) This part of the PEP implementation adds support for __mro_entries__ and __class_getitem__ by updating __build_class__ and PyObject_GetItem. 14 December 2017, 22:32:56 UTC
15a8728 bpo-29469: Optimize literal lists and sets iterating on the AST level. (#4866) 14 December 2017, 18:24:31 UTC
233ef24 bpo-32277: Fix exception raised from chmod(..., follow_symlinks=False) (#4797) 14 December 2017, 16:57:55 UTC
02a0a19 bpo-32314: Implement asyncio.run() (#4852) 14 December 2017, 14:42:21 UTC
eadad1b bpo-29469: Remove unnecessary peephole optimizer (GH-4863) Conversions like `not a is b -> a is not b` are implemented in AST optimizer in previous commit (7ea143a). So this commit removes them from peephole optimizer. 14 December 2017, 13:18:26 UTC
374c6e1 bpo-32030: Add _PyMainInterpreterConfig.warnoptions (#4855) Add warnoptions and xoptions fields to _PyMainInterpreterConfig. 14 December 2017, 11:05:26 UTC
53f7a7c bpo-32297: Few misspellings found in Python source code comments. (#4803) * Fix multiple typos in code comments * Add spacing in comments (test_logging.py, test_math.py) * Fix spaces at the beginning of comments in test_logging.py 14 December 2017, 11:04:53 UTC
5364b5c bpo-32225: Implementation of PEP 562 (#4731) Implement PEP 562: module __getattr__ and __dir__. The implementation simply updates module_getattro and module_dir. 14 December 2017, 10:59:44 UTC
9e7c136 bpo-32302: Fix distutils bdist_wininst for CRT v142 (#4851) CRT v142 is binary compatible with CRT v140. 14 December 2017, 10:39:34 UTC
7ea143a bpo-29469: Move constant folding to AST optimizer (GH-2858) 14 December 2017, 07:47:20 UTC
b5fd9ad bpo-32030: Rewrite _PyMainInterpreterConfig (#4854) _PyMainInterpreterConfig now contains Python objects, whereas _PyCoreConfig contains wchar_t* strings. Core config: * Rename _PyMainInterpreterConfig_ReadEnv() to _PyCoreConfig_ReadEnv() * Move 3 strings from _PyMainInterpreterConfig to _PyCoreConfig: module_search_path_env, home, program_name. * Add _PyCoreConfig_Clear() * _PyPathConfig_Calculate() now takes core config rather than main config * _PyMainInterpreterConfig_Read() now requires also a core config Main config: * Add _PyMainInterpreterConfig.module_search_path: sys.path list * Add _PyMainInterpreterConfig.argv: sys.argv list * _PyMainInterpreterConfig_Read() now computes module_search_path 14 December 2017, 01:20:52 UTC
176baa3 bpo-30241: implement contextlib.AbstractAsyncContextManager (#1412) 14 December 2017, 01:19:17 UTC
bfbf04e bpo-32296: Unbreak tests on Windows (#4850) 13 December 2017, 22:28:41 UTC
11a247d bpo-32030: Add _PyPathConfig_ComputeArgv0() (#4845) Changes: * Split _PySys_SetArgvWithError() into subfunctions for Py_Main(): * Create the Python list object * Set sys.argv to the list * Compute argv0 * Prepend argv0 to sys.path * Add _PyPathConfig_ComputeArgv0() * Remove _PySys_SetArgvWithError() * Py_Main() now splits the code to compute sys.argv/path0 and the code to update the sys module: add pymain_compute_argv() subfunction. 13 December 2017, 20:05:57 UTC
a70232f bpo-32296: Implement asyncio.get_event_loop and _get_running_loop in C. (#4827) asyncio.get_event_loop(), and, subsequently asyncio._get_running_loop() are one of the most frequently executed functions in asyncio. They also can't be sped up by third-party event loops like uvloop. When implemented in C they become 4x faster. 13 December 2017, 19:49:42 UTC
d5dda98 pymain_set_sys_argv() now copies argv (#4838) bpo-29240, bpo-32030: * Rename pymain_set_argv() to pymain_set_sys_argv() * pymain_set_sys_argv() now creates of copy of argv and modify the copy, rather than modifying pymain->argv * Call pymain_set_sys_argv() earlier: before pymain_run_python(), but after pymain_get_importer(). * Add _PySys_SetArgvWithError() to handle errors 13 December 2017, 16:31:16 UTC
9814697 pythoninfo: Add builtins, test.support, ... (#4840) Collect more info from builtins, resource, test.test_socket and test.support modules. Co-Authored-By: Christian Heimes <christian@python.org> 13 December 2017, 16:27:40 UTC
7a6706b Fix couple typos (#4839) 13 December 2017, 15:50:16 UTC
4f29f3c trivial: link updates in documentation (#2765) 13 December 2017, 12:37:51 UTC
91106cd bpo-29240: PEP 540: Add a new UTF-8 Mode (#855) * Add -X utf8 command line option, PYTHONUTF8 environment variable and a new sys.flags.utf8_mode flag. * If the LC_CTYPE locale is "C" at startup: enable automatically the UTF-8 mode. * Add _winapi.GetACP(). encodings._alias_mbcs() now calls _winapi.GetACP() to get the ANSI code page * locale.getpreferredencoding() now returns 'UTF-8' in the UTF-8 mode. As a side effect, open() now uses the UTF-8 encoding by default in this mode. * Py_DecodeLocale() and Py_EncodeLocale() now use the UTF-8 encoding in the UTF-8 Mode. * Update subprocess._args_from_interpreter_flags() to handle -X utf8 * Skip some tests relying on the current locale if the UTF-8 mode is enabled. * Add test_utf8mode.py. * _Py_DecodeUTF8_surrogateescape() gets a new optional parameter to return also the length (number of wide characters). * pymain_get_global_config() and pymain_set_global_config() now always copy flag values, rather than only copying if the new value is greater than the old value. 13 December 2017, 11:29:09 UTC
c3e070f bpo-32284: Fix documentation of BinaryIO and TextIO (#4832) 13 December 2017, 08:39:55 UTC
fc5db95 Test atexit shutdown mechanism in a subprocess (#4828) * Test atexit shutdown mechanism in a subprocess 13 December 2017, 01:29:07 UTC
317def9 bpo-17852: Revert incorrect fix based on misunderstanding of _Py_PyAtExit() semantics (#4826) 13 December 2017, 00:39:26 UTC
d233796 import.c: Fix a GCC warning (#4822) Fix the warning: Python/import.c: warning: comparison between signed and unsigned integer expressions if ((i + n + 1) <= PY_SSIZE_T_MAX / sizeof(struct _inittab)) { 12 December 2017, 22:29:28 UTC
721e25c bpo-32101: Fix tests for PYTHONDEVMODE=1 (#4821) test_asycio: remove also aio_path which was used when asyncio was developed outside the stdlib. 12 December 2017, 22:15:00 UTC
747f48e bpo-32230: Set sys.warnoptions with -X dev (#4820) Rather than supporting dev mode directly in the warnings module, this instead adjusts the initialisation code to add an extra 'default' entry to sys.warnoptions when dev mode is enabled. This ensures that dev mode behaves *exactly* as if `-Wdefault` had been passed on the command line, including in the way it interacts with `sys.warnoptions`, and with other command line flags like `-bb`. Fix also bpo-20361: have -b & -bb options take precedence over any other warnings options. Patch written by Nick Coghlan, with minor modifications of Victor Stinner. 12 December 2017, 21:59:48 UTC
b748e3b Fix improper use of re.escape() in tests. (#4814) 12 December 2017, 17:21:50 UTC
0e069a1 Fix implementation dependent assertion in test_plistlib. (#4813) It is failed with an advanced optimizer. 12 December 2017, 17:03:08 UTC
4ae06c5 bpo-32241: Add the const qualifire to declarations of umodifiable strings. (#4748) 12 December 2017, 11:55:04 UTC
5ce0a2a bpo-31942: Document optional support of start and stop attributes in Sequence.index method (#4277) 12 December 2017, 10:22:30 UTC
2001900 bpo-32255: Always quote a single empty field when write into a CSV file. (#4769) This allows to distinguish an empty row from a row consisting of a single empty field. 12 December 2017, 09:57:06 UTC
e0720cd Fix small typo in tupleobject.h (#4801) 12 December 2017, 07:59:30 UTC
e570211 Fix idlelib comment typos reported by Mike on pull request 4803. (#4807) 12 December 2017, 03:59:08 UTC
e569753 bpo-32227: functools.singledispatch supports registering via type annotations (#4733) 11 December 2017, 21:56:31 UTC
8874342 bpo-32258: Replace 'yield from' to 'await' in asyncio docs (#4779) * Replace 'yield from' to 'await' in asyncio docs * Fix docstrings 11 December 2017, 15:35:49 UTC
abae67e Add asyncio.get_running_loop() function. (#4782) 11 December 2017, 15:07:44 UTC
3e97518 bpo-32273: Move asyncio.test_utils to test.test_asyncio (#4785) 11 December 2017, 15:04:40 UTC
9edad3c bpo-32272: Remove asyncio.async() function. (#4784) 11 December 2017, 15:03:48 UTC
1b74f9b bpo-22671: Clarify and test default read method implementations (#4568) Original patch written by Martin Panter, enhanced by Sanyam Khurana. 11 December 2017, 13:42:09 UTC
48d4dd9 bpo-32252: Fix faulthandler_suppress_crash_report() (#4794) Fix faulthandler_suppress_crash_report() used to prevent core dump files when testing crashes. getrlimit() returns zero on success. 11 December 2017, 12:57:12 UTC
19d0d54 bpo-32262: Fix f-string (#4787) 11 December 2017, 00:52:53 UTC
6370f34 bpo-32262: Fix codestyle; use f-strings formatting where necessary. (#4775) 10 December 2017, 23:36:12 UTC
c4d9df5 Skip test_read_pty_output test on macOS for poll and select. (#4774) Starting with 10.13.2 the test hangs forever. 10 December 2017, 17:40:19 UTC
77106b2 bpo-32114: Updated the documentation for get_event_loop to reflect the policy change (#4510) 10 December 2017, 17:34:59 UTC
f658641 Removed doubled 'bpo-'. (#4777) 10 December 2017, 09:02:53 UTC
780acc8 bpo-31506: Improve the error message logic for class instantiation (GH-4740) The error messages in `object.__new__` and `object.__init__` now aim to point the user more directly at the name of the class being instantiated in cases where they *haven't* been overridden (on the assumption that the actual problem is a missing `__new__` or `__init__` definition in the class body). When they *have* been overridden, the errors still report themselves as coming from object, on the assumption that the problem is with the call up to the base class in the method implementation, rather than with the way the constructor is being called. 10 December 2017, 00:14:22 UTC
60ed130 byte swap the raw hash secrets (more bpo-32260) (#4773) 09 December 2017, 21:11:39 UTC
8362077 fix my byte-swapping implementation (#4772) 09 December 2017, 20:18:56 UTC
4e3e156 bpo-32260: don't byte swap siphash keys (#4771) Reference siphash takes the keys as a bytes, so it makes sense to byte swap when reifying the keys as 64-bit integers. However, Python's siphash takes host integers in to start with. 09 December 2017, 19:24:18 UTC
42aa93b closes bpo-31650: PEP 552 (Deterministic pycs) implementation (#4575) Python now supports checking bytecode cache up-to-dateness with a hash of the source contents rather than volatile source metadata. See the PEP for details. While a fairly straightforward idea, quite a lot of code had to be modified due to the pervasiveness of pyc implementation details in the codebase. Changes in this commit include: - The core changes to importlib to understand how to read, validate, and regenerate hash-based pycs. - Support for generating hash-based pycs in py_compile and compileall. - Modifications to our siphash implementation to support passing a custom key. We then expose it to importlib through _imp. - Updates to all places in the interpreter, standard library, and tests that manually generate or parse pyc files to grok the new format. - Support in the interpreter command line code for long options like --check-hash-based-pycs. - Tests and documentation for all of the above. 09 December 2017, 18:26:52 UTC
28d8d14 bpo-32253: Deprecate with statement and bare await for asyncio locks (GH-4764) * Add test for 'with (yield from lock)' * Deprecate with statement for asyncio locks * Document the deprecation 09 December 2017, 18:00:05 UTC
a9f8df6 bpo-32212: Updated logging documentation to make parameter names more consistent with source. (GH-4765) 09 December 2017, 11:09:04 UTC
5f841b5 bpo-32193: Convert asyncio to async/await usage (#4753) * Convert asyncio/tasks.py to async/await * Convert asyncio/queues.py to async/await * Convert asyncio/test_utils.py to async/await * Convert asyncio/base_subprocess.py to async/await * Convert asyncio/subprocess.py to async/await * Convert asyncio/streams.py to async/await * Fix comments * Convert asyncio/locks.py to async/await * Convert asyncio.sleep to async def * Add a comment * Add missing news * Convert stubs from AbstrctEventLoop to async functions * Convert subprocess_shell/subprocess_exec * Convert connect_read_pipe/connect_write_pip to async/await syntax * Convert create_datagram_endpoint * Convert create_unix_server/create_unix_connection * Get rid of old style coroutines in unix_events.py * Convert selector_events.py to async/await * Convert wait_closed and create_connection * Drop redundant line * Convert base_events.py * Code cleanup * Drop redundant comments * Fix indentation * Add explicit tests for compatibility between old and new coroutines * Convert windows event loop to use async/await * Fix double awaiting of async function * Convert asyncio/locks.py * Improve docstring * Convert tests to async/await * Convert more tests * Convert more tests * Convert more tests * Convert tests * Improve test 08 December 2017, 22:23:48 UTC
ede1573 bpo-22589 Changed MIME type of .bmp to "image/bmp" (#4756) Per rfc7903 this is the standard MIME type for this file format, and appears as such in the IANA MIME registry. 08 December 2017, 12:48:44 UTC
11cc289 Fix missing DECREF of mod. (#4749) 08 December 2017, 00:24:59 UTC
dd431b3 PyLong_FromString(): fix Coverity CID 1424951 (#4738) Explicitly cast digits (Py_ssize_t) to double to fix the following false-alarm warning from Coverity: "fsize_z = digits * log_base_BASE[base] + 1;" CID 1424951: Incorrect expression (UNINTENDED_INTEGER_DIVISION) Dividing integer expressions "9223372036854775783UL" and "4UL", and then converting the integer quotient to type "double". Any remainder, or fractional part of the quotient, is ignored. 07 December 2017, 23:06:55 UTC
a0374dd bpo-32208: update threading.Semaphore docs and add unit test (#4709) * fix issue32208: update threading.Semaphore docs and add unit test to validate correct behavior * add test for blocking * Update threading.rst * semaphore: remove documentation validation tests and move 'return value' test to BaseSemaphore 07 December 2017, 18:04:26 UTC
961dbe0 bpo-32199: The getnode() ip getter now uses 'ip link' instead of 'ip link list' (GH-4696) 07 December 2017, 11:59:13 UTC
fb77e0d Fix hardcoded value in test_os.py (#4744) 07 December 2017, 06:55:44 UTC
9ab11b3 Allows non-critical upload steps to fail (#4742) 06 December 2017, 19:33:15 UTC
24e77f9 Use raw strings for regex to avoid invalid escape sequences. (GH-4741) 06 December 2017, 19:00:34 UTC
9d25bd1 Modify configure to link with the compiler driver under HP-UX when not using gcc. (#2519) 06 December 2017, 17:58:17 UTC
bd4ed77 bpo-32233: Fix build with --with-system-libmpdec. (#4739) 06 December 2017, 17:24:17 UTC
92a3c6f bpo-32030: Add _PyImport_Fini2() (#4737) PyImport_ExtendInittab() now uses PyMem_RawRealloc() rather than PyMem_Realloc(). PyImport_ExtendInittab() can be called before Py_Initialize() whereas only the PyMem_Raw allocator is supposed to be used before Py_Initialize(). Add _PyImport_Fini2() to release the memory allocated by PyImport_ExtendInittab() at exit. PyImport_ExtendInittab() now forces the usage of the default raw allocator, to be able to release memory in _PyImport_Fini2(). Don't export these functions anymore to be C API, only to Py_BUILD_CORE: * _PyExc_Fini() * _PyImport_Fini() * _PyGC_DumpShutdownStats() * _PyGC_Fini() * _PyType_Fini() * _Py_HashRandomization_Fini() 06 December 2017, 17:12:59 UTC
1b4587a bpo-25910: Fixes redirection from http to https (#4674) 06 December 2017, 16:39:33 UTC
6bf992a bpo-32030: Add pymain_get_global_config() (#4735) * Py_Main() now starts by reading Py_xxx configuration variables to only work on its own private structure, and then later writes back the configuration into these variables. * Replace Py_GETENV() with pymain_get_env_var() which ignores empty variables. * Add _PyCoreConfig.dump_refs * Add _PyCoreConfig.malloc_stats * _PyObject_DebugMallocStats() is now responsible to check if debug hooks are installed. The function returns 1 if stats were written, or 0 if the hooks are disabled. Mark _PyMem_PymallocEnabled() as static. 06 December 2017, 16:26:10 UTC
672b6ba bpo-32030: pass interp to _PyImport_Init() (#4736) Remove also the initstr variable, unused since the commit e69f0df45b709c25ac80617c41bbae16f56870fb pushed in 2012: "bpo-13959: Re-implement imp.find_module() in Lib/imp.py" 06 December 2017, 16:25:50 UTC
a2a25eb Bump to 3.7.0a3+ 06 December 2017, 02:06:12 UTC
d86f29e Merge tag 'v3.7.0a3' 06 December 2017, 01:57:44 UTC
5e8cbcc Add Guido and Ivan as owners for typing.py (#4729) 05 December 2017, 21:56:39 UTC
2582f6f Add dataclasses to CODEOWNERS. (GH-4730) 05 December 2017, 20:52:19 UTC
33c377e bpo-32030: Simplify _PyCoreConfig_INIT macro (#4728) * Simplify _PyCoreConfig_INIT, _PyMainInterpreterConfig_INIT, _PyPathConfig_INIT macros: no need to set fields to 0/NULL, it's redundant (the C language sets them to 0/NULL for us). * Fix typo: pymain_run_statup() => pymain_run_startup() * Remove a few XXX/TODO 05 December 2017, 14:12:41 UTC
90a6785 Bump to 3.7.0a3 05 December 2017, 08:27:19 UTC
3f9a728 Update NEWS and pydoc topics. 05 December 2017, 08:17:33 UTC
d4d2b56 Tidy NEWS entry. 05 December 2017, 07:45:57 UTC
ae342cf Add a missing space in tkinter documentation. (GH-4692) 05 December 2017, 05:05:33 UTC
b3edde8 bpo-31380: Skip test_httpservers test_undecodable_file on macOS. (#4720) The undecodable file name cannot be created on macOS APFS file systems. 05 December 2017, 04:42:02 UTC
e6f8a73 Update macOS installer to XZ 5.2.3 (#4718) 05 December 2017, 03:55:20 UTC
24e0469 bpo-31392: Update macOS installer to use OpenSSL 1.0.2m (#4715) 05 December 2017, 03:24:41 UTC
8837dd0 bpo-19610: Warn if distutils is provided something other than a list to some fields (#4685) * Rather than raise TypeError, warn and call list() on the value. * Fix tests, revise NEWS and whatsnew text. * Revise documentation, a string is okay as well. * Ensure 'requires' and 'obsoletes' are real lists. * Test that requires and obsoletes are turned to lists. 05 December 2017, 02:58:12 UTC
9625bf5 Enable SQLite JSON functions for macOS installer build (#4712) 05 December 2017, 02:50:29 UTC
29bc193 [bpo-28556] Minor fixes for typing module (#4710) 05 December 2017, 02:43:58 UTC
ca7562a bpo-28791: Update macOS installer to use SQLite 3.21.0. (#4245) 05 December 2017, 02:04:49 UTC
2c0c68d bpo-30928: update idlelib/NEWS.txt. (#4706) 04 December 2017, 22:04:15 UTC
f0db54a bpo-32214: Implement PEP 557: Data Classes (#4704) 04 December 2017, 21:58:55 UTC
1e2fcac bpo-32207: Improve tk event exception tracebacks in IDLE. (#4703) When tk event handling is driven by IDLE's run loop, a confusing and distracting queue.EMPTY traceback context is no longer added to tk event exception tracebacks. The traceback is now the same as when event handling is driven by user code. Patch based on a suggestion by Serhiy Storchaka. 04 December 2017, 21:16:18 UTC
21255fc bpo-30928: Update idlelib/NEWS.txt to 2017 Dec 3. (#4701) Patches are in 3.7.0a3 even if this update is not. 04 December 2017, 19:48:25 UTC
31a8393 Revert "bpo-32197: Try to fix a compiler error on OS X introduced in bpo-32030. (#4681)" (#4694) * Revert "bpo-32197: Try to fix a compiler error on OS X introduced in bpo-32030. (#4681)" This reverts commit 13badcbc60cdbfae1dba1683fd2fae9d70717143. Re-apply commits: * "bpo-32030: _PyPathConfig_Init() sets home and program_name (#4673)" commit af5a895073c24637c094772b27526b94a12ec897. * "bpo-32030: Fix config_get_program_name() on macOS (#4669)" commit e23c06e2b03452c9aaf0dae52296c85e572f9bcd. * "bpo-32030: Add Python/pathconfig.c (#4668)" commit 0ea395ae964c9cd0f499e2ef0d0030c971201220. * "bpo-32030: Don't call _PyPathConfig_Fini() in Py_FinalizeEx() (#4667)" commit ebac19dad6263141d5db0a2c923efe049dba99d2. * "bpo-32030: Fix Py_GetPath(): init program_name (#4665)" commit 9ac3d8882712c9675c3d2f9f84af6b5729575cde. * Fix compilation error on macOS 04 December 2017, 12:39:15 UTC
70d56fb bpo-25054, bpo-1647489: Added support of splitting on zerowidth patterns. (#4471) Also fixed searching patterns that could match an empty string. 04 December 2017, 12:29:05 UTC
back to top