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

sort by:
Revision Author Date Message Commit Date
6b91a59 bpo-32385: Clean up the C3 MRO algorithm implementation. (#4942) Use tuples and raw arrays instead of lists. 20 December 2017, 17:21:02 UTC
ca719ac bpo-32030: Add _PyCoreConfig.warnoptions (#4936) Merge _PyCoreConfig_ReadEnv() into _PyCoreConfig_Read(), and _Py_CommandLineDetails usage is now restricted to pymain_cmdline(). Changes: * _PyCoreConfig: Add nxoption, xoptions, nwarnoption and warnoptions * Add _PyCoreConfig.program: argv[0] or "" * Move filename, command, module and xoptions from _Py_CommandLineDetails to _PyMain. xoptions _Py_OptList becomes (int, wchar_t**) list. * Add pymain_cmdline() function * Rename copy_argv() to copy_wstrlist(). Rename clear_argv() to clear_wstrlist(). Remove _Py_OptList structure: use (int, wchar_t**) list instead. * Rename pymain_set_flag_from_env() to pymain_get_env_flag() * Rename pymain_set_flags_from_env() to pymain_get_env_flags() * _PyMainInterpreterConfig_Read() now creates the warnoptions from _PyCoreConfig.warnoptions * Inline pymain_add_warning_dev_mode() and pymain_add_warning_bytes_flag() into config_init_warnoptions() * Inline pymain_get_program_name() into _PyCoreConfig_Read() * _Py_CommandLineDetails: Replace warning_options with nwarnoption and warnoptions. Replace env_warning_options with nenv_warnoption and env_warnoptions. * pymain_warnings_envvar() now has a single implementation for Windows and Unix: use config_get_env_var_dup() to also get the variable as wchar_t* on Unix. 20 December 2017, 17:00:19 UTC
1f1a34c bpo-32379: Faster MRO computation for single inheritance (#4932) * bpo-32379: Faster MRO computation for single inheritance 20 December 2017, 14:58:21 UTC
776407f bpo-31901: atexit callbacks should be run at subinterpreter shutdown (#4611) Change atexit behavior and PEP-489 multiphase init support. 20 December 2017, 10:17:58 UTC
1976086 bpo-32030: Cleanup pymain_main() (#4935) * Reorganize pymain_main() to make the code more flat * Clear configurations before pymain_update_sys_path() * Mark Py_FatalError() and _Py_FatalInitError() with _Py_NO_RETURN * Replace _PyMain.run_code variable with a new RUN_CODE() macro * Move _PyMain.cf into a local variable in pymain_run_python() 20 December 2017, 00:41:59 UTC
c4bca95 bpo-32030: Add _PyCoreConfig.argv (#4934) * Add argc and argv to _PyCoreConfig * _PyMainInterpreterConfig_Read() now builds its argv from _PyCoreConfig.arg * Move _PyMain.env_warning_options into _Py_CommandLineDetails * Reorder pymain_free() 19 December 2017, 22:48:17 UTC
f4e21a2 Improve the F-strings and format specifier documentation (GH-4931) Mention that the format-specifier mini language in f-strings is the same one used by str.format. 19 December 2017, 21:03:09 UTC
f7686c1 bpo-29970: Add timeout for SSL handshake in asyncio 10 seconds by default. 19 December 2017, 19:45:42 UTC
4b96593 bpo-32377: improve __del__ docs and fix mention about resurrection (#4927) * Fix #32377: improve __del__ docs and fix mention about resurrection * Mention that CPython only calls __del__ once. 19 December 2017, 18:48:45 UTC
e40ad79 Fix GCC warning in _asynciomodule.c (#4928) 19 December 2017, 18:48:13 UTC
c5ae169 bpo-26439 Fix ctypes.util.find_library failure on AIX (#4507) Implement find_library() support in ctypes/util for AIX. Add some AIX specific tests. 19 December 2017, 12:58:49 UTC
319c034 bpo-29711: Fix stop_serving in proactor loop kill all listening servers (#431) 19 December 2017, 12:23:17 UTC
36c2c04 bpo-32355: Optimize asyncio.gather() (#4913) 19 December 2017, 12:19:53 UTC
a9d7e55 bpo-32357: Optimize asyncio.iscoroutine() for non-native coroutines (#4915) 19 December 2017, 12:18:45 UTC
a7bd64c bpo-27456: Simplify sock type checks (#4922) Recent sock.type fix (see bug 32331) makes sock.type checks simpler in asyncio. 19 December 2017, 11:44:37 UTC
5d86246 bpo-32030: Fix compiler warnings (#4921) Fix compiler warnings in Py_FinalizeEx(): only define variables if they are needed, add #ifdef. Other cleanup changes: * _PyWarnings_InitWithConfig() is no more needed: call _PyWarnings_Init() instead. * Inline pymain_init_main_interpreter() in its caller. This subfunction is no more justifed. 19 December 2017, 10:35:58 UTC
21be85f Improve test coverage (#4924) 19 December 2017, 06:51:16 UTC
9818142 bpo-32331: Fix socket.type when SOCK_NONBLOCK is available (#4877) 19 December 2017, 01:02:54 UTC
6efcb6d bpo-32030: Fix compilation on FreeBSD, #include <fenv.h> (#4919) * main.c: add missing #include <fenv.h> on FreeBSD * indent also other #ifdef in main.c * cleanup Programs/python.c 18 December 2017, 22:42:55 UTC
d757aaf bpo-32356: idempotent pause_/resume_reading; new is_reading method. (#4914) 18 December 2017, 22:03:23 UTC
2d8f063 bpo-32369: test_subprocess: Fix pass_fds check in test_close_fds() (#4920) The last part of test_close_fds() doesn't match its own comment. The following assertion always holds because fds_to_keep and open_fds are disjoint by construction. self.assertFalse(remaining_fds & fds_to_keep & open_fds, "Some fds not in pass_fds were left open") Fix the code to match the message in the assertion. 18 December 2017, 20:26:49 UTC
02e4b7f Add @asvetlov to asyncio codeowners (#4917) 18 December 2017, 16:20:42 UTC
bd6ec4d bpo-32365: Fix a reference leak when compile __debug__. (#4916) It was introduced in bpo-27169. 18 December 2017, 12:29:12 UTC
b2a6083 bpo-19764: Implemented support for subprocess.Popen(close_fds=True) on Windows (#1218) Even though Python marks any handles it opens as non-inheritable there is still a race when using `subprocess.Popen` since creating a process with redirected stdio requires temporarily creating inheritable handles. By implementing support for `subprocess.Popen(close_fds=True)` we fix this race. In order to implement this we use PROC_THREAD_ATTRIBUTE_HANDLE_LIST which is available since Windows Vista. Which allows to pass an explicit list of handles to inherit when creating a process. This commit also adds `STARTUPINFO.lpAttributeList["handle_list"]` which can be used to control PROC_THREAD_ATTRIBUTE_HANDLE_LIST directly. 18 December 2017, 09:28:19 UTC
87010e8 bpo-29469: peephole: Remove const_stack (GH-4879) Constant folding was moved to AST optimizer. But compiler may emit LOAD_CONSTs + BUILD_TUPLE. For example, default arguments can be constant tuple if all arguments are constant. This commit makes peephole's tuple folding simple. It doesn't support nested tuples because nested tuples are folded by AST optimizer already. 18 December 2017, 06:52:54 UTC
902ab80 bpo-30050: Allow disabling full buffer warnings in signal.set_wakeup_fd (#4792) 18 December 2017, 04:10:18 UTC
1b7c11f bpo-32348: Optimize asyncio.Future schedule/add/remove callback. (#4907) 18 December 2017, 01:19:47 UTC
4c72bc4 add 'extern' to pygetopt.h symbols, so then don't end up in comdat (#4909) bpo-32264 17 December 2017, 18:34:00 UTC
5382c05 bpo-32351: Use fastpath in asyncio.sleep if delay<0 (#4908) * Use fastpath in asyncio.sleep if delay<0 * Add NEWS entry 17 December 2017, 14:41:30 UTC
44d1a59 bpo-32250: Implement asyncio.current_task() and asyncio.all_tasks() (#4799) 16 December 2017, 19:58:38 UTC
9508402 Fix PyObject_Hash signature in comment (#4905) 16 December 2017, 19:08:05 UTC
45700fb Add tests for using PEP560 with classes implemented in C. (#4883) Based on tests from #4878 16 December 2017, 09:25:56 UTC
9c19b02 bpo-32002: Refactor C locale coercion tests (GH-4369) Exactly which locale requests will end up giving you the "C" locale is actually platform dependent. A blank locale and "POSIX" will translate to "C" on most Linux distros, but may not do so on other platforms, so this adjusts the way the tests are structured to better account for that. This is an initial step towards fixing the current test failure on Cygwin (hence the issue reference) 16 December 2017, 08:51:19 UTC
0c644fc fix up signedness in PyImport_ExtendInittab (#4831) As a result of 92a3c6f493ad411e4cf0acdf305ef4876aa90669, the compiler complains: Python/import.c:2311:21: warning: comparison of integers of different signs: 'long' and 'unsigned long' [-Wsign-compare] if ((i + n + 1) <= PY_SSIZE_T_MAX / sizeof(struct _inittab)) { ~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This overflow is extremely unlikely to happen, but let's avoid undefined behavior anyway. 16 December 2017, 07:42:33 UTC
9454060 bpo-29240, bpo-32030: Py_Main() re-reads config if encoding changes (#4899) bpo-29240, bpo-32030: If the encoding change (C locale coerced or UTF-8 Mode changed), Py_Main() now reads again the configuration with the new encoding. Changes: * Add _Py_UnixMain() called by main(). * Rename pymain_free_pymain() to pymain_clear_pymain(), it can now be called multipled times. * Rename pymain_parse_cmdline_envvars() to pymain_read_conf(). * Py_Main() now clears orig_argc and orig_argv at exit. * Remove argv_copy2, Py_Main() doesn't modify argv anymore. There is no need anymore to get two copies of the wchar_t** argv. * _PyCoreConfig: add coerce_c_locale and coerce_c_locale_warn. * Py_UTF8Mode is now initialized to -1. * Locale coercion (PEP 538) now respects -I and -E options. 16 December 2017, 03:54:22 UTC
e796b2f bpo-27456: Ensure TCP_NODELAY is set on linux (#4231) 16 December 2017, 00:32:25 UTC
4ac5150 bpo-32248: Implement importlib.abc.ResourceReader (GH-4892) 16 December 2017, 00:29:35 UTC
d2b0231 bpo-29240: Don't define decode_locale() on macOS (#4895) Don't define decode_locale() nor encode_locale() on macOS or Android. 15 December 2017, 22:06:17 UTC
6693d7a Minor wording tweak for itertools documentation (#4893) 15 December 2017, 21:17:55 UTC
d924fa5 F-strings docs: link to Format Specifiers (GH-4888) Link to the Format Specification Mini Language section from f-strings' documentation. 15 December 2017, 18:07:01 UTC
9402c83 bpo-32294: Fix multiprocessing test_semaphore_tracker() (#4885) Run the child process with -E option to ignore the PYTHONWARNINGS environment variable. 15 December 2017, 15:29:24 UTC
642d67b bpo-32329: Add versionchanged to -R option doc (#4884) 15 December 2017, 15:29:01 UTC
3327a2d bpo-32265: Classify class and static methods of builtin types. (#4776) Add types.ClassMethodDescriptorType for unbound class methods. 15 December 2017, 12:13:41 UTC
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
back to top