Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.2k
GH-130328: pasting in new REPL is slow on Windows#132884
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Changes fromall commits
0a38c2e
05d26ff
cad6bfb
3d1da66
4098e3d
bba26c9
3c0cae9
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -22,8 +22,6 @@ | ||||||
import io | ||||||
import os | ||||||
import sys | ||||||
import ctypes | ||||||
from ctypes.wintypes import ( | ||||||
@@ -44,14 +42,17 @@ | ||||||
from .windows_eventqueue import EventQueue | ||||||
try: | ||||||
from ctypes importget_last_error,GetLastError, WinDLL, windll, WinError # type: ignore[attr-defined] | ||||||
except: | ||||||
# Keep MyPy happy off Windows | ||||||
from ctypes import CDLL as WinDLL, cdll as windll | ||||||
def GetLastError() -> int: | ||||||
return 42 | ||||||
def get_last_error() -> int: | ||||||
return 42 | ||||||
class WinError(OSError): # type: ignore[no-redef] | ||||||
def __init__(self, err: int | None, descr: str | None = None) -> None: | ||||||
self.err = err | ||||||
@@ -108,6 +109,12 @@ def __init__(self, err: int | None, descr: str | None = None) -> None: | ||||||
ALT_ACTIVE = 0x01 | 0x02 | ||||||
CTRL_ACTIVE = 0x04 | 0x08 | ||||||
WAIT_TIMEOUT = 0x102 | ||||||
WAIT_FAILED = 0xFFFFFFFF | ||||||
# from winbase.h | ||||||
INFINITE = 0xFFFFFFFF | ||||||
class _error(Exception): | ||||||
pass | ||||||
@@ -409,12 +416,8 @@ def _getscrollbacksize(self) -> int: | ||||||
return info.srWindow.Bottom # type: ignore[no-any-return] | ||||||
def _read_input(self, block: bool = True) -> INPUT_RECORD | None: | ||||||
if not block and not self.wait(timeout=0): | ||||||
return None | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Now we are nicely in sync with unix_console.py cpython/Lib/_pyrepl/unix_console.py Lines 400 to 401 ine1c09ff
| ||||||
rec = INPUT_RECORD() | ||||||
read = DWORD() | ||||||
@@ -522,14 +525,16 @@ def getpending(self) -> Event: | ||||||
def wait(self, timeout: float | None) -> bool: | ||||||
"""Wait for an event.""" | ||||||
if timeout is None: | ||||||
ambv marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||||||
timeout = INFINITE | ||||||
else: | ||||||
timeout = int(timeout) | ||||||
ret = WaitForSingleObject(InHandle, timeout) | ||||||
if ret == WAIT_FAILED: | ||||||
raise WinError(get_last_error()) | ||||||
tomasr8 marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||||||
elif ret == WAIT_TIMEOUT: | ||||||
return False | ||||||
return True | ||||||
def repaint(self) -> None: | ||||||
raise NotImplementedError("No repaint support") | ||||||
@@ -649,14 +654,15 @@ class INPUT_RECORD(Structure): | ||||||
ReadConsoleInput.argtypes = [HANDLE, POINTER(INPUT_RECORD), DWORD, POINTER(DWORD)] | ||||||
ReadConsoleInput.restype = BOOL | ||||||
FlushConsoleInputBuffer = _KERNEL32.FlushConsoleInputBuffer | ||||||
FlushConsoleInputBuffer.argtypes = [HANDLE] | ||||||
FlushConsoleInputBuffer.restype = BOOL | ||||||
WaitForSingleObject = _KERNEL32.WaitForSingleObject | ||||||
WaitForSingleObject.argtypes = [HANDLE, DWORD] | ||||||
WaitForSingleObject.restype = DWORD | ||||||
OutHandle = GetStdHandle(STD_OUTPUT_HANDLE) | ||||||
InHandle = GetStdHandle(STD_INPUT_HANDLE) | ||||||
else: | ||||||
@@ -670,7 +676,7 @@ def _win_only(*args, **kwargs): | ||||||
GetConsoleMode = _win_only | ||||||
SetConsoleMode = _win_only | ||||||
ReadConsoleInput = _win_only | ||||||
FlushConsoleInputBuffer = _win_only | ||||||
WaitForSingleObject = _win_only | ||||||
OutHandle = 0 | ||||||
InHandle = 0 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Speedup pasting in ``PyREPL`` on Windows. Fix by Chris Eibl. |
Uh oh!
There was an error while loading.Please reload this page.