Sfoglia il codice sorgente

minify `windows.h` and disable implicit struct conversion

blueloveTH 2 anni fa
parent
commit
d911c41b9c
3 ha cambiato i file con 74 aggiunte e 21 eliminazioni
  1. 0 12
      include/pocketpy/cffi.h
  2. 74 4
      include/pocketpy/export.h
  3. 0 5
      include/pocketpy/obj.h

+ 0 - 12
include/pocketpy/cffi.h

@@ -153,18 +153,6 @@ T to_void_p(VM* vm, PyObject* var){
     VoidP& p = CAST(VoidP&, var);
     VoidP& p = CAST(VoidP&, var);
     return reinterpret_cast<T>(p.ptr);
     return reinterpret_cast<T>(p.ptr);
 }
 }
-
-template<typename T>
-T to_c99_struct(VM* vm, PyObject* var){
-    static_assert(is_pod<T>::value);
-    C99Struct& pod = CAST(C99Struct&, var);
-    return *reinterpret_cast<T*>(pod.p);
-}
-
-template<typename T>
-std::enable_if_t<is_pod<T>::value && !std::is_pointer_v<T>, PyObject*> py_var(VM* vm, const T& data){
-    return VAR_T(C99Struct, std::monostate(), data);
-}
 /*****************************************************************/
 /*****************************************************************/
 void add_module_c(VM* vm);
 void add_module_c(VM* vm);
 
 

+ 74 - 4
include/pocketpy/export.h

@@ -6,11 +6,81 @@
     #define WIN32_LEAN_AND_MEAN
     #define WIN32_LEAN_AND_MEAN
     #endif
     #endif
 
 
-    #ifndef NOMINMAX
-    #define NOMINMAX
-    #endif
+/* 
+  @raysan5: To avoid conflicting windows.h symbols with raylib, some flags are defined
+  WARNING: Those flags avoid inclusion of some Win32 headers that could be required 
+  by user at some point and won't be included...
+*/
+
+/* If defined, the following flags inhibit definition of the indicated items.*/
+#define NOGDICAPMASKS     // CC_*, LC_*, PC_*, CP_*, TC_*, RC_
+#define NOVIRTUALKEYCODES // VK_*
+#define NOWINMESSAGES     // WM_*, EM_*, LB_*, CB_*
+#define NOWINSTYLES       // WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_*
+#define NOSYSMETRICS      // SM_*
+#define NOMENUS           // MF_*
+#define NOICONS           // IDI_*
+#define NOKEYSTATES       // MK_*
+#define NOSYSCOMMANDS     // SC_*
+#define NORASTEROPS       // Binary and Tertiary raster ops
+#define NOSHOWWINDOW      // SW_*
+#define OEMRESOURCE       // OEM Resource values
+#define NOATOM            // Atom Manager routines
+#define NOCLIPBOARD       // Clipboard routines
+#define NOCOLOR           // Screen colors
+#define NOCTLMGR          // Control and Dialog routines
+#define NODRAWTEXT        // DrawText() and DT_*
+#define NOGDI             // All GDI defines and routines
+#define NOKERNEL          // All KERNEL defines and routines
+#define NOUSER            // All USER defines and routines
+/*#define NONLS             // All NLS defines and routines*/
+#define NOMB              // MB_* and MessageBox()
+#define NOMEMMGR          // GMEM_*, LMEM_*, GHND, LHND, associated routines
+#define NOMETAFILE        // typedef METAFILEPICT
+#define NOMINMAX          // Macros min(a,b) and max(a,b)
+#define NOMSG             // typedef MSG and associated routines
+#define NOOPENFILE        // OpenFile(), OemToAnsi, AnsiToOem, and OF_*
+#define NOSCROLL          // SB_* and scrolling routines
+#define NOSERVICE         // All Service Controller routines, SERVICE_ equates, etc.
+#define NOSOUND           // Sound driver routines
+#define NOTEXTMETRIC      // typedef TEXTMETRIC and associated routines
+#define NOWH              // SetWindowsHook and WH_*
+#define NOWINOFFSETS      // GWL_*, GCL_*, associated routines
+#define NOCOMM            // COMM driver routines
+#define NOKANJI           // Kanji support stuff.
+#define NOHELP            // Help engine interface.
+#define NOPROFILER        // Profiler interface.
+#define NODEFERWINDOWPOS  // DeferWindowPos routines
+#define NOMCX             // Modem Configuration Extensions
+
+/* Type required before windows.h inclusion  */
+typedef struct tagMSG *LPMSG;
+
+#include <windows.h>
+
+/* Type required by some unused function...  */
+typedef struct tagBITMAPINFOHEADER {
+  DWORD biSize;
+  LONG  biWidth;
+  LONG  biHeight;
+  WORD  biPlanes;
+  WORD  biBitCount;
+  DWORD biCompression;
+  DWORD biSizeImage;
+  LONG  biXPelsPerMeter;
+  LONG  biYPelsPerMeter;
+  DWORD biClrUsed;
+  DWORD biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+
+#include <objbase.h>
+#include <mmreg.h>
+#include <mmsystem.h>
 
 
-    #include <Windows.h>
+/* @raysan5: Some required types defined for MSVC/TinyC compiler */
+#if defined(_MSC_VER) || defined(__TINYC__)
+    #include <propidl.h>
+#endif
 
 
     #define PK_EXPORT __declspec(dllexport)
     #define PK_EXPORT __declspec(dllexport)
     #define PK_SUPPORT_DYLIB    1
     #define PK_SUPPORT_DYLIB    1

+ 0 - 5
include/pocketpy/obj.h

@@ -212,7 +212,6 @@ template <typename, typename=void> struct is_py_class : std::false_type {};
 template <typename T> struct is_py_class<T, std::void_t<decltype(T::_type)>> : std::true_type {};
 template <typename T> struct is_py_class<T, std::void_t<decltype(T::_type)>> : std::true_type {};
 
 
 template<typename T> T to_void_p(VM*, PyObject*);
 template<typename T> T to_void_p(VM*, PyObject*);
-template<typename T> T to_c99_struct(VM*, PyObject*);
 
 
 template<typename __T>
 template<typename __T>
 __T py_cast(VM* vm, PyObject* obj) {
 __T py_cast(VM* vm, PyObject* obj) {
@@ -224,8 +223,6 @@ __T py_cast(VM* vm, PyObject* obj) {
     }else if constexpr(is_py_class<T>::value){
     }else if constexpr(is_py_class<T>::value){
         T::_check_type(vm, obj);
         T::_check_type(vm, obj);
         return PK_OBJ_GET(T, obj);
         return PK_OBJ_GET(T, obj);
-    }else if constexpr(is_pod<T>::value){
-        return to_c99_struct<T>(vm, obj);
     }else {
     }else {
         return Discarded();
         return Discarded();
     }
     }
@@ -240,8 +237,6 @@ __T _py_cast(VM* vm, PyObject* obj) {
         return to_void_p<__T>(vm, obj);
         return to_void_p<__T>(vm, obj);
     }else if constexpr(is_py_class<T>::value){
     }else if constexpr(is_py_class<T>::value){
         return PK_OBJ_GET(T, obj);
         return PK_OBJ_GET(T, obj);
-    }else if constexpr(is_pod<T>::value){
-        return to_c99_struct<T>(vm, obj);
     }else {
     }else {
         return Discarded();
         return Discarded();
     }
     }