[arch-commits] Commit in codeblocks/repos/community-staging-x86_64 (7 files)

Antonio Rojas arojas at gemini.archlinux.org
Mon Jul 11 16:40:38 UTC 2022


    Date: Monday, July 11, 2022 @ 16:40:37
  Author: arojas
Revision: 1249594

archrelease: copy trunk to community-staging-x86_64

Added:
  codeblocks/repos/community-staging-x86_64/PKGBUILD
    (from rev 1249593, codeblocks/trunk/PKGBUILD)
  codeblocks/repos/community-staging-x86_64/codeblocks-gcc11.patch
    (from rev 1249593, codeblocks/trunk/codeblocks-gcc11.patch)
  codeblocks/repos/community-staging-x86_64/sc_wxtypes-normalize.patch
    (from rev 1249593, codeblocks/trunk/sc_wxtypes-normalize.patch)
Deleted:
  codeblocks/repos/community-staging-x86_64/PKGBUILD
  codeblocks/repos/community-staging-x86_64/codeblocks-gcc11.patch
  codeblocks/repos/community-staging-x86_64/sc_wxtypes-normalize.patch
  codeblocks/repos/community-staging-x86_64/wxwidgets-3.2.patch

----------------------------+
 PKGBUILD                   |  162 ++--
 codeblocks-gcc11.patch     |   26 
 sc_wxtypes-normalize.patch |   26 
 wxwidgets-3.2.patch        | 1590 -------------------------------------------
 4 files changed, 107 insertions(+), 1697 deletions(-)

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2022-07-11 16:40:15 UTC (rev 1249593)
+++ PKGBUILD	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -1,81 +0,0 @@
-# Maintainer: Balló György <ballogyor+arch at gmail dot com>
-# Contributor: Alexander F Rødseth <xyproto at archlinux.org>
-# Contributor: Bartłomiej Piotrowski <nospam at bpiotrowski.pl>
-# Contributor: Robert Hollencamp <rhollencamp at gmail.com>
-# Contributor: Daniel J Griffiths <griffithsdj at inbox.com>
-# Contributor: Stefan Husmann <stefan-husmann at t-online.de>
-# Contributor: Roman Mikhayloff <rimf at inbox.ru>
-
-pkgname=codeblocks
-pkgver=20.03
-pkgrel=3
-pkgdesc='Cross-platform C/C++ IDE'
-arch=('x86_64')
-url='http://codeblocks.org/'
-license=('GPL3')
-depends=('boost-libs' 'wxwidgets-gtk3' 'hunspell')
-makedepends=('boost' 'imagemagick' 'zip')
-source=("https://downloads.sourceforge.net/codeblocks/$pkgname-$pkgver.tar.xz"
-         codeblocks-gcc11.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/40eb88e3f2b933f19f9933e06c8d0899c54f5e25.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/56ac0396fad7a5b4bbb40bb8c4b5fe1755078aef.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/a4aacc92640b587ad049cd6aa68c637e536e9ab5.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/f2f127cf5cd97c7da6a957a3f7764cb25cc9017e.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/04b7c50fb8c6a29b2d84579ee448d2498414d855.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/2345b020b862ec855038dd32a51ebb072647f28d.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/dbdf5c5ea9e3161233f0588a7616b7e4fedc7870.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/8035dfdff321754819f79e3165401aa59bd8c7f7.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/9a9c6a9d5e3e0f6eff5594ecd61a2222f073be9c.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/c28746f4887f10e6f9f10eeafae0fb22ecdbf9c7.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/b2e4f1279804e1d11b71bc75eeb37072c3589296.patch
-         https://github.com/arnholm/codeblocks_sfmirror/commit/29315df024251850832583f73e67e515dae10830.patch
-         sc_wxtypes-normalize.patch)
-sha256sums=('15eeb3e28aea054e1f38b0c7f4671b4d4d1116fd05f63c07aa95a91db89eaac5'
-            '10b2b08440adc447d1d23eb122fa37beff1f26b9d7588b83f8435721586f4ed1'
-            '0f9a3ae205afd358eeb643d5553f57f43cb0494c54ebd0a03f2c07d08df7713a'
-            'fda1ed975756f8b12b8d84e91be890becaa0fcd3797fd7d36df393531f42f5ea'
-            '520ee4ad5264d2a602c034259c3e47f768906f18fbc9a45c7102344345e17ebf'
-            '4ab925d798922394ca28193b459515c6cd6f647629b867487eb9e4a40bbcc988'
-            'b98ed0bfe926903ce16daea8b16973adfe97a3b8b12b628bc76b27e3fd1eccf5'
-            '28e23c2e1d1fd22d47c9a8bc318cd80d96eee23e03d397e59d2bf775cb802db7'
-            '2e62744218373cbba213f33eb4c473ac464dc8f3267253097fdf6ed39fedac0f'
-            '29bb2bbe3262b5590567227f79fa2513570dd69102bb4932e8bb77dc4f087398'
-            'cd12faec5678cf0c0906a3f7fe7cd09fc2eecf5b5fbb9d9ce7c6b6effd89af33'
-            '309eb824493a36f5ad9b51bc29af77730a0cf8698f75584c95bdd16f22f3fc78'
-            'c9723cac8ca690694b9db867b9b65736a1596958e153efd7672bf89ce832a6bd'
-            '8a89646c875e2c4f39019a58c378531b3bbe5e0a21deb18f679a799da0e2321b'
-            'a4d39d3016fe128e521c38a23b7b25ce94ea18263498a60d6224729dee528564')
-
-prepare() {
-  cd $pkgname-$pkgver
-  convert src/mime/codeblocks.png +set date:create +set date:modify -background none -extent 64x64 src/mime/codeblocks.png
-  sed -i 's|$(datadir)/pixmaps|$(datadir)/icons/hicolor/64x64/apps|' src/mime/Makefile.{am,in}
-  sed -i 's|$(datarootdir)/appdata|$(datarootdir)/metainfo|' Makefile.{am,in} src/plugins/contrib/appdata/Makefile.{am,in}
-
-  patch -p1 < ../codeblocks-gcc11.patch # Fix build with GCC 11 (Fedora)
-  patch -p1 < ../2345b020b862ec855038dd32a51ebb072647f28d.patch # Fix build with wxWidgets 3.2
-  patch -p1 < ../40eb88e3f2b933f19f9933e06c8d0899c54f5e25.patch
-  patch -p1 -F3 < ../56ac0396fad7a5b4bbb40bb8c4b5fe1755078aef.patch
-  patch -p1 < ../a4aacc92640b587ad049cd6aa68c637e536e9ab5.patch
-  patch -p1 < ../f2f127cf5cd97c7da6a957a3f7764cb25cc9017e.patch
-  patch -p1 < ../dbdf5c5ea9e3161233f0588a7616b7e4fedc7870.patch
-  patch -p1 < ../04b7c50fb8c6a29b2d84579ee448d2498414d855.patch
-  patch -p1 < ../8035dfdff321754819f79e3165401aa59bd8c7f7.patch
-  patch -p1 < ../9a9c6a9d5e3e0f6eff5594ecd61a2222f073be9c.patch
-  patch -p1 < ../c28746f4887f10e6f9f10eeafae0fb22ecdbf9c7.patch
-  patch -p1 < ../b2e4f1279804e1d11b71bc75eeb37072c3589296.patch
-  patch -p1 < ../29315df024251850832583f73e67e515dae10830.patch
-  patch -p1 < ../sc_wxtypes-normalize.patch
-}
-
-build() {
-  cd $pkgname-$pkgver
-  ./configure --prefix=/usr --with-contrib-plugins=all,-FileManager
-  sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
-  make
-}
-
-package() {
-  cd $pkgname-$pkgver
-  make DESTDIR="$pkgdir" install
-}

Copied: codeblocks/repos/community-staging-x86_64/PKGBUILD (from rev 1249593, codeblocks/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -0,0 +1,81 @@
+# Maintainer: Balló György <ballogyor+arch at gmail dot com>
+# Contributor: Alexander F Rødseth <xyproto at archlinux.org>
+# Contributor: Bartłomiej Piotrowski <nospam at bpiotrowski.pl>
+# Contributor: Robert Hollencamp <rhollencamp at gmail.com>
+# Contributor: Daniel J Griffiths <griffithsdj at inbox.com>
+# Contributor: Stefan Husmann <stefan-husmann at t-online.de>
+# Contributor: Roman Mikhayloff <rimf at inbox.ru>
+
+pkgname=codeblocks
+pkgver=20.03
+pkgrel=3
+pkgdesc='Cross-platform C/C++ IDE'
+arch=('x86_64')
+url='http://codeblocks.org/'
+license=('GPL3')
+depends=('boost-libs' 'wxwidgets-gtk3' 'hunspell')
+makedepends=('boost' 'imagemagick' 'zip')
+source=("https://downloads.sourceforge.net/codeblocks/$pkgname-$pkgver.tar.xz"
+         codeblocks-gcc11.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/40eb88e3f2b933f19f9933e06c8d0899c54f5e25.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/56ac0396fad7a5b4bbb40bb8c4b5fe1755078aef.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/a4aacc92640b587ad049cd6aa68c637e536e9ab5.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/f2f127cf5cd97c7da6a957a3f7764cb25cc9017e.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/04b7c50fb8c6a29b2d84579ee448d2498414d855.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/2345b020b862ec855038dd32a51ebb072647f28d.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/dbdf5c5ea9e3161233f0588a7616b7e4fedc7870.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/8035dfdff321754819f79e3165401aa59bd8c7f7.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/9a9c6a9d5e3e0f6eff5594ecd61a2222f073be9c.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/c28746f4887f10e6f9f10eeafae0fb22ecdbf9c7.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/b2e4f1279804e1d11b71bc75eeb37072c3589296.patch
+         https://github.com/arnholm/codeblocks_sfmirror/commit/29315df024251850832583f73e67e515dae10830.patch
+         sc_wxtypes-normalize.patch)
+sha256sums=('15eeb3e28aea054e1f38b0c7f4671b4d4d1116fd05f63c07aa95a91db89eaac5'
+            '10b2b08440adc447d1d23eb122fa37beff1f26b9d7588b83f8435721586f4ed1'
+            '0f9a3ae205afd358eeb643d5553f57f43cb0494c54ebd0a03f2c07d08df7713a'
+            'fda1ed975756f8b12b8d84e91be890becaa0fcd3797fd7d36df393531f42f5ea'
+            '520ee4ad5264d2a602c034259c3e47f768906f18fbc9a45c7102344345e17ebf'
+            '4ab925d798922394ca28193b459515c6cd6f647629b867487eb9e4a40bbcc988'
+            'b98ed0bfe926903ce16daea8b16973adfe97a3b8b12b628bc76b27e3fd1eccf5'
+            '28e23c2e1d1fd22d47c9a8bc318cd80d96eee23e03d397e59d2bf775cb802db7'
+            '2e62744218373cbba213f33eb4c473ac464dc8f3267253097fdf6ed39fedac0f'
+            '29bb2bbe3262b5590567227f79fa2513570dd69102bb4932e8bb77dc4f087398'
+            'cd12faec5678cf0c0906a3f7fe7cd09fc2eecf5b5fbb9d9ce7c6b6effd89af33'
+            '309eb824493a36f5ad9b51bc29af77730a0cf8698f75584c95bdd16f22f3fc78'
+            'c9723cac8ca690694b9db867b9b65736a1596958e153efd7672bf89ce832a6bd'
+            '8a89646c875e2c4f39019a58c378531b3bbe5e0a21deb18f679a799da0e2321b'
+            'a4d39d3016fe128e521c38a23b7b25ce94ea18263498a60d6224729dee528564')
+
+prepare() {
+  cd $pkgname-$pkgver
+  convert src/mime/codeblocks.png +set date:create +set date:modify -background none -extent 64x64 src/mime/codeblocks.png
+  sed -i 's|$(datadir)/pixmaps|$(datadir)/icons/hicolor/64x64/apps|' src/mime/Makefile.{am,in}
+  sed -i 's|$(datarootdir)/appdata|$(datarootdir)/metainfo|' Makefile.{am,in} src/plugins/contrib/appdata/Makefile.{am,in}
+
+  patch -p1 < ../codeblocks-gcc11.patch # Fix build with GCC 11 (Fedora)
+  patch -p1 < ../2345b020b862ec855038dd32a51ebb072647f28d.patch # Fix build with wxWidgets 3.2
+  patch -p1 < ../40eb88e3f2b933f19f9933e06c8d0899c54f5e25.patch
+  patch -p1 -F3 < ../56ac0396fad7a5b4bbb40bb8c4b5fe1755078aef.patch
+  patch -p1 < ../a4aacc92640b587ad049cd6aa68c637e536e9ab5.patch
+  patch -p1 < ../f2f127cf5cd97c7da6a957a3f7764cb25cc9017e.patch
+  patch -p1 < ../dbdf5c5ea9e3161233f0588a7616b7e4fedc7870.patch
+  patch -p1 < ../04b7c50fb8c6a29b2d84579ee448d2498414d855.patch
+  patch -p1 < ../8035dfdff321754819f79e3165401aa59bd8c7f7.patch
+  patch -p1 < ../9a9c6a9d5e3e0f6eff5594ecd61a2222f073be9c.patch
+  patch -p1 < ../c28746f4887f10e6f9f10eeafae0fb22ecdbf9c7.patch
+  patch -p1 < ../b2e4f1279804e1d11b71bc75eeb37072c3589296.patch
+  patch -p1 < ../29315df024251850832583f73e67e515dae10830.patch
+  patch -p1 < ../sc_wxtypes-normalize.patch
+}
+
+build() {
+  cd $pkgname-$pkgver
+  ./configure --prefix=/usr --with-contrib-plugins=all,-FileManager
+  sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+  make
+}
+
+package() {
+  cd $pkgname-$pkgver
+  make DESTDIR="$pkgdir" install
+}

Deleted: codeblocks-gcc11.patch
===================================================================
--- codeblocks-gcc11.patch	2022-07-11 16:40:15 UTC (rev 1249593)
+++ codeblocks-gcc11.patch	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -1,13 +0,0 @@
-diff --git a/src/plugins/openfileslist/openfileslistplugin.h b/src/plugins/openfileslist/openfileslistplugin.h
-index 7fd7a95..87b08ee 100644
---- a/src/plugins/openfileslist/openfileslistplugin.h
-+++ b/src/plugins/openfileslist/openfileslistplugin.h
-@@ -23,7 +23,7 @@ struct TargetFilesData
-     // Functor for the std::set predicate to sort the opened editor files according to their tab order
-     struct compareLess
-     {
--        bool operator()(const ProjectFile* lhs, const ProjectFile* rhs) { return lhs->editorTabPos < rhs->editorTabPos; }
-+        bool operator()(const ProjectFile* lhs, const ProjectFile* rhs) const { return lhs->editorTabPos < rhs->editorTabPos; }
-     };
-     typedef std::set<ProjectFile*, compareLess> OpenFilesSet;
-     ProjectFile* activeFile;

Copied: codeblocks/repos/community-staging-x86_64/codeblocks-gcc11.patch (from rev 1249593, codeblocks/trunk/codeblocks-gcc11.patch)
===================================================================
--- codeblocks-gcc11.patch	                        (rev 0)
+++ codeblocks-gcc11.patch	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -0,0 +1,13 @@
+diff --git a/src/plugins/openfileslist/openfileslistplugin.h b/src/plugins/openfileslist/openfileslistplugin.h
+index 7fd7a95..87b08ee 100644
+--- a/src/plugins/openfileslist/openfileslistplugin.h
++++ b/src/plugins/openfileslist/openfileslistplugin.h
+@@ -23,7 +23,7 @@ struct TargetFilesData
+     // Functor for the std::set predicate to sort the opened editor files according to their tab order
+     struct compareLess
+     {
+-        bool operator()(const ProjectFile* lhs, const ProjectFile* rhs) { return lhs->editorTabPos < rhs->editorTabPos; }
++        bool operator()(const ProjectFile* lhs, const ProjectFile* rhs) const { return lhs->editorTabPos < rhs->editorTabPos; }
+     };
+     typedef std::set<ProjectFile*, compareLess> OpenFilesSet;
+     ProjectFile* activeFile;

Deleted: sc_wxtypes-normalize.patch
===================================================================
--- sc_wxtypes-normalize.patch	2022-07-11 16:40:15 UTC (rev 1249593)
+++ sc_wxtypes-normalize.patch	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -1,13 +0,0 @@
-diff --git a/src/sdk/scripting/bindings/sc_wxtypes.cpp b/src/sdk/scripting/bindings/sc_wxtypes.cpp
-index 33cd09850..9a162bf9a 100644
---- a/src/sdk/scripting/bindings/sc_wxtypes.cpp
-+++ b/src/sdk/scripting/bindings/sc_wxtypes.cpp
-@@ -389,7 +389,6 @@ namespace ScriptBindings
-                 func(&wxFileName::IsDir, "IsDir").
-                 func(&wxFileName::MakeAbsolute, "MakeAbsolute").
-                 func(&wxFileName::MakeRelativeTo, "MakeRelativeTo").
--                func(&wxFileName::Normalize, "Normalize").
-                 func(&wxFileName::PrependDir, "PrependDir").
-                 func(&wxFileName::RemoveDir, "RemoveDir").
-                 func(&wxFileName::RemoveLastDir, "RemoveLastDir").
-

Copied: codeblocks/repos/community-staging-x86_64/sc_wxtypes-normalize.patch (from rev 1249593, codeblocks/trunk/sc_wxtypes-normalize.patch)
===================================================================
--- sc_wxtypes-normalize.patch	                        (rev 0)
+++ sc_wxtypes-normalize.patch	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -0,0 +1,13 @@
+diff --git a/src/sdk/scripting/bindings/sc_wxtypes.cpp b/src/sdk/scripting/bindings/sc_wxtypes.cpp
+index 33cd09850..9a162bf9a 100644
+--- a/src/sdk/scripting/bindings/sc_wxtypes.cpp
++++ b/src/sdk/scripting/bindings/sc_wxtypes.cpp
+@@ -389,7 +389,6 @@ namespace ScriptBindings
+                 func(&wxFileName::IsDir, "IsDir").
+                 func(&wxFileName::MakeAbsolute, "MakeAbsolute").
+                 func(&wxFileName::MakeRelativeTo, "MakeRelativeTo").
+-                func(&wxFileName::Normalize, "Normalize").
+                 func(&wxFileName::PrependDir, "PrependDir").
+                 func(&wxFileName::RemoveDir, "RemoveDir").
+                 func(&wxFileName::RemoveLastDir, "RemoveLastDir").
+

Deleted: wxwidgets-3.2.patch
===================================================================
--- wxwidgets-3.2.patch	2022-07-11 16:40:15 UTC (rev 1249593)
+++ wxwidgets-3.2.patch	2022-07-11 16:40:37 UTC (rev 1249594)
@@ -1,1590 +0,0 @@
-Index: sc_wxtypes.cpp
-===================================================================
---- a/src/sdk/scripting/bindings/sc_wxtypes.cpp	(revisión: 12231)
-+++ b/src/sdk/scripting/bindings/sc_wxtypes.cpp	(revisión: 12444)
-@@ -9,465 +9,1204 @@
- 
- #include "sdk_precomp.h"
- #ifndef CB_PRECOMP
-+    #include <wx/gdicmn.h>
-+    #include <wx/intl.h>
-     #include <wx/string.h>
--    #include <globals.h>
- #endif
-+
-+#include "scripting/bindings/sc_utils.h"
-+#include "scripting/bindings/sc_typeinfo_all.h"
-+
- #include <wx/filename.h>
--#include <wx/colour.h>
- 
--#include "sc_base_types.h"
-+using namespace cb;
- 
- namespace ScriptBindings
- {
--    ///////////////////
--    // wxArrayString //
--    ///////////////////
--    void wxArrayString_Clear(HSQUIRRELVM v)
-+
-+/// The _T() function for scripts.
-+/// Returns new wxString squirrel instance which wraps the passed string as parameter.
-+SQInteger static_T(HSQUIRRELVM v)
-+{
-+    // The first parameter is a environment table, because this is a global function.
-+    // We don't care about it, so we skip it.
-+    ExtractParams2<SkipParam, const SQChar*> extractor(v);
-+    if (!extractor.Process("_T"))
-+        return extractor.ErrorMessage();
-+
-+    return ConstructAndReturnInstance(v, cbC2U(extractor.p1));
-+}
-+
-+/// The _() function for scripts
-+SQInteger static_(HSQUIRRELVM v)
-+{
-+    // The first parameter is a environment table, because this is a global function.
-+    // We don't care about it, so we skip it.
-+    ExtractParams2<SkipParam, const SQChar*> extractor(v);
-+    if (!extractor.Process("_T"))
-+        return extractor.ErrorMessage();
-+
-+    return ConstructAndReturnInstance(v, wxGetTranslation(cbC2U(extractor.p1)));
-+}
-+
-+SQInteger wxString_ctor(HSQUIRRELVM v)
-+{
-+    ExtractParamsBase extractor(v);
-+    if (!extractor.CheckNumArguments(1, 2, "wxString_ctor"))
-+        return extractor.ErrorMessage();
-+    const int numArgs = sq_gettop(v);
-+
-+    if (numArgs == 1) // empty ctor
-     {
--        static_assert(wxMinimumVersion<2,8,12>::eval, "wxWidgets 2.8.12 is required");
--        StackHandler sa(v);
--        wxArrayString& self = *SqPlus::GetInstance<wxArrayString,false>(v, 1);
--        self.Clear();
-+        UserDataForType<wxString> *data;
-+        data = SetupUserPointer<wxString, InstanceAllocationMode::InstanceIsInline>(v, 1);
-+        if (!data)
-+            return -1; // SetupUserPointer should have called sq_throwerror!
-+        new (&(data->userdata)) wxString();
-+        return 0;
-     }
--    SQInteger wxArrayString_GetCount(HSQUIRRELVM v)
-+    else
-     {
--        static_assert(wxMinimumVersion<2,8,12>::eval, "wxWidgets 2.8.12 is required");
--        StackHandler sa(v);
--        wxArrayString& self = *SqPlus::GetInstance<wxArrayString,false>(v, 1);
--        return sa.Return((SQInteger)self.GetCount());
-+        // 1 argument ctor
-+        const SQObjectType type = sq_gettype(v, 2);
-+        switch (type)
-+        {
-+            case OT_STRING:
-+            {
-+                // Construct from Squirrel string
-+                const SQChar *value = extractor.GetParamString(2);
-+                cbAssert(value);
-+                UserDataForType<wxString> *data;
-+                data = SetupUserPointer<wxString, InstanceAllocationMode::InstanceIsInline>(v, 1);
-+                if (!data)
-+                    return -1; // SetupUserPointer should have called sq_throwerror!
-+                new (&(data->userdata)) wxString(value);
-+                return 0;
-+            }
-+            case OT_INSTANCE:
-+            {
-+                // Construct from wxString
-+                wxString *value;
-+                if (!extractor.ProcessParam(value, 2, "wxString_ctor"))
-+                    return extractor.ErrorMessage();
-+                UserDataForType<wxString> *data;
-+                data = SetupUserPointer<wxString, InstanceAllocationMode::InstanceIsInline>(v, 1);
-+                if (!data)
-+                    return -1; // SetupUserPointer should have called sq_throwerror!
-+                new (&(data->userdata)) wxString(*value);
-+                return 0;
-+            }
-+            default:
-+                return sq_throwerror(v, _SC("Unsupported argument type passed to wxString constructor!"));
-+        }
-     }
-+}
- 
--    SQInteger wxArrayString_Index(HSQUIRRELVM v)
-+SQInteger wxString_OpAdd(HSQUIRRELVM v)
-+{
-+    // TODO: Optional Args
-+    ExtractParamsBase extractor(v);
-+    if (!extractor.CheckNumArguments(2, "wxString_OpAdd"))
-+        return extractor.ErrorMessage();
-+
-+    // Squirrel doesn't call us, the first parameter is not a wxString.
-+    const wxString *s1 = nullptr;
-+    if (!extractor.ProcessParam(s1, 1, "wxString_OpAdd"))
-+        return extractor.ErrorMessage();
-+
-+    wxString result = *s1;
-+    const SQObjectType type2 = sq_gettype(v, 2);
-+    switch (type2)
-     {
--        static_assert(wxMinimumVersion<2,8,12>::eval, "wxWidgets 2.8.12 is required");
--        StackHandler sa(v);
--        wxArrayString& self = *SqPlus::GetInstance<wxArrayString,false>(v, 1);
--        wxString inpstr = *SqPlus::GetInstance<wxString,false>(v, 2);
--        bool chkCase = true;
--        bool frmEnd = false;
--        if (sa.GetParamCount() >= 3)
--            chkCase = sa.GetBool(3);
--        if (sa.GetParamCount() == 4)
--            frmEnd = sa.GetBool(4);
--        return sa.Return((SQInteger)self.Index(inpstr.c_str(), chkCase, frmEnd));
-+        case OT_INSTANCE:
-+        {
-+            const wxString *s2 = nullptr;
-+            if (!extractor.ProcessParam(s2, 2, "wxString_OpAdd"))
-+                return extractor.ErrorMessage();
-+            result += *s2;
-+            break;
-+        }
-+        case OT_STRING:
-+        {
-+            const SQChar *s2 = nullptr;
-+            if (!extractor.ProcessParam(s2, 2, "wxString_OpAdd"))
-+                return extractor.ErrorMessage();
-+            result << s2;
-+            break;
-+        }
-+        case OT_INTEGER:
-+        {
-+            SQInteger s2;
-+            if (!extractor.ProcessParam(s2, 2, "wxString_OpAdd"))
-+                return extractor.ErrorMessage();
-+            result << s2;
-+            break;
-+        }
-+        case OT_FLOAT:
-+        {
-+            SQFloat s2;
-+            if (!extractor.ProcessParam(s2, 2, "wxString_OpAdd"))
-+                return extractor.ErrorMessage();
-+            result << s2;
-+            break;
-+        }
-+        default:
-+            return sq_throwerror(v, _SC("Unknown type"));
-     }
--    SQInteger wxArrayString_SetItem(HSQUIRRELVM v)
--    {
--        StackHandler sa(v);
--        if (sa.GetParamCount() != 3)
--            return sq_throwerror(v, "wxArrayString::SetItem wrong number of parameters!");
--        wxArrayString& self = *SqPlus::GetInstance<wxArrayString,false>(v, 1);
--        int index = sa.GetInt(2);
--        if (index < 0 || size_t(index) >= self.GetCount())
--            return sq_throwerror(v, "wxArrayString::SetItem index out of bounds!");
--        const wxString &value = *SqPlus::GetInstance<wxString,false>(v, 3);
--        self[index] = value;
--        return 0;
--    }
- 
--    //////////////
--    // wxColour //
--    //////////////
--    SQInteger wxColour_OpToString(HSQUIRRELVM v)
-+    return ConstructAndReturnInstance(v, result);
-+}
-+
-+SQInteger wxString_OpCompare(HSQUIRRELVM v)
-+{
-+    // TODO: Optional Args
-+    ExtractParamsBase extractor(v);
-+    if (!extractor.CheckNumArguments(2, "wxString_OpCompare"))
-     {
--        StackHandler sa(v);
--        wxColour& self = *SqPlus::GetInstance<wxColour,false>(v, 1);
--        wxString str = wxString::Format(_T("[r=%d, g=%d, b=%d]"), self.Red(), self.Green(), self.Blue());
--        return sa.Return((const SQChar*)str.mb_str(wxConvUTF8));
-+        extractor.ErrorMessage();
-+        return false;
-     }
- 
--    ////////////////
--    // wxFileName //
--    ////////////////
--    SQInteger wxFileName_OpToString(HSQUIRRELVM v)
-+    const SQObjectType type1 = sq_gettype(v, 1);
-+    const SQObjectType type2 = sq_gettype(v, 2);
-+
-+    if (type1 == OT_STRING && type2 == OT_INSTANCE)
-     {
--        StackHandler sa(v);
--        wxFileName& self = *SqPlus::GetInstance<wxFileName,false>(v, 1);
--        return sa.Return((const SQChar*)self.GetFullPath().mb_str(wxConvUTF8));
-+        const SQChar *s1;
-+        const wxString *s2;
-+        if (extractor.ProcessParam(s1, 1, "wxString_OpCompare")
-+            && extractor.ProcessParam(s2, 2, "wxString_OpCompare"))
-+        {
-+            wxString temp1(s1);
-+            sq_pushinteger(v, temp1.Cmp(*s2));
-+            return 1;
-+        }
-+        else
-+            return extractor.ErrorMessage();
-     }
- 
--    /////////////
--    // wxPoint //
--    /////////////
-+    // At least one of the parameters is a wxString. It is not the seconds, so at least the first
-+    // one is a wxString.
-+    const wxString *s1 = nullptr;
-+    if (!extractor.ProcessParam(s1, 1, "wxString_OpCompare"))
-+        return extractor.ErrorMessage();
- 
--    template<typename UserType>
--    SQInteger wxPointSize_OpToString(HSQUIRRELVM v)
-+    if (type2 == OT_STRING)
-     {
--        StackHandler sa(v);
--        const UserType *self = SqPlus::GetInstance<UserType, false>(v, 1);
--        if (!self)
--            return sa.ThrowError(_SC("Cannot extract 'this'!"));
--        SQChar buf[100];
--        scsprintf(buf, "[%d,%d]", self->x, self->y);
--        return sa.Return(buf);
-+        const SQChar *s2;
-+        if (!extractor.ProcessParam(s2, 2, "wxString_OpCompare"))
-+            return extractor.ErrorMessage();
-+        sq_pushinteger(v, s1->Cmp(wxString(s2)));
-+        return 1;
-     }
- 
--    // wxPoint operator==
--    SQInteger wxPoint_OpCmp(HSQUIRRELVM v)
--    {
--        StackHandler sa(v);
--        const wxPoint *self = SqPlus::GetInstance<wxPoint,false>(v, 1);
--        if (!self)
--            return sa.ThrowError(_SC("wxPoint_OpCmp: Cannot extract 'this'!"));
--        const wxPoint *other = SqPlus::GetInstance<wxPoint,false>(v, 2);
--        if (!other)
--            return sa.ThrowError(_SC("wxPoint_OpCmp: Cannot extract 'other!"));
-+    const wxString *s2;
-+    if (!extractor.ProcessParam(s2, 2, "wxString_OpCompare"))
-+        return extractor.ErrorMessage();
-+    sq_pushinteger(v, s1->Cmp(*s2));
-+    return 1;
-+}
- 
--        SQInteger res;
--        if (self->x < other->x)
--            res = -1;
--        else if (self->x > other->x)
--            res = 1;
--        else
--        {
--            if (self->y < other->y)
--                res = -1;
--            else if (self->y > other->y)
--                res = 1;
--            else
--                res = 0;
--        }
--        return sa.Return(res);
--    }
--    SQInteger wxPoint_x(HSQUIRRELVM v)
-+SQInteger wxString_OpToString(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxString*> extractor(v);
-+    if (!extractor.Process("wxString::_tostring"))
-+        return extractor.ErrorMessage();
-+
-+    sq_pushstring(v, extractor.p0->utf8_str().data(), -1);
-+    return 1;
-+}
-+
-+SQInteger wxString_Find(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxString*, const wxString*> extractor(v);
-+    if (!extractor.Process("wxString_Find"))
-+        return extractor.ErrorMessage();
-+
-+    sq_pushinteger(v, extractor.p0->Find(*extractor.p1));
-+    return 1;
-+}
-+
-+SQInteger wxString_Matches(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxString*, const wxString*> extractor(v);
-+    if (!extractor.Process("wxString_Matches"))
-+        return extractor.ErrorMessage();
-+
-+    sq_pushbool(v, extractor.p0->Matches(*extractor.p1));
-+    return 1;
-+}
-+
-+SQInteger wxString_AddChar(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxString*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxString_AddChar"))
-+        return extractor.ErrorMessage();
-+     char tmp[8];
-+    snprintf(tmp, 8, "%c", char(extractor.p1));
-+    *extractor.p0 += cbC2U(tmp);
-+    return 0;
-+}
-+
-+SQInteger wxString_GetChar(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxString*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxString_GetChar"))
-+        return extractor.ErrorMessage();
-+    if (extractor.p1 < 0 || wxString::size_type(extractor.p1) >= extractor.p0->length())
-+        return sq_throwerror(v, _SC("wxString_GetChar: Index outside of valid range!"));
-+    sq_pushinteger(v, extractor.p0->GetChar(extractor.p1));
-+    return 1;
-+}
-+
-+SQInteger wxString_Set(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxString*, const wxString*> extractor(v);
-+    if (!extractor.Process("wxString_Set"))
-+        return extractor.ErrorMessage();
-+    *extractor.p0 = *extractor.p1;
-+    return 0;
-+}
-+
-+SQInteger wxString_IsEmpty(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxString*> extractor(v);
-+    if (!extractor.Process("wxString::IsEmpty"))
-+        return extractor.ErrorMessage();
-+
-+    sq_pushbool(v, extractor.p0->empty());
-+    return 1;
-+}
-+
-+SQInteger wxString_Length(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxString*> extractor(v);
-+    if (!extractor.Process("wxString_Length"))
-+        return extractor.ErrorMessage();
-+
-+    sq_pushinteger(v, extractor.p0->Length());
-+    return 1;
-+}
-+
-+using wxStringDoSomethingAndReturnNewFunc = wxString& (wxString::*)();
-+
-+template<wxStringDoSomethingAndReturnNewFunc func>
-+SQInteger wxString_NoParamReturnWxString(HSQUIRRELVM v)
-+{
-+    ExtractParams1<wxString*> extractor(v);
-+    if (!extractor.Process("wxString_NoParamReturnWxString"))
-+        return extractor.ErrorMessage();
-+
-+    return ConstructAndReturnInstance(v, (extractor.p0->*func)());
-+}
-+
-+using wxStringDoSomethingNoReturnFunc = void (wxString::*)();
-+
-+template<wxStringDoSomethingNoReturnFunc func>
-+SQInteger wxString_NoParamNoReturn(HSQUIRRELVM v)
-+{
-+    ExtractParams1<wxString*> extractor(v);
-+    if (!extractor.Process("wxString_NoParamNoReturn"))
-+        return extractor.ErrorMessage();
-+    (extractor.p0->*func)();
-+    return 0;
-+}
-+
-+SQInteger wxString_Mid(HSQUIRRELVM v)
-+{
-+    ExtractParams3<const wxString*, SQInteger, SQInteger> extractor(v);
-+    if (!extractor.Process("wxString_Mid"))
-+        return extractor.ErrorMessage();
-+
-+    return ConstructAndReturnInstance(v, extractor.p0->Mid(extractor.p1, extractor.p2));
-+}
-+
-+SQInteger wxString_Remove(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxString*, SQInteger, SQInteger> extractor(v);
-+    if (!extractor.Process("wxString_Remove"))
-+        return extractor.ErrorMessage();
-+    if (extractor.p1 < 0)
-+        return sq_throwerror(v, _SC("wxString::Remove: Parameter nStart needs to be non-negative!"));
-+    if (extractor.p2 < 0)
-+        return sq_throwerror(v, _SC("wxString::Remove: Parameter nLen needs to be non-negative!"));
-+    wxString &res = extractor.p0->Remove(extractor.p1, extractor.p2);
-+    assert(&res == extractor.p0);
-+
-+    DuplicateInstance(v, 1);
-+
-+    return 1;
-+}
-+
-+SQInteger wxString_RemoveLast(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxString*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxString_RemoveLast"))
-+        return extractor.ErrorMessage();
-+    if (extractor.p1 < 0)
-+        return sq_throwerror(v, _SC("wxString::RemoveLast: Parameter n needs to be non-negative!"));
-+    wxString &res = extractor.p0->RemoveLast(extractor.p1);
-+    assert(&res == extractor.p0);
-+
-+    DuplicateInstance(v, 1);
-+
-+    return 1;
-+}
-+
-+SQInteger wxString_Replace(HSQUIRRELVM v)
-+{
-+    SQInteger result = -1;
-+
-+    // TODO: Optional Args
-+    const int numArgs = sq_gettop(v);
-+    if (numArgs == 3)
-     {
--        StackHandler sa(v);
--        wxPoint& self = *SqPlus::GetInstance<wxPoint,false>(v, 1);
--        return sa.Return((SQInteger)(self.x));
-+        ExtractParams3<wxString*, const wxString*, const wxString*> extractor(v);
-+        if (!extractor.Process("wxString_Replace"))
-+            return extractor.ErrorMessage();
-+        result = extractor.p0->Replace(*extractor.p1, *extractor.p2);
-     }
--    SQInteger wxPoint_y(HSQUIRRELVM v)
-+    else if (numArgs == 4)
-     {
--        StackHandler sa(v);
--        wxPoint& self = *SqPlus::GetInstance<wxPoint,false>(v, 1);
--        return sa.Return((SQInteger)(self.y));
-+        ExtractParams4<wxString*, const wxString*, const wxString*, bool> extractor(v);
-+        if (!extractor.Process("wxString_Replace"))
-+            return extractor.ErrorMessage();
-+        result = extractor.p0->Replace(*extractor.p1, *extractor.p2, extractor.p3);
-     }
- 
--    //////////////
--    // wxString //
--    //////////////
-+    DuplicateInstance(v, 1);
-+    sq_pushinteger(v, result);
- 
--    // the _() function for scripts
--    wxString static_(const SQChar* str)
-+    return 1;
-+}
-+
-+using wxStringLeftRightFunc = wxString (wxString::*)(size_t) const;
-+
-+template<wxStringLeftRightFunc func>
-+SQInteger wxString_LeftRight(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxString*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxString_LeftRight"))
-+        return extractor.ErrorMessage();
-+    if (extractor.p1 < 0)
-+        return sq_throwerror(v, _SC("wxString_LeftRight: nCount should be non-negative integer!"));
-+
-+    return ConstructAndReturnInstance(v, (extractor.p0->*func)(extractor.p1));
-+}
-+
-+/// Extract parameters for a call to Before/After-First/Last kind of function.
-+/// The first parameter is this/self wxString.
-+/// The second parameter is the search character. Currently we support an int (for some kind of
-+/// ascii, untested), const wxString*, const string. For both kind of strings we extract the first
-+/// character.
-+bool SetupFirstLastParams(HSQUIRRELVM v, const wxString *&self, wxUniChar &searchChar)
-+{
-+    // TODO: Optional Args
-+    ExtractParamsBase extractor(v);
-+    if (!extractor.CheckNumArguments(2, "SetupFirstLastParams"))
-     {
--        return wxGetTranslation(cbC2U(str));
-+        extractor.ErrorMessage();
-+        return false;
-     }
- 
--    // the _T() function for scripts
--    wxString static_T(const SQChar* str)
-+    self = nullptr;
-+    if (!extractor.ProcessParam(self, 1, "SetupFirstLastParams"))
-     {
--        return cbC2U(str);
-+        extractor.ErrorMessage();
-+        return false;
-     }
- 
--    SQInteger wxString_Set(HSQUIRRELVM v)
-+    const SQObjectType charParamType = sq_gettype(v, 2);
-+    switch (charParamType)
-     {
--        StackHandler sa(v);
--
--        wxString *self = SqPlus::GetInstance<wxString, false>(v, 1);
--        if (!self)
--            return sa.ThrowError(_SC("Cannot extract 'this'!"));
--        const wxString *other = SqPlus::GetInstance<wxString, false>(v, 2);
--        if (!other)
--            return sa.ThrowError(_SC("Cannot extract 'other'!"));
--        self->assign(*other);
--        return sa.Return();
-+    case OT_INTEGER:
-+        {
-+            SQInteger temp;
-+            if (!extractor.ProcessParam(temp, 2, "SetupFirstLastParams"))
-+            {
-+                extractor.ErrorMessage();
-+                return false;
-+            }
-+            searchChar = temp;
-+            return true;
-+        }
-+    case OT_INSTANCE:
-+        {
-+            const wxString *search = nullptr;
-+            if (!extractor.ProcessParam(search, 2, "SetupFirstLastParams"))
-+            {
-+                extractor.ErrorMessage();
-+                return false;
-+            }
-+            if (search->length() < 1)
-+            {
-+                sq_throwerror(v, _SC("SetupFirstLastParams: String length too short!"));
-+                return false;
-+            }
-+            searchChar = search->GetChar(0);
-+            return true;
-+        }
-+    case OT_STRING:
-+        {
-+            const SQChar *search = nullptr;
-+            if (!extractor.ProcessParam(search, 2, "SetupFirstLastParams"))
-+            {
-+                extractor.ErrorMessage();
-+                return false;
-+            }
-+            if (search && search[0] != _SC('\0'))
-+                searchChar = search[0];
-+            else
-+            {
-+                sq_throwerror(v, _SC("SetupFirstLastParams: Invalid searchChar parameter!"));
-+                return false;
-+            }
-+            return true;
-+        }
-+    default:
-+        sq_throwerror(v, _SC("SetupFirstLastParams: Invalid searchChar parameter!"));
-+        return false;
-     }
-+}
- 
--    // wxString operator+
--    SQInteger wxString_OpAdd(HSQUIRRELVM v)
-+using wxStringDoAfterFirstLastFunc = wxString (wxString::*)(wxUniChar) const;
-+
-+template<wxStringDoAfterFirstLastFunc func>
-+SQInteger wxString_DoAfterFirstLast(HSQUIRRELVM v)
-+{
-+    const wxString *self;
-+    wxUniChar searchChar;
-+    if (!SetupFirstLastParams(v, self, searchChar))
-+        return -1; // An error should have been logged already.
-+
-+    return ConstructAndReturnInstance(v, (self->*func)(searchChar));
-+}
-+
-+using wxStringDoBeforeFirstLastFunc = wxString (wxString::*)(wxUniChar, wxString *) const;
-+
-+template<wxStringDoBeforeFirstLastFunc func>
-+SQInteger wxString_DoBeforeFirstLast(HSQUIRRELVM v)
-+{
-+    const wxString *self;
-+    wxUniChar searchChar;
-+    if (!SetupFirstLastParams(v, self, searchChar))
-+        return -1; // An error should have been logged already.
-+
-+    return ConstructAndReturnInstance(v, (self->*func)(searchChar, nullptr));
-+}
-+
-+SQInteger wxString_ToLong(HSQUIRRELVM v)
-+{
-+    // env table, string
-+    ExtractParams2<SkipParam, const wxString*> extractor(v);
-+    if (!extractor.Process("wxString_ToLong"))
-+        return extractor.ErrorMessage();
-+
-+    long value;
-+    if (!extractor.p1->ToLong(&value))
-+        value = -1;
-+    sq_pushinteger(v, value);
-+    return 1;
-+}
-+
-+SQInteger wxColour_ctor(HSQUIRRELVM v)
-+{
-+    ExtractParamsBase extractor(v);
-+    if (!extractor.CheckNumArguments(1, 5, "wxColour_ctor"))
-+        return extractor.ErrorMessage();
-+
-+    const int numArgs = sq_gettop(v);
-+    switch (numArgs)
-     {
--        StackHandler sa(v);
--        wxString result;
--        wxString& str1 = *SqPlus::GetInstance<wxString,false>(v, 1);
--        if (sa.GetType(2) == OT_INTEGER)
-+        case 1: // empty ctor
-         {
--#ifdef _SQ64
--            result.Printf(_T("%s%ld"), str1.c_str(), sa.GetInt(2));
--#else
--            result.Printf(_T("%s%d"), str1.c_str(), sa.GetInt(2));
--#endif
-+            UserDataForType<wxColour> *data;
-+            data = SetupUserPointer<wxColour, InstanceAllocationMode::InstanceIsInline>(v, 1);
-+            if (!data)
-+                return -1; // SetupUserPointer should have called sq_throwerror!
-+            new (&(data->userdata)) wxColour();
-+            return 0;
-         }
--        else if (sa.GetType(2) == OT_FLOAT)
--            result.Printf(_T("%s%f"), str1.c_str(), sa.GetFloat(2));
--        else if (sa.GetType(2) == OT_USERPOINTER)
--            result.Printf(_T("%s%p"), str1.c_str(), sa.GetUserPointer(2));
--        else if (sa.GetType(2) == OT_STRING)
--            result.Printf(_T("%s%s"), str1.c_str(), cbC2U(sa.GetString(2)).c_str());
--        else
-+        case 4: // 3 ints
-         {
--            wxString *str2 = SqPlus::GetInstance<wxString,false>(v, 2);
--            if (!str2)
--                return sa.ThrowError("Second parameter is not a wxString instance!");
--            result = str1 + *str2;
-+            // env table, red, green, blue
-+            ExtractParams4<SkipParam, SQInteger, SQInteger, SQInteger> extractor(v);
-+            if (!extractor.Process("wxColour_ctor(3 ints)"))
-+                return extractor.ErrorMessage();
-+            UserDataForType<wxColour> *data;
-+            data = SetupUserPointer<wxColour, InstanceAllocationMode::InstanceIsInline>(v, 1);
-+            if (!data)
-+                return -1; // SetupUserPointer should have called sq_throwerror!
-+            new (&(data->userdata)) wxColour(extractor.p1, extractor.p2, extractor.p3);
-+            return 0;
-         }
--        return SqPlus::ReturnCopy(v, result);
-+        case 5: // 4 ints
-+        {
-+            // env table, red, green, blue, alpha
-+            ExtractParams5<SkipParam, SQInteger, SQInteger, SQInteger, SQInteger> extractor(v);
-+            if (!extractor.Process("wxColour_ctor(4 ints)"))
-+                return extractor.ErrorMessage();
-+            UserDataForType<wxColour> *data;
-+            data = SetupUserPointer<wxColour, InstanceAllocationMode::InstanceIsInline>(v, 1);
-+            if (!data)
-+                return -1; // SetupUserPointer should have called sq_throwerror!
-+            new (&(data->userdata)) wxColour(extractor.p1, extractor.p2, extractor.p3, extractor.p4);
-+            return 0;
-+        }
-+        default:
-+            return sq_throwerror(v, _SC("Unsupported number of arguments passed wxString()!"));
-     }
-+}
- 
--    SQInteger wxString_OpCmp(HSQUIRRELVM v)
-+
-+SQInteger wxColour_Set(HSQUIRRELVM v)
-+{
-+    // this, red, green, blue, alpha
-+    ExtractParams5<wxColour*, SQInteger, SQInteger, SQInteger, SQInteger> extractor(v);
-+    if (!extractor.Process("wxColour_Set"))
-+        return extractor.ErrorMessage();
-+    extractor.p0->Set(extractor.p1, extractor.p2, extractor.p3, extractor.p4);
-+    return 0;
-+}
-+
-+SQInteger wxColour_IsOk(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxColour*> extractor(v);
-+    if (!extractor.Process("wxColour_IsOk"))
-+        return extractor.ErrorMessage();
-+    sq_pushbool(v, extractor.p0->IsOk());
-+
-+    return 1;
-+}
-+
-+SQInteger wxColour_ToString(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxColour*> extractor(v);
-+    if (!extractor.Process("wxColour_ToString"))
-+        return extractor.ErrorMessage();
-+
-+    SQChar buf[100];
-+    scsprintf(buf, 100, _SC("[r=%d, g=%d, b=%d, a=%d]"), extractor.p0->Red(), extractor.p0->Green(),
-+              extractor.p0->Blue(), extractor.p0->Alpha());
-+    sq_pushstring(v, buf, -1);
-+    return 1;
-+}
-+
-+SQInteger wxPoint_get(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxPoint*, const SQChar*> extractor(v);
-+    if (!extractor.Process("wxPoint_get"))
-+        return extractor.ErrorMessage();
-+
-+    const SQChar *fieldName = extractor.p1;
-+    if (scstrcmp(fieldName, _SC("x")) == 0)
-     {
--        StackHandler sa(v);
--        wxString& str1 = *SqPlus::GetInstance<wxString,false>(v, 1);
--        if (sa.GetType(2) == OT_STRING)
--            return sa.Return((SQInteger)str1.Cmp(cbC2U(sa.GetString(2))));
--        return sa.Return((SQInteger)str1.Cmp(*SqPlus::GetInstance<wxString,false>(v, 2)));
-+        sq_pushinteger(v, extractor.p0->x);
-+        return 1;
-     }
--
--    SQInteger wxString_OpToString(HSQUIRRELVM v)
-+    if (scstrcmp(fieldName, _SC("y")) == 0)
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        return sa.Return((const SQChar*)self.mb_str(wxConvUTF8));
-+        sq_pushinteger(v, extractor.p0->y);
-+        return 1;
-     }
-+    return sq_throwerror(v, _SC("wxPoint_get: Unknown field"));
-+}
- 
--    SQInteger wxString_AddChar(HSQUIRRELVM v)
-+SQInteger wxPoint_set(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxPoint*, const SQChar*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxPoint_set"))
-+        return extractor.ErrorMessage();
-+
-+    const SQChar *fieldName = extractor.p1;
-+    if (scstrcmp(fieldName, _SC("x")) == 0)
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        int idx = sa.GetInt(2);
--        char tmp[8] = {};
--        sprintf(tmp, "%c", idx);
--        self += cbC2U(tmp);
--        return sa.Return();
-+        extractor.p0->x = extractor.p2;
-+        return 0;
-     }
--    SQInteger wxString_GetChar(HSQUIRRELVM v)
-+    if (scstrcmp(fieldName, _SC("y")) == 0)
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        int idx = sa.GetInt(2);
--        return sa.Return((SQInteger)(((const char*)cbU2C(self))[idx]));
-+        extractor.p0->y = extractor.p2;
-+        return 0;
-     }
--    SQInteger wxString_Matches(HSQUIRRELVM v)
--    {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        wxString& other = *SqPlus::GetInstance<wxString,false>(v, 2);
--        return sa.Return(self.Matches(other));
--    }
-+    return sq_throwerror(v, _SC("wxPoint_set: Unknown field"));
-+}
- 
--    static SQChar ExtractChar(HSQUIRRELVM v, StackHandler &sa, SQInteger idx)
-+SQInteger wxPoint_cmp(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxPoint*, const wxPoint*> extractor(v);
-+    if (!extractor.Process("wxPoint_cmp"))
-+        return extractor.ErrorMessage();
-+
-+    int res;
-+    if (extractor.p0->x < extractor.p1->x)
-+        res = -1;
-+    else if (extractor.p0->x > extractor.p1->x)
-+        res = 1;
-+    else
-     {
--        switch (sa.GetType(idx))
--        {
--        case OT_INTEGER:
--            return sa.GetInt(idx);
--        case OT_STRING:
--            {
--                const SQChar *str = sa.GetString(idx);
--                if (str && str[0] != _SC('\0'))
--                    return str[0];
--                sa.ThrowError(_SC("Empty string not supported!"));
--                return _SC('\0');
--            }
--        case OT_INSTANCE:
--            {
--                SQChar result = _SC('\0');
--                wxString* arg = SqPlus::GetInstance<wxString, false>(v, idx);
--                if (!arg)
--                    sa.ThrowError(_SC("Can't extract wxString"));
--                else if (arg->empty())
--                    sa.ThrowError(_SC("Empty string not supported!"));
--                else
--                    result = arg->GetChar(0).GetValue();
--                return result;
--            }
--        default:
--            sa.ThrowError(_SC("Unsupported parameter type!"));
--            return _SC('\0');
--        }
-+        if (extractor.p0->y < extractor.p1->y)
-+            res = -1;
-+        else if (extractor.p0->y > extractor.p1->y)
-+            res = 1;
-+        else
-+            res = 0;
-     }
-+    sq_pushinteger(v, res);
-+    return 1;
-+}
- 
--    SQInteger wxString_AfterFirst(HSQUIRRELVM v)
-+template<typename Type>
-+SQInteger wxPointSize_tostring(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const Type*> extractor(v);
-+    if (!extractor.Process("wxPointSize_tostring"))
-+        return extractor.ErrorMessage();
-+
-+    SQChar buf[100];
-+    scsprintf(buf, 100, _SC("[%d,%d]"), extractor.p0->x, extractor.p0->y);
-+    sq_pushstring(v, buf, -1);
-+    return 1;
-+}
-+
-+SQInteger wxSize_Set(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxSize*, SQInteger, SQInteger> extractor(v);
-+    if (!extractor.Process("wxSize_Set"))
-+        return extractor.ErrorMessage();
-+    extractor.p0->Set(extractor.p1, extractor.p2);
-+    return 0;
-+}
-+
-+template<void (wxSize::*func)(int)>
-+SQInteger wxSize_SetWidthHeight(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxSize*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxSize_SetWidthHeight"))
-+        return extractor.ErrorMessage();
-+    (extractor.p0->*func)(extractor.p1);
-+    return 0;
-+}
-+
-+SQInteger wxArrayString_Add(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxArrayString*, const wxString*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxArrayString_Add"))
-+        return extractor.ErrorMessage();
-+    sq_pushinteger(v, extractor.p0->Add(*extractor.p1, extractor.p2));
-+    return 1;
-+}
-+
-+SQInteger wxArrayString_Clear(HSQUIRRELVM v)
-+{
-+    ExtractParams1<wxArrayString*> extractor(v);
-+    if (!extractor.Process("wxArrayString_Clear"))
-+        return extractor.ErrorMessage();
-+    extractor.p0->Clear();
-+    return 0;
-+}
-+
-+SQInteger wxArrayString_Index(HSQUIRRELVM v)
-+{
-+    // TODO: Optional Args
-+    ExtractParamsBase extractor(v);
-+    if (!extractor.CheckNumArguments(2, 4, "wxArrayString_Index"))
-+        return extractor.ErrorMessage();
-+
-+    wxArrayString *self = nullptr;
-+    if (!extractor.ProcessParam(self, 1, "wxArrayString_Index"))
-+        return extractor.ErrorMessage();
-+
-+    const wxString *str = nullptr;
-+    if (!extractor.ProcessParam(str, 2, "wxArrayString_Index"))
-+        return extractor.ErrorMessage();
-+
-+    bool bCase = true;
-+    bool bFromEnd = false;
-+    const int numArgs = sq_gettop(v);
-+    if (numArgs >= 3)
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        return SqPlus::ReturnCopy(v, self.AfterFirst(static_cast<wxChar>(ExtractChar(v, sa, 2))));
-+        if (!extractor.ProcessParam(bCase, 3, "wxArrayString_Index"))
-+            return extractor.ErrorMessage();
-     }
--    SQInteger wxString_AfterLast(HSQUIRRELVM v)
-+    if (numArgs == 4)
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        return SqPlus::ReturnCopy(v, self.AfterLast(static_cast<wxChar>(ExtractChar(v, sa, 2))));
-+        if (!extractor.ProcessParam(bFromEnd, 4, "wxArrayString_Index"))
-+            return extractor.ErrorMessage();
-     }
--    SQInteger wxString_BeforeFirst(HSQUIRRELVM v)
-+
-+    sq_pushinteger(v, self->Index(*str, bCase, bFromEnd));
-+    return 1;
-+}
-+
-+SQInteger wxArrayString_Item(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxArrayString*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxArrayString_Item"))
-+        return extractor.ErrorMessage();
-+    const SQInteger index = extractor.p1;
-+    if (index < 0 || size_t(index) >= extractor.p0->GetCount())
-+        return sq_throwerror(v, _SC("wxArrayString_Item: index out of bounds!"));
-+
-+    // Create an instance for the return value.
-+    wxString *ref = &((*extractor.p0)[index]);
-+    return ConstructAndReturnNonOwnedPtr(v, ref);
-+}
-+
-+SQInteger wxArrayString_SetItem(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxArrayString*, SQInteger, const wxString*> extractor(v);
-+    if (!extractor.Process("wxArrayString_SetItem"))
-+        return extractor.ErrorMessage();
-+
-+    const SQInteger index = extractor.p1;
-+    if (index < 0 || size_t(index) >= extractor.p0->GetCount())
-+        return sq_throwerror(v, _SC("wxArrayString_SetItem: index out of bounds!"));
-+
-+    (*extractor.p0)[index] = *extractor.p2;
-+    return 0;
-+}
-+
-+SQInteger wxFileName_Assign(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxFileName*, const wxString *, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_Assign"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p2 < wxPATH_NATIVE || extractor.p2 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_Assign: format out of range!"));
-+
-+    extractor.p0->Assign(*extractor.p1, wxPathFormat(extractor.p2));
-+    return 0;
-+}
-+
-+template<void (wxFileName::*func)(const wxString&)>
-+SQInteger wxFileName_SetWxString(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxFileName*, const wxString *> extractor(v);
-+    if (!extractor.Process("wxFileName_SetWxString"))
-+        return extractor.ErrorMessage();
-+    (extractor.p0->*func)(*extractor.p1);
-+    return 0;
-+}
-+
-+SQInteger wxFileName_AssignDir(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxFileName*, const wxString *, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_AssignDir"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p2 < wxPATH_NATIVE || extractor.p2 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_Assign: format out of range!"));
-+
-+    extractor.p0->AssignDir(*extractor.p1, wxPathFormat(extractor.p2));
-+    return 0;
-+}
-+
-+template<void (wxFileName::*func)()>
-+SQInteger wxFileName_Action(HSQUIRRELVM v)
-+{
-+    ExtractParams1<wxFileName*> extractor(v);
-+    if (!extractor.Process("wxFileName_Action"))
-+        return extractor.ErrorMessage();
-+    (extractor.p0->*func)();
-+    return 0;
-+}
-+
-+SQInteger wxFileName_GetCwd(HSQUIRRELVM v)
-+{
-+    ExtractParams2<SkipParam, const wxString *> extractor(v);
-+    if (!extractor.Process("wxFileName_GetCwd"))
-+        return extractor.ErrorMessage();
-+
-+    return ConstructAndReturnInstance(v, wxFileName::GetCwd(*extractor.p1));
-+}
-+
-+SQInteger wxFileName_tostring(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxFileName*> extractor(v);
-+    if (!extractor.Process("wxFileName_tostring"))
-+        return extractor.ErrorMessage();
-+    sq_pushstring(v, (const SQChar*)extractor.p0->GetFullPath().mb_str(wxConvUTF8), -1);
-+    return 1;
-+}
-+
-+SQInteger wxFileName_GetDirs(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxFileName*> extractor(v);
-+    if (!extractor.Process("wxFileName_GetDirs"))
-+        return extractor.ErrorMessage();
-+
-+    // FIXME (squirrel) This doesn't matter much, because squirrel doesn't care for constness.
-+    wxArrayString *dirs = &const_cast<wxArrayString&>(extractor.p0->GetDirs());
-+    return ConstructAndReturnNonOwnedPtr(v, dirs);
-+}
-+
-+/// TODO: Probably simplify by removing the generic ClassType support.
-+template<typename ReturnType, typename ClassType, ReturnType (ClassType::*func)() const>
-+SQInteger NoParamReturnWxString(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const ClassType*> extractor(v);
-+    if (!extractor.Process("NoParamReturnWxString"))
-+        return extractor.ErrorMessage();
-+
-+    return ConstructAndReturnInstance(v, (extractor.p0->*func)());
-+}
-+
-+SQInteger wxFileName_GetFullPath(HSQUIRRELVM v)
-+{
-+    ExtractParams2<const wxFileName*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_GetFullPath"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p1 < wxPATH_NATIVE || extractor.p1 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_GetFullPath: format out of range!"));
-+
-+    return ConstructAndReturnInstance(v, extractor.p0->GetFullPath(wxPathFormat(extractor.p1)));
-+}
-+
-+SQInteger wxFileName_GetPath(HSQUIRRELVM v)
-+{
-+    ExtractParams3<const wxFileName*, SQInteger, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_GetPath"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p2 < wxPATH_NATIVE || extractor.p2 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_GetPath: format out of range!"));
-+
-+    return ConstructAndReturnInstance(v, extractor.p0->GetPath(int(extractor.p1),
-+                                                               wxPathFormat(extractor.p2)));
-+}
-+
-+SQInteger wxFileName_InsertDir(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxFileName*, SQInteger, const wxString *> extractor(v);
-+    if (!extractor.Process("wxFileName_InsertDir"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p1 < 0)
-+        return sq_throwerror(v, _SC("wxFileName_InsertDir: parameter before must be non-negative!"));
-+
-+    sq_pushbool(v, extractor.p0->InsertDir(extractor.p1, *extractor.p2));
-+    return 1;
-+}
-+
-+template<bool (wxFileName::*func)(wxPathFormat) const>
-+SQInteger wxFileName_Is(HSQUIRRELVM v)
-+{
-+    /// TODO: Consider adding a modifier which checks for wxPathFormat range.
-+    ExtractParams2<const wxFileName*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_Is"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p1 < wxPATH_NATIVE || extractor.p1 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_Is: format out of range!"));
-+
-+    sq_pushbool(v, (extractor.p0->*func)(wxPathFormat(extractor.p1)));
-+    return 1;
-+}
-+
-+template<bool (wxFileName::*func)() const>
-+SQInteger wxFileName_ReturnBool(HSQUIRRELVM v)
-+{
-+    ExtractParams1<const wxFileName*> extractor(v);
-+    if (!extractor.Process("wxFileName_ReturnBool"))
-+        return extractor.ErrorMessage();
-+    sq_pushbool(v, (extractor.p0->*func)());
-+    return 1;
-+}
-+
-+template<bool (wxFileName::*func)(const wxString &, wxPathFormat)>
-+SQInteger wxFileName_Make(HSQUIRRELVM v)
-+{
-+    /// TODO: Consider adding a modifier which checks for wxPathFormat range.
-+    ExtractParams3<wxFileName*, const wxString *, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_Make"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p2 < wxPATH_NATIVE || extractor.p2 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_Make: format out of range!"));
-+
-+    sq_pushbool(v, (extractor.p0->*func)(*extractor.p1, wxPathFormat(extractor.p2)));
-+    return 1;
-+}
-+
-+SQInteger wxFileName_Normalize(HSQUIRRELVM v)
-+{
-+    /// TODO: Consider adding a modifier which checks for wxPathFormat range.
-+    ExtractParams4<wxFileName*, SQInteger, const wxString *, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_MakeRelativeTo"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p3 < wxPATH_NATIVE || extractor.p3 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_MakeRelativeTo: format out of range!"));
-+
-+    sq_pushbool(v, extractor.p0->Normalize(extractor.p1, *extractor.p2,
-+                                           wxPathFormat(extractor.p3)));
-+    return 1;
-+}
-+
-+SQInteger wxFileName_AppendDir(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxFileName*, const wxString *> extractor(v);
-+    if (!extractor.Process("wxFileName_AppendDir"))
-+        return extractor.ErrorMessage();
-+    sq_pushbool(v, extractor.p0->AppendDir(*extractor.p1));
-+    return 1;
-+}
-+
-+SQInteger wxFileName_RemoveDir(HSQUIRRELVM v)
-+{
-+    ExtractParams2<wxFileName*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_RemoveDir"))
-+        return extractor.ErrorMessage();
-+    extractor.p0->RemoveDir(extractor.p1);
-+    return 0;
-+}
-+
-+SQInteger wxFileName_RemoveLastDir(HSQUIRRELVM v)
-+{
-+    ExtractParams1<wxFileName*> extractor(v);
-+    if (!extractor.Process("wxFileName_RemoveLastDir"))
-+        return extractor.ErrorMessage();
-+    extractor.p0->RemoveLastDir();
-+    return 0;
-+}
-+
-+SQInteger wxFileName_SameAs(HSQUIRRELVM v)
-+{
-+    ExtractParams3<wxFileName*, const wxFileName*, SQInteger> extractor(v);
-+    if (!extractor.Process("wxFileName_SameAs"))
-+        return extractor.ErrorMessage();
-+
-+    if (extractor.p2 < wxPATH_NATIVE || extractor.p2 >= wxPATH_MAX)
-+        return sq_throwerror(v, _SC("wxFileName_MakeRelativeTo: format out of range!"));
-+
-+    sq_pushbool(v, extractor.p0->SameAs(*extractor.p1, wxPathFormat(extractor.p2)));
-+    return 1;
-+}
-+
-+void Register_wxTypes(HSQUIRRELVM v)
-+{
-+    PreserveTop preserveTop(v);
-+    sq_pushroottable(v);
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        return SqPlus::ReturnCopy(v, self.BeforeFirst(static_cast<wxChar>(ExtractChar(v, sa, 2))));
-+        // register wxString
-+        const SQInteger classDecl = CreateClassDecl<wxString>(v);
-+        BindMethod(v, _SC("constructor"), wxString_ctor, _SC("wxString::constructor"));
-+        BindDefaultClone<wxString>(v);
-+        BindMethod(v, _SC("_add"), wxString_OpAdd, _SC("wxString::operator+"));
-+        BindMethod(v, _SC("_cmp"), wxString_OpCompare, _SC("wxString::operator=="));
-+        BindMethod(v, _SC("Compare"), wxString_OpCompare, _SC("wxString::Compare"));
-+        BindMethod(v, _SC("_tostring"), wxString_OpToString, _SC("wxString::_tostring"));
-+        BindMethod(v, _SC("Find"), wxString_Find, _SC("wxString::Find"));
-+        BindMethod(v, _SC("Matches"), wxString_Matches, _SC("wxString::Matches"));
-+        BindMethod(v, _SC("AddChar"), wxString_AddChar, _SC("wxString::AddChar"));
-+        BindMethod(v, _SC("GetChar"), wxString_GetChar, _SC("wxString::GetChar"));
-+        BindMethod(v, _SC("Set"), wxString_Set, _SC("wxString::Set"));
-+        BindMethod(v, _SC("IsEmpty"), wxString_IsEmpty, _SC("wxString::IsEmpty"));
-+        BindMethod(v, _SC("Length"), wxString_Length, _SC("wxString::Length"));
-+        BindMethod(v, _SC("length"), wxString_Length, _SC("wxString::length"));
-+        BindMethod(v, _SC("len"), wxString_Length, _SC("wxString::len"));
-+        BindMethod(v, _SC("size"), wxString_Length, _SC("wxString::size"));
-+
-+        BindMethod(v, _SC("Lower"), wxString_NoParamReturnWxString<&wxString::MakeLower>,
-+                   _SC("wxString::Lower"));
-+        BindMethod(v, _SC("MakeLower"), wxString_NoParamReturnWxString<&wxString::MakeLower>,
-+                   _SC("wxString::MakeLower"));
-+        BindMethod(v, _SC("LowerCase"), wxString_NoParamNoReturn<&wxString::LowerCase>,
-+                   _SC("wxString::LowerCase"));
-+
-+        BindMethod(v, _SC("Upper"), wxString_NoParamReturnWxString<&wxString::MakeUpper>,
-+                   _SC("wxString::Upper"));
-+        BindMethod(v, _SC("MakeUpper"), wxString_NoParamReturnWxString<&wxString::MakeUpper>,
-+                   _SC("wxString::MakeUpper"));
-+        BindMethod(v, _SC("UpperCase"), wxString_NoParamNoReturn<&wxString::UpperCase>,
-+                   _SC("wxString::UpperCase"));
-+
-+        BindMethod(v, _SC("Mid"), wxString_Mid, _SC("wxString::Mid"));
-+        BindMethod(v, _SC("Remove"), wxString_Remove, _SC("wxString::Remove"));
-+        BindMethod(v, _SC("RemoveLast"), wxString_RemoveLast, _SC("wxString::RemoveLast"));
-+        BindMethod(v, _SC("Replace"), wxString_Replace, _SC("wxString::Replace"));
-+        BindMethod(v, _SC("Left"), wxString_LeftRight<&wxString::Left>, _SC("wxString::Left"));
-+        BindMethod(v, _SC("Right"), wxString_LeftRight<&wxString::Right>, _SC("wxString::Right"));
-+
-+        BindMethod(v, _SC("AfterFirst"), wxString_DoAfterFirstLast<&wxString::AfterFirst>,
-+                   _SC("wxString::AfterFirst"));
-+        BindMethod(v, _SC("AfterLast"), wxString_DoAfterFirstLast<&wxString::AfterLast>,
-+                   _SC("wxString::AfterLast"));
-+        BindMethod(v, _SC("BeforeFirst"), wxString_DoBeforeFirstLast<&wxString::BeforeFirst>,
-+                   _SC("wxString::BeforeFirst"));
-+        BindMethod(v, _SC("BeforeLast"), wxString_DoBeforeFirstLast<&wxString::BeforeLast>,
-+                   _SC("wxString::BeforeLast"));
-+
-+        sq_newslot(v, classDecl, SQFalse); // Put the class in the root table. This must be last!
-     }
--    SQInteger wxString_BeforeLast(HSQUIRRELVM v)
-+
-+    BindMethod(v, _SC("_T"), static_T, nullptr);
-+    BindMethod(v, _SC("_"), static_, nullptr);
-+    BindMethod(v, _SC("wxString_ToLong"), wxString_ToLong, nullptr);
-+
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        return SqPlus::ReturnCopy(v, self.BeforeLast(static_cast<wxChar>(ExtractChar(v, sa, 2))));
-+        // Register wxColour
-+        const SQInteger classDecl = CreateClassDecl<wxColour>(v);
-+        BindMethod(v, _SC("constructor"), wxColour_ctor, _SC("wxColour::constructor"));
-+        BindDefaultClone<wxColour>(v);
-+
-+        BindMethod(v, _SC("_tostring"), wxColour_ToString, _SC("wxColour::_tostring"));
-+        BindMethod(v, _SC("Blue"), NoParamGetterInt<wxColour::ChannelType, wxColour, &wxColour::Blue>, _SC("wxColour::Blue"));
-+        BindMethod(v, _SC("Green"), NoParamGetterInt<wxColour::ChannelType, wxColour, &wxColour::Green>, _SC("wxColour::Green"));
-+        BindMethod(v, _SC("Red"), NoParamGetterInt<wxColour::ChannelType, wxColour, &wxColour::Red>, _SC("wxColour::Red"));
-+        BindMethod(v, _SC("Alpha"), NoParamGetterInt<wxColour::ChannelType, wxColour, &wxColour::Alpha>, _SC("wxColour::Alpha"));
-+        BindMethod(v, _SC("IsOk"), wxColour_IsOk, _SC("wxColour::IsOk"));
-+        BindMethod(v, _SC("Set"), wxColour_Set, _SC("wxColour::Set"));
-+
-+        sq_newslot(v, classDecl, SQFalse); // Put the class in the root table. This must be last!
-     }
--    SQInteger wxString_Replace(HSQUIRRELVM v)
-+
-     {
--        StackHandler sa(v);
--        wxString& self = *SqPlus::GetInstance<wxString,false>(v, 1);
--        wxString from = *SqPlus::GetInstance<wxString,false>(v, 2);
--        wxString to = *SqPlus::GetInstance<wxString,false>(v, 3);
--        bool all = true;
--        if (sa.GetParamCount() == 4)
--            all = sa.GetBool(4);
--        return sa.Return((SQInteger)self.Replace(from, to, all));
-+        // Register wxPoint
-+        const SQInteger classDecl = CreateClassDecl<wxPoint>(v);
-+        BindEmptyCtor<wxPoint>(v);
-+        BindDefaultClone<wxPoint>(v);
-+        BindMethod(v, _SC("_tostring"), wxPointSize_tostring<wxPoint>, _SC("wxPoint::_tostring"));
-+        BindMethod(v, _SC("_cmp"), wxPoint_cmp, _SC("wxPoint::_cmp"));
-+        BindMethod(v, _SC("_get"), wxPoint_get, _SC("wxPoint::_get"));
-+        BindMethod(v, _SC("_set"), wxPoint_set, _SC("wxPoint::_set"));
-+
-+        sq_newslot(v, classDecl, SQFalse); // Put the class in the root table. This must be last!
-     }
- 
--////////////////////////////////////////////////////////////////////////////////
--
--    void Register_wxTypes()
-     {
--#if wxCHECK_VERSION(3, 0, 0) && !wxUSE_STD_CONTAINERS
--        typedef const wxString& (wxArrayString::*wxArrayStringItem)(size_t nIndex) const;
--#else
--        typedef wxString& (wxArrayString::*wxArrayStringItem)(size_t nIndex) const;
--#endif
--        typedef size_t (wxArrayString::*wxArrayStrinGetCount)() const;
-+        // Register wxSize
-+        const SQInteger classDecl = CreateClassDecl<wxSize>(v);
-+        BindEmptyCtor<wxSize>(v);
-+        BindDefaultClone<wxSize>(v);
-+        BindMethod(v, _SC("_tostring"), wxPointSize_tostring<wxSize>, _SC("wxSize::_tostring"));
-+        BindMethod(v, _SC("GetWidth"), NoParamGetterInt<int, wxSize, &wxSize::GetWidth>,
-+                   _SC("wxSize::GetWidth"));
-+        BindMethod(v, _SC("GetHeight"), NoParamGetterInt<int, wxSize, &wxSize::GetHeight>,
-+                   _SC("wxSize::GetHeight"));
-+        BindMethod(v, _SC("Set"), wxSize_Set, _SC("wxSize::Set"));
-+        BindMethod(v, _SC("SetHeight"), wxSize_SetWidthHeight<&wxSize::SetHeight>,
-+                   _SC("wxSize::SetHeight"));
-+        BindMethod(v, _SC("SetWidth"), wxSize_SetWidthHeight<&wxSize::SetWidth>,
-+                   _SC("wxSize::SetWidth"));
- 
--        ///////////////////
--        // wxArrayString //
--        ///////////////////
--        SqPlus::SQClassDef<wxArrayString>("wxArrayString").
--                emptyCtor().
--                func(&wxArrayString::Add, "Add").
--                staticFunc(&wxArrayString_Clear, "Clear").
--                staticFuncVarArgs(&wxArrayString_Index, "Index", "*").
--                func<wxArrayStrinGetCount>(&wxArrayString::GetCount, "GetCount").
--                func<wxArrayStringItem>(&wxArrayString::Item, "Item").
--                staticFuncVarArgs(&wxArrayString_SetItem, "SetItem", "*");
-+        sq_newslot(v, classDecl, SQFalse); // Put the class in the root table. This must be last!
-+    }
- 
--        //////////////
--        // wxColour //
--        //////////////
--        typedef void(wxColour::*WXC_SET)(const unsigned char, const unsigned char, const unsigned char, const unsigned char);
--        typedef bool (wxColour::*WXC_ISOK)() const;
--        SqPlus::SQClassDef<wxColour>("wxColour").
--                emptyCtor().
--                staticFuncVarArgs(&wxColour_OpToString, "_tostring", "").
--                func(&wxColour::Blue, "Blue").
--                func(&wxColour::Green, "Green").
--                func(&wxColour::Red, "Red").
--                func<WXC_ISOK>(&wxColour::IsOk, "IsOk").
--                func<WXC_SET>(&wxColour::Set, "Set");
-+    {
-+        // Register wxSize
-+        const SQInteger classDecl = CreateClassDecl<wxArrayString>(v);
-+        BindEmptyCtor<wxArrayString>(v);
-+        BindDefaultClone<wxArrayString>(v);
-+        BindMethod(v, _SC("Add"), wxArrayString_Add, _SC("wxArrayString::Add"));
-+        BindMethod(v, _SC("Clear"), wxArrayString_Clear, _SC("wxArrayString::Clear"));
-+        BindMethod(v, _SC("Index"), wxArrayString_Index, _SC("wxArrayString::Index"));
-+        BindMethod(v, _SC("GetCount"),
-+                   NoParamGetterInt<size_t, wxArrayString, &wxArrayString::GetCount>,
-+                   _SC("wxArrayString::GetCount"));
-+        BindMethod(v, _SC("Item"), wxArrayString_Item, _SC("wxArrayString::Item"));
-+        BindMethod(v, _SC("SetItem"), wxArrayString_SetItem, _SC("wxArrayString::SetItem"));
- 
--        ////////////////
--        // wxFileName //
--        ////////////////
--        typedef void(wxFileName::*WXFN_ASSIGN_FN)(const wxFileName&);
--        typedef void(wxFileName::*WXFN_ASSIGN_STR)(const wxString&, wxPathFormat);
--        typedef wxString(wxFileName::*WXFN_GETPATH)(int, wxPathFormat)const;
--        typedef bool(wxFileName::*WXFN_SETCWD)()const;
--        typedef bool(wxFileName::*WXFN_SETCWD)()const;
--        typedef bool(wxFileName::*WXFN_ISFILEWRITEABLE)()const;
-+        sq_newslot(v, classDecl, SQFalse); // Put the class in the root table. This must be last!
-+    }
- 
--        SqPlus::SQClassDef<wxFileName>("wxFileName").
--                emptyCtor().
--                staticFuncVarArgs(&wxFileName_OpToString, "_tostring", "").
--                func<WXFN_ASSIGN_FN>(&wxFileName::Assign, "Assign").
--                func<WXFN_ASSIGN_STR>(&wxFileName::Assign, "Assign").
--                func(&wxFileName::AssignCwd, "AssignCwd").
--                func(&wxFileName::AssignDir, "AssignDir").
--                func(&wxFileName::AssignHomeDir, "AssignHomeDir").
--                func(&wxFileName::Clear, "Clear").
--                func(&wxFileName::ClearExt, "ClearExt").
--                staticFunc(&wxFileName::GetCwd, "GetCwd").
--                func(&wxFileName::GetDirCount, "GetDirCount").
--                func(&wxFileName::GetDirs, "GetDirs").
--                func(&wxFileName::GetExt, "GetExt").
--                func(&wxFileName::GetFullName, "GetFullName").
--                func(&wxFileName::GetFullPath, "GetFullPath").
--                func(&wxFileName::GetLongPath, "GetLongPath").
--                func(&wxFileName::GetName, "GetName").
--                func<WXFN_GETPATH>(&wxFileName::GetPath, "GetPath").
--                func(&wxFileName::GetShortPath, "GetShortPath").
--                func(&wxFileName::GetVolume, "GetVolume").
--                func(&wxFileName::HasExt, "HasExt").
--                func(&wxFileName::HasName, "HasName").
--                func(&wxFileName::HasVolume, "HasVolume").
--                func(&wxFileName::InsertDir, "InsertDir").
--                func(&wxFileName::IsAbsolute, "IsAbsolute").
--                func(&wxFileName::IsOk, "IsOk").
--                func(&wxFileName::IsRelative, "IsRelative").
--                func(&wxFileName::IsDir, "IsDir").
--                func(&wxFileName::MakeAbsolute, "MakeAbsolute").
--                func(&wxFileName::MakeRelativeTo, "MakeRelativeTo").
--                func(&wxFileName::Normalize, "Normalize").
--                func(&wxFileName::AppendDir, "AppendDir").
--                func(&wxFileName::PrependDir, "PrependDir").
--                func(&wxFileName::RemoveDir, "RemoveDir").
--                func(&wxFileName::RemoveLastDir, "RemoveLastDir").
--                func(&wxFileName::SameAs, "SameAs").
--                func<WXFN_SETCWD>(&wxFileName::SetCwd, "SetCwd").
--                func(&wxFileName::SetExt, "SetExt").
--                func(&wxFileName::SetEmptyExt, "SetEmptyExt").
--                func(&wxFileName::SetFullName, "SetFullName").
--                func(&wxFileName::SetName, "SetName").
--                func(&wxFileName::SetVolume, "SetVolume").
--                func<WXFN_ISFILEWRITEABLE>(&wxFileName::IsFileWritable,"IsFileWritable");
-+    {
-+        // Register wxFileName
-+        const SQInteger classDecl = CreateClassDecl<wxFileName>(v);
-+        BindEmptyCtor<wxFileName>(v);
-+        BindDefaultClone<wxFileName>(v);
-+        BindMethod(v, _SC("_tostring"), wxFileName_tostring, _SC("wxFileName::_tostring"));
-+        BindMethod(v, _SC("Assign"), wxFileName_Assign, _SC("wxFileName::Assign"));
-+        BindMethod(v, _SC("AssignCwd"), wxFileName_SetWxString<&wxFileName::AssignCwd>,
-+                   _SC("wxFileName::AssignCwd"));
-+        BindMethod(v, _SC("AssignDir"), wxFileName_AssignDir, _SC("wxFileName::AssignDir"));
-+        BindMethod(v, _SC("AssignHomeDir"), wxFileName_Action<&wxFileName::AssignHomeDir>,
-+                   _SC("wxFileName::AssignHomeDir"));
-+        BindMethod(v, _SC("Clear"), wxFileName_Action<&wxFileName::Clear>, _SC("wxFileName::Clear"));
-+        BindMethod(v, _SC("ClearExt"), wxFileName_Action<&wxFileName::ClearExt>, _SC("wxFileName::ClearExt"));
-+        BindStaticMethod(v, _SC("GetCwd"), wxFileName_GetCwd, _SC("wxFileName::GetCwd"));
-+        BindMethod(v, _SC("GetDirCount"),
-+                   NoParamGetterInt<size_t, wxFileName, &wxFileName::GetDirCount>,
-+                   _SC("wxFileName::GetDirCount"));
-+        BindMethod(v, _SC("GetDirs"), wxFileName_GetDirs, _SC("wxFileName::GetDirs"));
-+        BindMethod(v, _SC("GetExt"),
-+                   NoParamReturnWxString<wxString, wxFileName, &wxFileName::GetExt>,
-+                   _SC("wxFileName::GetExt"));
-+        BindMethod(v, _SC("GetFullName"),
-+                   NoParamReturnWxString<wxString, wxFileName, &wxFileName::GetFullName>,
-+                   _SC("wxFileName::GetFullName"));
-+        BindMethod(v, _SC("GetFullPath"), wxFileName_GetFullPath, _SC("wxFileName::GetFullPath"));
-+        BindMethod(v, _SC("GetLongPath"),
-+                   NoParamReturnWxString<wxString, wxFileName, &wxFileName::GetLongPath>,
-+                   _SC("wxFileName::GetLongPath"));
-+        BindMethod(v, _SC("GetName"),
-+                   NoParamReturnWxString<wxString, wxFileName, &wxFileName::GetName>,
-+                   _SC("wxFileName::GetName"));
-+        BindMethod(v, _SC("GetPath"), wxFileName_GetPath, _SC("wxFileName::GetPath"));
-+        BindMethod(v, _SC("GetShortPath"),
-+                   NoParamReturnWxString<wxString, wxFileName, &wxFileName::GetShortPath>,
-+                   _SC("wxFileName::GetShortPath"));
-+        BindMethod(v, _SC("GetVolume"),
-+                   NoParamReturnWxString<wxString, wxFileName, &wxFileName::GetVolume>,
-+                   _SC("wxFileName::GetVolume"));
-+        BindMethod(v, _SC("HasExt"), wxFileName_ReturnBool<&wxFileName::HasExt>,
-+                   _SC("wxFileName::HasExt"));
-+        BindMethod(v, _SC("HasName"), wxFileName_ReturnBool<&wxFileName::HasName>,
-+                   _SC("wxFileName::HasName"));
-+        BindMethod(v, _SC("HasVolume"), wxFileName_ReturnBool<&wxFileName::HasVolume>,
-+                   _SC("wxFileName::HasVolume"));
-+        BindMethod(v, _SC("InsertDir"), wxFileName_InsertDir, _SC("wxFileName::InsertDir"));
-+        BindMethod(v, _SC("IsAbsolute"), wxFileName_Is<&wxFileName::IsAbsolute>,
-+                   _SC("wxFileName::IsAbsolute"));
-+        BindMethod(v, _SC("IsOk"), wxFileName_ReturnBool<&wxFileName::IsOk>,
-+                   _SC("wxFileName::IsOk"));
-+        BindMethod(v, _SC("IsRelative"), wxFileName_Is<&wxFileName::IsRelative>,
-+                   _SC("wxFileName::IsRelative"));
-+        BindMethod(v, _SC("IsDir"), wxFileName_ReturnBool<&wxFileName::IsDir>,
-+                   _SC("wxFileName::IsDir"));
-+        BindMethod(v, _SC("MakeAbsolute"), wxFileName_Make<&wxFileName::MakeAbsolute>,
-+                   _SC("wxFileName::MakeAbsolute"));
-+        BindMethod(v, _SC("MakeRelativeTo"), wxFileName_Make<&wxFileName::MakeRelativeTo>,
-+                   _SC("wxFileName::MakeRelativeTo"));
-+        BindMethod(v, _SC("Normalize"), wxFileName_Normalize, _SC("wxFileName::Normalize"));
-+        BindMethod(v, _SC("AppendDir"), wxFileName_AppendDir, _SC("wxFileName::AppendDir"));
-+        BindMethod(v, _SC("PrependDir"), wxFileName_SetWxString<&wxFileName::PrependDir>,
-+                   _SC("wxFileName::PrependDir"));
-+        BindMethod(v, _SC("RemoveDir"), wxFileName_RemoveDir, _SC("wxFileName::RemoveDir"));
-+        BindMethod(v, _SC("RemoveLastDir"), wxFileName_RemoveLastDir,
-+                   _SC("wxFileName::RemoveLastDir"));
-+        BindMethod(v, _SC("SameAs"), wxFileName_SameAs, _SC("wxFileName::SameAs"));
-+        BindMethod(v, _SC("SetCwd"), wxFileName_ReturnBool<&wxFileName::SetCwd>,
-+                   _SC("wxFileName::SetCwd"));
-+        BindMethod(v, _SC("SetExt"), wxFileName_SetWxString<&wxFileName::SetExt>,
-+                   _SC("wxFileName::SetExt"));
-+        BindMethod(v, _SC("SetEmptyExt"), wxFileName_Action<&wxFileName::SetEmptyExt>, _SC("wxFileName::SetEmptyExt"));
-+        BindMethod(v, _SC("SetFullName"), wxFileName_SetWxString<&wxFileName::SetFullName>,
-+                   _SC("wxFileName::SetFullName"));
-+        BindMethod(v, _SC("SetName"), wxFileName_SetWxString<&wxFileName::SetName>,
-+                   _SC("wxFileName::SetName"));
-+        BindMethod(v, _SC("SetVolume"), wxFileName_SetWxString<&wxFileName::SetVolume>,
-+                   _SC("wxFileName::SetVolume"));
- 
--        /////////////
--        // wxPoint //
--        /////////////
--        SqPlus::SQClassDef<wxPoint>("wxPoint").
--                emptyCtor().
--                staticFuncVarArgs(&wxPointSize_OpToString<wxPoint>, "_tostring", "").
--                staticFuncVarArgs(&wxPoint_OpCmp, "_cmp", "*").
--                var(&wxPoint::x, "x").
--                var(&wxPoint::y, "y");
-+        BindMethod(v, _SC("IsFileWritable"), wxFileName_ReturnBool<&wxFileName::IsFileWritable>,
-+                   _SC("wxFileName::IsFileWritable"));
-+        BindMethod(v, _SC("IsFileReadable"), wxFileName_ReturnBool<&wxFileName::IsFileReadable>,
-+                   _SC("wxFileName::IsFileReadable"));
-+        BindMethod(v, _SC("IsFileExecutable"), wxFileName_ReturnBool<&wxFileName::IsFileExecutable>,
-+                   _SC("wxFileName::IsFileExecutable"));
- 
--        ////////////
--        // wxSize //
--        ////////////
--        typedef void(wxSize::*WXS_SET)(int, int);
--        typedef void(wxSize::*WXS_SETH)(int);
--        typedef void(wxSize::*WXS_SETW)(int);
--        SqPlus::SQClassDef<wxSize>("wxSize").
--                emptyCtor().
--                staticFuncVarArgs(&wxPointSize_OpToString<wxSize>, "_tostring", "").
--                func(&wxSize::GetWidth, "GetWidth").
--                func(&wxSize::GetHeight, "GetHeight").
--                func<WXS_SET>(&wxSize::Set, "Set").
--                func<WXS_SETH>(&wxSize::SetHeight, "SetHeight").
--                func<WXS_SETW>(&wxSize::SetWidth, "SetWidth");
-+        BindMethod(v, _SC("IsDirWritable"), wxFileName_ReturnBool<&wxFileName::IsDirWritable>,
-+                   _SC("wxFileName::IsDirWritable"));
-+        BindMethod(v, _SC("IsDirReadable"), wxFileName_ReturnBool<&wxFileName::IsDirReadable>,
-+                   _SC("wxFileName::IsDirReadable"));
- 
--        //////////////
--        // wxString //
--        //////////////
--        SqPlus::RegisterGlobal(&static_,  "_");
--        SqPlus::RegisterGlobal(&static_T, "_T");
-+        sq_newslot(v, classDecl, SQFalse); // Put the class in the root table. This must be last!
-+    }
- 
--        typedef int(wxString::*WXSTR_FIRST_STR)(const wxString&)const;
--        typedef wxString&(wxString::*WXSTR_REMOVE_2)(size_t pos, size_t len);
-+    sq_pop(v, 1); // Pop root table.
-+}
- 
--        SqPlus::SQClassDef<wxString>("wxString").
--                emptyCtor().
--                staticFuncVarArgs(&wxString_Set, "Set", "*").
--                staticFuncVarArgs(&wxString_OpAdd, "_add", "*").
--                staticFuncVarArgs(&wxString_OpCmp, "_cmp", "*").
--                staticFuncVarArgs(&wxString_OpCmp, "Compare", "*").
--                staticFuncVarArgs(&wxString_OpToString, "_tostring", "").
--                func<WXSTR_FIRST_STR>(&wxString::First, "Find").
--                staticFuncVarArgs(&wxString_Matches, "Matches", "*").
--                staticFuncVarArgs(&wxString_AddChar, "AddChar", "n").
--                staticFuncVarArgs(&wxString_GetChar, "GetChar", "n").
--                func(&wxString::IsEmpty, "IsEmpty").
--                func(&wxString::Length, "Length").
--                func(&wxString::Length, "length").
--                func(&wxString::Length, "len").
--                func(&wxString::Length, "size").
--                func(&wxString::Lower, "Lower").
--                func(&wxString::LowerCase, "LowerCase").
--                func(&wxString::MakeLower, "MakeLower").
--                func(&wxString::Upper, "Upper").
--                func(&wxString::UpperCase, "UpperCase").
--                func(&wxString::MakeUpper, "MakeUpper").
--                func(&wxString::Mid, "Mid").
--                func<WXSTR_REMOVE_2>(&wxString::Remove, "Remove").
--                func(&wxString::RemoveLast, "RemoveLast").
--                staticFuncVarArgs(&wxString_Replace, "Replace", "*").
--                func(&wxString::Right, "Right").
--                func(&wxString::Left, "Left").
--                staticFuncVarArgs(&wxString_AfterFirst, "AfterFirst", "*").
--                staticFuncVarArgs(&wxString_AfterLast, "AfterLast", "*").
--                staticFuncVarArgs(&wxString_BeforeFirst, "BeforeFirst", "*").
--                staticFuncVarArgs(&wxString_BeforeLast, "BeforeLast", "*");
--    }
--};
-+} // namespace ScriptBindings
-



More information about the arch-commits mailing list