| // Copyright 2012 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_BASE_WIN32_HEADERS_H_ |
| #define V8_BASE_WIN32_HEADERS_H_ |
| |
| // This file contains defines and typedefs that allow popular Windows types to |
| // be used without the overhead of including windows.h. |
| // This file no longer includes windows.h but it still sets the defines that |
| // tell windows.h to omit some includes so that the V8 source files that do |
| // include windows.h will still get the minimal version. |
| |
| #ifndef WIN32_LEAN_AND_MEAN |
| // WIN32_LEAN_AND_MEAN implies NOCRYPT and NOGDI. |
| #define WIN32_LEAN_AND_MEAN |
| #endif |
| #ifndef NOMINMAX |
| #define NOMINMAX |
| #endif |
| #ifndef NOKERNEL |
| #define NOKERNEL |
| #endif |
| #ifndef NOUSER |
| #define NOUSER |
| #endif |
| #ifndef NOSERVICE |
| #define NOSERVICE |
| #endif |
| #ifndef NOSOUND |
| #define NOSOUND |
| #endif |
| #ifndef NOMCX |
| #define NOMCX |
| #endif |
| #ifndef _WIN32_WINNT |
| #error This should be set in build config files. See build\config\win\BUILD.gn |
| #endif |
| |
| #include <signal.h> // For raise(). |
| #include <time.h> // For LocalOffset() implementation. |
| #if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) |
| #include <errno.h> // For STRUNCATE |
| #endif // !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) |
| #include <limits.h> // For INT_MAX and al. |
| #include <process.h> // For _beginthreadex(). |
| #include <stdlib.h> |
| |
| // typedef and define the most commonly used Windows integer types. |
| |
| typedef int BOOL; // NOLINT(runtime/int) |
| typedef unsigned long DWORD; // NOLINT(runtime/int) |
| typedef long LONG; // NOLINT(runtime/int) |
| typedef void* LPVOID; |
| typedef void* PVOID; |
| typedef void* HANDLE; |
| |
| #define WINAPI __stdcall |
| |
| #if defined(_WIN64) |
| typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; |
| #else |
| typedef __w64 unsigned long ULONG_PTR, *PULONG_PTR; // NOLINT(runtime/int) |
| #endif |
| |
| typedef struct _RTL_SRWLOCK SRWLOCK; |
| typedef struct _RTL_CONDITION_VARIABLE CONDITION_VARIABLE; |
| typedef struct _RTL_CRITICAL_SECTION CRITICAL_SECTION; |
| typedef struct _RTL_CRITICAL_SECTION_DEBUG* PRTL_CRITICAL_SECTION_DEBUG; |
| |
| // Declare V8 versions of some Windows structures. These are needed for |
| // when we need a concrete type but don't want to pull in Windows.h. We can't |
| // declare the Windows types so we declare our types and cast to the Windows |
| // types in a few places. The sizes must match the Windows types so we verify |
| // that with static asserts in platform-win32.cc. |
| // ChromeToWindowsType functions are provided for pointer conversions. |
| |
| struct V8_SRWLOCK { |
| PVOID Ptr; |
| }; |
| |
| struct V8_CONDITION_VARIABLE { |
| PVOID Ptr; |
| }; |
| |
| struct V8_CRITICAL_SECTION { |
| PRTL_CRITICAL_SECTION_DEBUG DebugInfo; |
| LONG LockCount; |
| LONG RecursionCount; |
| HANDLE OwningThread; |
| HANDLE LockSemaphore; |
| ULONG_PTR SpinCount; |
| }; |
| |
| inline SRWLOCK* V8ToWindowsType(V8_SRWLOCK* p) { |
| return reinterpret_cast<SRWLOCK*>(p); |
| } |
| |
| inline const SRWLOCK* V8ToWindowsType(const V8_SRWLOCK* p) { |
| return reinterpret_cast<const SRWLOCK*>(p); |
| } |
| |
| inline CONDITION_VARIABLE* V8ToWindowsType(V8_CONDITION_VARIABLE* p) { |
| return reinterpret_cast<CONDITION_VARIABLE*>(p); |
| } |
| |
| inline const CONDITION_VARIABLE* V8ToWindowsType( |
| const V8_CONDITION_VARIABLE* p) { |
| return reinterpret_cast<const CONDITION_VARIABLE*>(p); |
| } |
| |
| inline CRITICAL_SECTION* V8ToWindowsType(V8_CRITICAL_SECTION* p) { |
| return reinterpret_cast<CRITICAL_SECTION*>(p); |
| } |
| |
| inline const CRITICAL_SECTION* V8ToWindowsType(const V8_CRITICAL_SECTION* p) { |
| return reinterpret_cast<const CRITICAL_SECTION*>(p); |
| } |
| |
| #endif // V8_BASE_WIN32_HEADERS_H_ |