按规范「注释只讲解作用,不掺杂历史原因,尽量英文」:把 includes 下 75 个 .vp 的中文 # 注释与三引号 docstring 改写为英文,每个注释块压到 2 行以内。 保留要点:作用、约束、危险警告(不得/必须/注意)、ABI 与类型约定(如 BYTEPTR | t.CPtr = i8** 的跨模块坍缩坑)、位宽/长度约定、fail-fast 要求、内存与句柄所有权。 未动:文件头注释(规范豁免,仍是中文)、运行时中文字符串常量(printf / fatal_error / MlirFail 等用户可见消息,属代码字面量)。 验证:独立脚本比对 HEAD 与工作区的代码骨架(剥离 # 注释与三引号 docstring 后的非空行)——75 个文件逐字节一致;行尾 CRLF/LF 未被改动;全文剩余中文仅 547 行头注释、0 条行尾注释。bootstrap 三重重编 SUCCESS;全量 77/77 顺序回归通过。
75 lines
4.4 KiB
Plaintext
75 lines
4.4 KiB
Plaintext
import t
|
|
from stdint import *
|
|
from w32.win32base import *
|
|
|
|
|
|
class CRITICAL_SECTION:
|
|
DebugInfo: VOIDPTR
|
|
LockCount: LONG
|
|
RecursionCount: LONG
|
|
OwningThread: HANDLE
|
|
LockSemaphore: HANDLE
|
|
SpinCount: QWORD
|
|
|
|
extern def InitializeCriticalSection(lpCriticalSection: CRITICAL_SECTION*)
|
|
extern def EnterCriticalSection(lpCriticalSection: CRITICAL_SECTION*)
|
|
extern def LeaveCriticalSection(lpCriticalSection: CRITICAL_SECTION*)
|
|
extern def DeleteCriticalSection(lpCriticalSection: CRITICAL_SECTION*)
|
|
extern def TryEnterCriticalSection(lpCriticalSection: CRITICAL_SECTION*) -> BOOL
|
|
extern def SetCriticalSectionSpinCount(lpCriticalSection: CRITICAL_SECTION*, dwSpinCount: ULONG) -> ULONG
|
|
extern def InitializeCriticalSectionAndSpinCount(lpCriticalSection: CRITICAL_SECTION*, dwSpinCount: ULONG) -> BOOL
|
|
extern def CreateMutexA(lpMutexAttributes: SECURITY_ATTRIBUTES*, bInitialOwner: BOOL, lpName: LPCSTR) -> HANDLE
|
|
extern def CreateMutexW(lpMutexAttributes: SECURITY_ATTRIBUTES*, bInitialOwner: BOOL, lpName: LPCWSTR) -> HANDLE
|
|
extern def OpenMutexA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE
|
|
extern def OpenMutexW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE
|
|
extern def ReleaseMutex(hMutex: HANDLE) -> BOOL
|
|
extern def CreateEventA(lpEventAttributes: SECURITY_ATTRIBUTES*, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCSTR) -> HANDLE
|
|
extern def CreateEventW(lpEventAttributes: SECURITY_ATTRIBUTES*, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCWSTR) -> HANDLE
|
|
extern def OpenEventA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE
|
|
extern def OpenEventW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE
|
|
extern def SetEvent(hEvent: HANDLE) -> BOOL
|
|
extern def ResetEvent(hEvent: HANDLE) -> BOOL
|
|
extern def PulseEvent(hEvent: HANDLE) -> BOOL
|
|
extern def CreateSemaphoreA(lpSemaphoreAttributes: SECURITY_ATTRIBUTES*, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCSTR) -> HANDLE
|
|
extern def CreateSemaphoreW(lpSemaphoreAttributes: SECURITY_ATTRIBUTES*, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCWSTR) -> HANDLE
|
|
extern def OpenSemaphoreA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE
|
|
extern def OpenSemaphoreW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE
|
|
extern def ReleaseSemaphore(hSemaphore: HANDLE, lReleaseCount: LONG, lpPreviousCount: LONG*) -> BOOL
|
|
extern def WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: ULONG) -> ULONG
|
|
extern def WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG
|
|
extern def WaitForMultipleObjects(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG) -> ULONG
|
|
extern def WaitForMultipleObjectsEx(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG
|
|
# SRWLOCK / CONDITION_VARIABLE are opaque single-PVOID structs (sizeof == 8) and the APIs take their storage address. Model them as structs.
|
|
# Declaring them as VOIDPTR would make c.Addr(self.lock) yield i8** (one level too many) and fail with a CastError.
|
|
class SRWLOCK:
|
|
Ptr: VOIDPTR
|
|
|
|
class CONDITION_VARIABLE:
|
|
Ptr: VOIDPTR
|
|
|
|
extern def InitializeSRWLock(SRWLock: SRWLOCK*) -> VOID
|
|
extern def AcquireSRWLockExclusive(SRWLock: SRWLOCK*) -> VOID
|
|
extern def AcquireSRWLockShared(SRWLock: SRWLOCK*) -> VOID
|
|
extern def ReleaseSRWLockExclusive(SRWLock: SRWLOCK*) -> VOID
|
|
extern def ReleaseSRWLockShared(SRWLock: SRWLOCK*) -> VOID
|
|
|
|
# Condition variables - Vista+
|
|
define CONDITION_VARIABLE_LOCKMODE_SHARED = 0x1
|
|
|
|
extern def InitializeConditionVariable(ConditionVariable: CONDITION_VARIABLE*) -> VOID
|
|
extern def SleepConditionVariableCS(ConditionVariable: CONDITION_VARIABLE*, CriticalSection: CRITICAL_SECTION*, dwMilliseconds: ULONG) -> BOOL
|
|
extern def SleepConditionVariableSRW(ConditionVariable: CONDITION_VARIABLE*, SRWLock: SRWLOCK*, dwMilliseconds: ULONG, Flags: ULONG) -> BOOL
|
|
extern def WakeConditionVariable(ConditionVariable: CONDITION_VARIABLE*) -> VOID
|
|
extern def WakeAllConditionVariable(ConditionVariable: CONDITION_VARIABLE*) -> VOID
|
|
|
|
# One-time initialization - Vista+
|
|
define INIT_ONCE_STATIC_INIT = 0x00000001
|
|
define INIT_ONCE_CHECK_ONLY = 0x00000002
|
|
define INIT_ONCE_ASYNC = 0x00000004
|
|
define INIT_ONCE_INIT_FAILED = 0x00000008
|
|
|
|
class INIT_ONCE:
|
|
Ptr: VOIDPTR
|
|
|
|
extern def InitOnceExecuteOnce(InitOnce: INIT_ONCE*, InitFn: VOIDPTR, Parameter: VOIDPTR, Context: VOIDPTR) -> BOOL
|