[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