On 4/18/06, Ray Gilbert <[EMAIL PROTECTED]> wrote: > The overload tag arglist should be the class tag - I thought > s_wxluaarg_UserData should only be for unknown raw user data
That sounds better. I guess I forgot, I've changed it and then discovered that I had to do a little more tweaking since different overloaded functions can have their own #if conditions. Everything seems to work now and I'll add some more of the overloaded functions tonight. -John Labenski > static int LUACALL wxPoint_constructor(lua_State *L) > { > // function overload table > static WXLUAMETHOD overloaded_methods[] = > { > { LuaConstructor, "wxPoint", wxPoint_constructor1, 2, 2, { > &s_wxluaarg_Number, &s_wxluaarg_Number, 0 } }, > { LuaConstructor, "wxPointCopy", wxPointCopy_constructor, 1, 1, > { &s_wxluatag_wxPoint, 0 } }, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > }; > static int overloaded_methodCount = > sizeof(overloaded_methods)/sizeof(overloaded_methods[0]); > wxLuaState wxlState(L); > return wxlState.CallOverloadedFunction(overloaded_methods, > overloaded_methodCount); > } > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of John > Labenski > Sent: Tuesday, 18 April 2006 15:31 > To: wxlua-users@lists.sourceforge.net > Subject: Re: [Wxlua-users] Re: Added Overloaded Function Capability To > wxlstate > > On 4/17/06, Ray Gilbert <[EMAIL PROTECTED]> wrote: > > I would overwrite it - just note how we should generate overloaded > > function bindings. > > > > I was thinking that when genwxbind.lua member.AltName ~= member.Name > we > > track overloads of member.Name and generate appropriate code. > > All done! I hope I didn't step on your toes, but I had some free time > and figured I've give adding it to genwxbind.lua a shot. > > You have to use a new "%overload" tag in the bindings. This is because > as you go through the .i files you don't know if you'll have duplicate > functions until after you've already written the binding code for the > earlier function. So if you had wxPoint(int, int) and wxPoint(const > wxPoint&) and *didn't* use the "%constructor" tag (or for members the > %rename tag) there would be two functions > wxPoint_constructor(lua_State*) and obviously you get a compile error. > I track these and just add a number from 1 to whatever so there's no > name clashes. Additionally the WXLUAMETHOD map would have already been > created with a "wxPoint" constructor in it and you'd never get to the > overload function. > > Currently I've tested it with the wxPen constructors and > wxPen::SetColour and it seems to work nicely. You can see the code in > modules/wxbind/src/gdi.cpp bindings/wxwidgets/gdi.i. > > I had to tweak the args in wxLuaState::CallOverloadedFunction since if > you call a member function the "self" is the first arg and we don't > want that. Other than that it works great and the error message is > really nice. > > For testing you can use wxLuaEdit and try these out > a = wx.wxPen(wx.wxRED, 1, 1) > b = wx.wxPen(a) > b:SetColour("RED") > print(b:GetColour():Red()) > b:SetColour(0,0,0) > print(b:GetColour():Red()) > print(a:GetColour():Red()) > > 255 > 0 > 255 > > -- test out a mistake > b:SetColour(1,2,3,4) > > Err: lua: Error while running chunk > wxLua overloaded function SetColour(number, number, number, number) > has invalid argument 4 on method 01 > wxLua Function Overload Table: > 01. SetColour(number, number, number) > 02. SetColour(string) > 03. SetColour(userdata) > > stack traceback: > [C]: in function 'SetColour' > [string "shell"]:1: in main chunk > > > Thanks, > John Labenski > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] On Behalf Of John > > Labenski > > Sent: Tuesday, 18 April 2006 07:31 > > To: wxlua-users@lists.sourceforge.net > > Subject: Re: [Wxlua-users] Re: Added Overloaded Function Capability To > > wxlstate > > > > On 4/17/06, Ray Gilbert <[EMAIL PROTECTED]> wrote: > > > Yep, I know that it will be over written. Just added it so you could > > see proof of concept. > > > > > > It should be added to genwxbind, but I will leave that to later. > > > > I need to overwrite it to fix some issues w/ wxWidgets CVS head. > > Should I keep it or just let it get overwritten? > > > > What do the bindings look like for them, is this ok or is there some > > sort of tag for it? > > > > %class ... wxColour > > wxColour(const wxString& name) > > wxColour(int r, int g, int b) > > wxColour(const wxColour& colour) > > // and for functions > > bool DoStuff(int i) > > bool DoStuff(const wxString& i) > > > > Thanks, > > John Labenski > > > > > > > > > > > From: [EMAIL PROTECTED] on behalf of Francesco > > Montorsi > > > Sent: Tue 18/04/2006 12:08 AM > > > To: wxlua-users@lists.sourceforge.net > > > Subject: [Wxlua-users] Re: Added Overloaded Function Capability To > > wxlstate > > > > > > > > > > > > Hi, > > > > > > Ray Gilbert ha scritto: > > > > I have added the ability to add overloaded functions to wxLua > > > indeed this feature looks great ! > > > > > > > - added > > > > test directly into wx_bind.cpp > > > > > > > > #define TESTOVERLOAD > > > > #if defined(TESTOVERLOAD) > > > > // Test Overloaded Function Binding > > > > // a std function binding > > > > static int LUACALL wx_TestOverLoad_Int(lua_State *L) > > > > { > > > > wxLuaState wxlState(L); > > > > wxString returns; > > > > int argCount = lua_gettop(L); > > > > int value = (argCount >= 1 ? (int)wxlState.GetNumberType(1) : > > 0); > > > > returns = wxString::Format(wxT("wx.TestOverLoad(%d) called C > > Function > > > > wx_TestOverLoad_Int"), value); > > > > lua_pushstring(L, wx2lua(returns) ); > > > > return 1; > > > > } > > > > // a std function binding > > > > static int LUACALL wx_TestOverLoad_String(lua_State *L) > > > > { > > > > wxLuaState wxlState(L); > > > > wxString returns; > > > > int argCount = lua_gettop(L); > > > > wxString value = (argCount >= 1 ? > > lua2wx(wxlState.GetStringType(1)) > > > > : wxEmptyString); > > > I did a small fix in line above: > > > > > > // wxT("") is required instead of wxEmptyString otherwise GCC > > says: > > > // ../modules/wxbind/src/wx_bind.cpp:52: error: operands to ?: > > > have different types > > > wxString value = (argCount >= 1 ? > > lua2wx(wxlState.GetStringType(1)) > > > : wxT("")); > > > > > > and just committed it; however I wonder: wx_bind.cpp is regenerated > by > > > genwxbind.lua... so, adding this code directly in wx_bind.cpp > doesn't > > > mean that next time it's regenerated, the code will be lost ? > > > > > > Francesco > > > > > > > > > > > > ------------------------------------------------------- > > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > > language > > > that extends applications into web and mobile media. Attend the live > > webcast > > > and join the prime developer group breaking into this new coding > > territory! > > > > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 > > > _______________________________________________ > > > Wxlua-users mailing list > > > Wxlua-users@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/wxlua-users > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > > language > > that extends applications into web and mobile media. Attend the live > > webcast > > and join the prime developer group breaking into this new coding > > territory! > > http://sel.as-us.falkag.net/sel?cmd=k&kid0944&bid$1720&dat1642 > > _______________________________________________ > > Wxlua-users mailing list > > Wxlua-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wxlua-users > > > > > > ------------------------------------------------------- > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > language > > that extends applications into web and mobile media. Attend the live > webcast > > and join the prime developer group breaking into this new coding > territory! > > http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642 > > _______________________________________________ > > Wxlua-users mailing list > > Wxlua-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wxlua-users > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by xPML, a groundbreaking scripting > language > that extends applications into web and mobile media. Attend the live > webcast > and join the prime developer group breaking into this new coding > territory! > http://sel.as-us.falkag.net/sel?cmd=k&kid0944&bid$1720&dat1642 > _______________________________________________ > Wxlua-users mailing list > Wxlua-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wxlua-users > > > ------------------------------------------------------- > This SF.Net email is sponsored by xPML, a groundbreaking scripting language > that extends applications into web and mobile media. Attend the live webcast > and join the prime developer group breaking into this new coding territory! > http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642 > _______________________________________________ > Wxlua-users mailing list > Wxlua-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wxlua-users > ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid0944&bid$1720&dat1642 _______________________________________________ Wxlua-users mailing list Wxlua-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wxlua-users