Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 3138


Ignore:
Timestamp:
Jun 10, 2009, 4:01:42 PM (15 years ago)
Author:
rgrieder
Message:

Tolua update to v1.0.93 is not working properly and I would not know how to fix it. I have created a patch however, just in case we need it after all.

Location:
code/branches/pch/src/tolua
Files:
1 deleted
27 edited

Legend:

Unmodified
Added
Removed
  • code/branches/pch/src/tolua/CMakeLists.txt

    r3127 r3138  
    5454  ORXONOX_EXTERNAL
    5555  VERSION
    56     1.0.93
     56    1.0.92
    5757  LINK_LIBRARIES
    5858    ${LUA_LIBRARIES}
     
    8888  ${CMAKE_CURRENT_SOURCE_DIR}/lua/class.lua
    8989  ${CMAKE_CURRENT_SOURCE_DIR}/lua/clean.lua
    90   ${CMAKE_CURRENT_SOURCE_DIR}/lua/template_class.lua
    9190  ${CMAKE_CURRENT_SOURCE_DIR}/lua/doit.lua
    9291
  • code/branches/pch/src/tolua/README

    r3127 r3138  
    1414
    1515* Availability
     16  tolua is freely available; you can redistribute it and/or modify it.
     17  The software provided hereunder is on an "as is" basis, and
     18  the author has no obligation to provide maintenance, support,
     19  updates, enhancements, or modifications.
    1620
    17   tolua++ is freely available for both academic and commercial purposes.
    18   See COPYRIGHT for details.
    19 
    20   tolua++ can be downloaded from the sites below:
     21  tolua can be downloaded from the sites below:
    2122            http://www.codenix.com/~tolua/
     23            http://www.codenix.com/~tolua/tolua++-1.0.tar.bz2
    2224
    2325* Installation
  • code/branches/pch/src/tolua/VERSION

    r3127 r3138  
    1 Tolua++ v1.0.93 with changes:
     1Tolua++ v1.0.92 with changes:
    22
    33- Exception handling by CEGUI team
  • code/branches/pch/src/tolua/all-5.0.lua

    r3127 r3138  
    1818dofile(path.."lua/class.lua")
    1919dofile(path.."lua/clean.lua")
    20 dofile(path.."lua/template_class.lua")
    2120--dofile(path.."lua/custom.lua")
    2221dofile(path.."lua/doit.lua")
  • code/branches/pch/src/tolua/all-5.1.lua

    r3127 r3138  
    1919dofile(path.."lua/class.lua")
    2020dofile(path.."lua/clean.lua")
    21 dofile(path.."lua/template_class.lua")
    2221--dofile(path.."lua/custom.lua")
    2322dofile(path.."lua/doit.lua")
  • code/branches/pch/src/tolua/changes_orxonox.diff

    r3127 r3138  
    1 --- tolua++.h   Tue Jun  9 16:27:17 2009
    2 +++ tolua++.h   Tue Jun  9 14:50:04 2009
     1diff -ruN tolua/tolua++.h tolua2/tolua++.h
     2--- tolua/tolua++.h     Wed Jan 28 21:51:38 2009
     3+++ tolua2/tolua++.h    Sat Jan 10 14:48:44 2009
    34@@ -16,9 +16,34 @@
    45 #ifndef TOLUA_H
     
    3637 #define TOLUA_VERSION "tolua++-1.0.92"
    3738 
    38 --- tolua.c     Tue Jun  9 16:27:12 2009
    39 +++ tolua.c     Tue Jun  9 14:50:04 2009
     39diff -ruN tolua/tolua.c tolua2/tolua.c
     40--- tolua/tolua.c       Wed Jan 28 21:51:00 2009
     41+++ tolua2/tolua.c      Sat Jan 10 14:48:45 2009
    4042@@ -4,6 +4,8 @@
    4143 ** TeCGraf/PUC-Rio
     
    5658          "  -P       : parse and print structure information (for debug).\n"
    5759          "  -S       : disable support for c++ strings.\n"
    58 @@ -65,12 +69,12 @@
     60@@ -64,12 +68,12 @@
    5961 }
    6062 
     
    7577 
    7678 static void error (char* o)
    77 @@ -82,6 +86,9 @@
     79@@ -81,6 +85,9 @@
    7880 
    7981 int main (int argc, char* argv[])
     
    8587  lua_State* L = luaL_newstate();
    8688  luaL_openlibs(L);
    87 @@ -98,6 +105,7 @@
     89@@ -97,6 +104,7 @@
    8890  lua_pushstring(L,TOLUA_VERSION); lua_setglobal(L,"TOLUA_VERSION");
    8991  lua_pushstring(L,LUA_VERSION); lua_setglobal(L,"TOLUA_LUA_VERSION");
     
    9395  {
    9496   help();
    95 @@ -125,6 +133,14 @@
     97@@ -124,6 +132,14 @@
    9698      case 'o': setfield(L,t,"o",argv[++i]); break;
    9799      case 'n': setfield(L,t,"n",argv[++i]); break;
     
    108110      case '1': setfield(L,t,"1",""); break;
    109111      case 'L': setfield(L,t,"L",argv[++i]); break;
    110 @@ -145,25 +161,53 @@
     112@@ -143,25 +159,53 @@
    111113   }
    112114   lua_pop(L,1);
  • code/branches/pch/src/tolua/lua/array.lua

    r3127 r3138  
    102102    -- return value
    103103    local t,ct = isbasic(self.type)
    104     local push_func = get_push_function(t)
    105104    if t then
    106105        output(' tolua_push'..t..'(tolua_S,(',ct,')'..self:getvalue(class,static)..');')
     
    108107        t = self.type
    109108        if self.ptr == '&' or self.ptr == '' then
    110             output(' ',push_func,'(tolua_S,(void*)&'..self:getvalue(class,static)..',"',t,'");')
    111         else
    112             output(' ',push_func,'(tolua_S,(void*)'..self:getvalue(class,static)..',"',t,'");')
     109            output(' tolua_pushusertype(tolua_S,(void*)&'..self:getvalue(class,static)..',"',t,'");')
     110        else
     111            output(' tolua_pushusertype(tolua_S,(void*)'..self:getvalue(class,static)..',"',t,'");')
    113112        end
    114113    end
     
    194193            output('tolua_to'..t,'(tolua_S,3,',def,'));')
    195194        else
    196             local to_func = get_to_function(self.type)
    197             output(to_func,'(tolua_S,3,',def,'));')
     195            output('tolua_tousertype(tolua_S,3,',def,'));')
    198196        end
    199197        output(' return 0;')
     
    205203
    206204function classArray:register (pre)
    207     if not self:check_public_access() then
    208         return
    209     end
    210 
    211205    pre = pre or ''
    212206    if self.csetname then
  • code/branches/pch/src/tolua/lua/basic.lua

    r3129 r3138  
    112112
    113113function warning (msg)
    114     if flags.q then
    115         return
    116     end
    117114    local out = _OUTPUT
    118115    _OUTPUT = _STDERR
     
    336333end
    337334
    338 -- called before starting output
    339 function pre_output_hook(package)
    340 
    341 end
    342335
    343336-- called after writing all the output.
     
    361354end
    362355
    363 -- called from classFunction:supcode, before the call to the function is output
    364 function pre_call_hook(f)
    365 
    366 end
    367 
    368 -- called from classFunction:supcode, after the call to the function is output
    369 function post_call_hook(f)
    370 
    371 end
    372 
    373 -- called before the register code is output
    374 function pre_register_hook(package)
    375 
    376 end
    377 
    378 -- called to output an error message
    379 function output_error_hook(str, arg)
    380     return string.format(str, arg)
    381 end
    382 
    383 -- custom pushers
    384 
    385 _push_functions = {}
    386 _is_functions = {}
    387 _to_functions = {}
    388 
    389 _base_push_functions = {}
    390 _base_is_functions = {}
    391 _base_to_functions = {}
    392 
    393 local function search_base(t, funcs)
    394     local class = _global_classes[t]
    395 
    396     while class do
    397         if funcs[class.type] then
    398             return funcs[class.type]
    399         end
    400         class = _global_classes[class.btype]
    401     end
    402     return nil
    403 end
    404 
    405 function get_push_function(t)
    406     return _push_functions[t] or search_base(t, _base_push_functions) or "tolua_pushusertype"
    407 end
    408 
    409 function get_to_function(t)
    410     return _to_functions[t] or search_base(t, _base_to_functions) or "tolua_tousertype"
    411 end
    412  
    413 function get_is_function(t)
    414     return _is_functions[t] or search_base(t, _base_is_functions) or "tolua_isusertype"
    415 end
    416 
     356
  • code/branches/pch/src/tolua/lua/class.lua

    r3127 r3138  
    6464-- return collection requirement
    6565function classClass:requirecollection (t)
    66     if self.flags.protected_destructor or (not self:check_public_access()) then
     66    if self.flags.protected_destructor then
    6767        return false
    6868    end
     
    148148    -- check for template
    149149    b = string.gsub(b, "^{%s*TEMPLATE_BIND", "{\nTOLUA_TEMPLATE_BIND")
    150     local t,_,T,I = string.find(b, '^{%s*TOLUA_TEMPLATE_BIND%s*%(+%s*\"?([^\",]*)\"?%s*,%s*([^%)]*)%s*%)+')
     150    local t,_,T,I = string.find(b, "^{%s*TOLUA_TEMPLATE_BIND%s*%(+%s*\"?([^\",]*)\"?%s*,%s*([^%)]*)%s*%)+")
    151151    if t then
    152152
     
    159159        local bs = string.gsub(b, "^{%s*TOLUA_TEMPLATE_BIND[^\n]*\n", "{\n")
    160160
    161         local Tl = split(T, " ")
    162         local tc = TemplateClass(n, p, bs, Tl)
    163 
    164         tc:throw(types, true)
    165         --for i=1,types.n do
    166         --    tc:throw(split_c_tokens(types[i], " "), true)
    167         --end
     161        -- replace
     162        for i =1 , types.n do
     163
     164            local Tl = split(T, " ")
     165            local Il = split_c_tokens(types[i], " ")
     166            local bI = bs
     167            local pI = {}
     168            for j = 1,Tl.n do
     169                Tl[j] = findtype(Tl[j]) or Tl[j]
     170                bI = string.gsub(bI, "([^_%w])"..Tl[j].."([^_%w])", "%1"..Il[j].."%2")
     171                if p then
     172                    for i=1,table.getn(p) do
     173                        pI[i] = string.gsub(p[i], "([^_%w]?)"..Tl[j].."([^_%w]?)", "%1"..Il[j].."%2")
     174                    end
     175                end
     176            end
     177            --local append = "<"..string.gsub(types[i], "%s+", ",")..">"
     178            local append = "<"..concat(Il, 1, table.getn(Il), ",")..">"
     179            append = string.gsub(append, "%s*,%s*", ",")
     180            append = string.gsub(append, ">>", "> >")
     181            for i=1,table.getn(pI) do
     182                --pI[i] = string.gsub(pI[i], ">>", "> >")
     183                pI[i] = resolve_template_types(pI[i])
     184            end
     185            bI = string.gsub(bI, ">>", "> >")
     186            Class(n..append, pI, bI)
     187        end
    168188        return
    169189    end
  • code/branches/pch/src/tolua/lua/code.lua

    r3127 r3138  
    4747    end
    4848
    49     -- pad to 16 bytes
    50     local npad = 16 - (#s % 16)
    51     local spad = ""
    52     for i=1,npad do
    53         spad = spad .. "-"
    54     end
    55     s = s..spad
    56 
    5749    -- convert to C
    5850    output('\n'..pre..'{ /* begin embedded lua code */\n')
    5951    output(pre..' int top = lua_gettop(tolua_S);')
    60     output(pre..' static const unsigned char B[] = {\n   ')
     52    output(pre..' static unsigned char B[] = {\n   ')
    6153    local t={n=0}
    6254    local b = gsub(s, '(.)',
  • code/branches/pch/src/tolua/lua/compat-5.1.lua

    r3127 r3138  
    2626
    2727    local f = load(getfile, path)
    28     if not f then
    29         error("error loading file "..path)
    30     end
    3128    return f()
    3229end
  • code/branches/pch/src/tolua/lua/container.lua

    r3127 r3138  
    615615            b,e,decl,arg,const = strfind(s,"^%s*([_%w])%s*(%b())%s*(c?o?n?s?t?)%s*;%s*")
    616616        end
    617         if not b then
    618             -- try function pointer
    619             b,e,decl,arg,const = strfind(s,"^%s*([^%(;\n]+%b())%s*(%b())%s*;%s*")
    620             if b then
    621                 decl = string.gsub(decl, "%(%s*%*([^%)]*)%s*%)", " %1 ")
    622             end
    623         end
    624617        if b then
    625618            if virt and string.find(virt, "[=0]") then
     
    654647        base = '' body = ''
    655648        b,e,name = strfind(s,"^%s*class%s*([_%w][_%w@]*)%s*;")  -- dummy class
    656         local dummy = false
    657649        if not b then
    658650            b,e,name = strfind(s,"^%s*struct%s*([_%w][_%w@]*)%s*;")    -- dummy struct
    659651            if not b then
    660                 b,e,name,base,body = strfind(s,"^%s*class%s*([_%w][_%w@]*)%s*([^{]-)%s*(%b{})%s*")
     652                b,e,name,base,body = strfind(s,"^%s*class%s*([_%w][_%w@]*)%s*(.-)%s*(%b{})%s*;%s*")
    661653                if not b then
    662                     b,e,name,base,body = strfind(s,"^%s*struct%s+([_%w][_%w@]*)%s*([^{]-)%s*(%b{})%s*")
     654                    b,e,name,base,body = strfind(s,"^%s*struct%s*([_%w][_%w@]*)%s*(.-)%s*(%b{})%s*;%s*")
    663655                    if not b then
    664                         b,e,name,base,body = strfind(s,"^%s*union%s*([_%w][_%w@]*)%s*([^{]-)%s*(%b{})%s*")
     656                        b,e,name,base,body = strfind(s,"^%s*union%s*([_%w][_%w@]*)%s*(.-)%s*(%b{})%s*;%s*")
    665657                        if not b then
    666658                            base = ''
    667                             b,e,body,name = strfind(s,"^%s*typedef%s%s*struct%s%s*[_%w]*%s*(%b{})%s*([_%w][_%w@]*)%s*;")
     659                            b,e,body,name = strfind(s,"^%s*typedef%s%s*struct%s%s*[_%w]*%s*(%b{})%s*([_%w][_%w@]*)%s*;%s*")
    668660                        end
    669661                    end
    670662                end
    671             else dummy = 1 end
    672         else dummy = 1 end
     663            end
     664        end
    673665        if b then
    674666            if base ~= '' then
     
    683675            _curr_code = strsub(s,b,e)
    684676            Class(name,base,body)
    685             if not dummy then
    686                 varb,vare,varname = string.find(s, "^%s*([_%w]+)%s*;", e+1)
    687                 if varb then
    688                     Variable(name.." "..varname)
    689                     e = vare
    690                 end
    691             end
    692677            return strsub(s,e+1)
    693678        end
     
    738723    -- try array
    739724    do
    740     local b,e,decl = strfind(s,"^%s*([_%w][][_@%s%w%d%*&:<>]*[]_%w%d])%s*;%s*")
     725        local b,e,decl = strfind(s,"^%s*([_%w][][_@%s%w%d%*&:]*[]_%w%d])%s*;%s*")
    741726        if b then
    742727            _curr_code = strsub(s,b,e)
     
    758743function classContainer:parse (s)
    759744
    760     --self.curr_member_access = nil
     745    self.curr_member_access = nil
    761746
    762747    while s ~= '' do
  • code/branches/pch/src/tolua/lua/declaration.lua

    r3127 r3138  
    140140        for i=1, table.getn(m) do
    141141            m[i] = string.gsub(m[i],"%s*([%*&])", "%1")
    142             if not isbasic(m[i]) then
    143                 if not isenum(m[i]) then _, m[i] = applytypedef("", m[i]) end
    144                 m[i] = findtype(m[i]) or m[i]
    145                 m[i] = resolve_template_types(m[i])
    146             end
     142            m[i] = findtype(m[i]) or m[i]
     143            m[i] = resolve_template_types(m[i])
    147144        end
    148145
    149146        local b,i
    150147        type,b,i = break_template(type)
    151         --print("concat is ",concat(m, 1, m.n))
    152         local template_part = "<"..concat(m, 1, m.n, ",")..">"
     148        local template_part = "<"..string.gsub(concat(m, 1, m.n), " ", ",")..">"
    153149        type = rebuild_template(type, b, template_part)
    154150        type = string.gsub(type, ">>", "> >")
     
    191187-- check if array of values are returned to Lua
    192188function classDeclaration:requirecollection (t)
    193     if self.mod ~= 'const' and
     189 if self.mod ~= 'const' and
    194190        self.dim and self.dim ~= '' and
    195191                 not isbasic(self.type) and
    196                  self.ptr == '' and self:check_public_access() then
     192                 self.ptr == '' then
    197193        local type = gsub(self.type,"%s*const%s+","")
    198194        t[type] = "tolua_collect_" .. clean_template(type)
     
    226222        --    return 'tolua_isstringarray(tolua_S,'..narg..','..def..',&tolua_err)'
    227223        --else
    228         return '!tolua_istable(tolua_S,'..narg..',0,&tolua_err)'
     224        return 'tolua_istable(tolua_S,'..narg..',0,&tolua_err)'
    229225        --end
    230226    elseif t then
    231         return '!tolua_is'..t..'(tolua_S,'..narg..','..def..',&tolua_err)'
    232     else
    233         local is_func = get_is_function(self.type)
    234         if self.ptr == '&' or self.ptr == '' then
    235             return '(tolua_isvaluenil(tolua_S,'..narg..',&tolua_err) || !'..is_func..'(tolua_S,'..narg..',"'..self.type..'",'..def..',&tolua_err))'
    236         else
    237             return '!'..is_func..'(tolua_S,'..narg..',"'..self.type..'",'..def..',&tolua_err)'
    238         end
    239    end
     227        return 'tolua_is'..t..'(tolua_S,'..narg..','..def..',&tolua_err)'
     228    else
     229        return 'tolua_isusertype(tolua_S,'..narg..',"'..self.type..'",'..def..',&tolua_err)'
     230    end
    240231end
    241232
     
    246237    local mod
    247238    local type = self.type
    248     local nctype = gsub(self.type,'const%s+','')
    249239    if self.dim ~= '' then
    250240        type = gsub(self.type,'const%s+','')  -- eliminates const modifier for arrays
     
    261251        else
    262252            if cplusplus then
    263                 line = concatparam(line,' = Mtolua_new_dim(',type,ptr,', '..self.dim..');')
     253                line = concatparam(line,' = new',type,ptr,'['..self.dim..'];')
    264254            else
    265255                line = concatparam(line,' = (',type,ptr,'*)',
     
    283273            end
    284274            line = concatparam(line,') ')
    285             if isenum(nctype) then
     275            if isenum(type) then
    286276                line = concatparam(line,'(int) ')
    287277            end
     
    296286                line = concatparam(line,'tolua_to'..t,'(tolua_S,',narg,',',def,'));')
    297287            else
    298                 local to_func = get_to_function(type)
    299                 line = concatparam(line,to_func..'(tolua_S,',narg,',',def,'));')
     288                line = concatparam(line,'tolua_tousertype(tolua_S,',narg,',',def,'));')
    300289            end
    301290        end
     
    372361                output('   {')
    373362                output('#ifdef __cplusplus\n')
    374                 output('    void* tolua_obj = Mtolua_new((',type,')(',self.name,'[i]));')
     363                output('    void* tolua_obj = new',type,'(',self.name,'[i]);')
    375364                output('    tolua_pushfieldusertype_and_takeownership(tolua_S,',narg,',i+1,tolua_obj,"',type,'");')
    376365                output('#else\n')
     
    391380    if self.dim ~= '' and tonumber(self.dim)==nil then
    392381        output('#ifdef __cplusplus\n')
    393         output('  Mtolua_delete_dim(',self.name,');')
     382        output('  delete []',self.name,';')
    394383        output('#else\n')
    395384        output('  free(',self.name,');')
     
    416405            output('   tolua_push'..t..'(tolua_S,(',ct,')'..self.name..');')
    417406        else
    418             local push_func = get_push_function(self.type)
    419             output('   ',push_func,'(tolua_S,(void*)'..self.name..',"',self.type,'");')
     407            output('   tolua_pushusertype(tolua_S,(void*)'..self.name..',"',self.type,'");')
    420408        end
    421409        return 1
  • code/branches/pch/src/tolua/lua/doit.lua

    r3127 r3138  
    1616    for k,v in ipairs(_extra_parameters or {}) do
    1717       
    18         local b,e,name,value = string.find(v, "^([^=]*)=(.*)$")
     18        local b,e,name,value = string.find(v, "^([^=])=(.*)$")
    1919        if b then
    2020            _extra_parameters[name] = value
     
    9494        p:print()
    9595    else
    96         push(p)
    97         pre_output_hook(p)
    98         pop()
    9996        p:preamble()
    10097        p:supcode()
    101         push(p)
    102         pre_register_hook(p)
    103         pop()
    10498        p:register()
    10599        push(p)
  • code/branches/pch/src/tolua/lua/enumerate.lua

    r3127 r3138  
    2222-- register enumeration
    2323function classEnumerate:register (pre)
    24     if not self:check_public_access() then
    25         return
    26     end
    2724    pre = pre or ''
    2825    local nspace = getnamespace(classContainer.curr)
    2926    local i=1
    3027    while self[i] do
    31         if self.lnames[i] and self.lnames[i] ~= "" then
    32             output(pre..'tolua_constant(tolua_S,"'..self.lnames[i]..'",'..nspace..self[i]..');')
    33         end
     28        output(pre..'tolua_constant(tolua_S,"'..self.lnames[i]..'",'..nspace..self[i]..');')
    3429        i = i+1
    3530    end
     
    6156            Variable("tolua_readonly int "..varname)
    6257        end
    63     end
    64     local parent = classContainer.curr
    65     if parent then
    66         t.access = parent.curr_member_access
    67         t.global_access = t:check_public_access()
    6858    end
    6959    return t
  • code/branches/pch/src/tolua/lua/feature.lua

    r3127 r3138  
    4848        local n = split(self.name,'@')
    4949        self.name = n[1]
    50         self.name = string.gsub(self.name, ":%d*$", "")
    5150        if not n[2] then
    5251            n[2] = applyrenaming(n[1])
    5352        end
    5453        self.lname = n[2] or gsub(n[1],"%[.-%]","")
    55         self.lname = string.gsub(self.lname, ":%d*$", "")
    5654        self.original_name = self.name
    5755        self.lname = clean_template(self.lname)
     
    6462    if parent then
    6563        self.access = parent.curr_member_access
    66         self.global_access = self:check_public_access()
    6764    else
    6865    end
     
    7067
    7168function classFeature:check_public_access()
    72 
    73     if type(self.global_access) == "boolean" then
    74         return self.global_access
    75     end
    7669
    7770    if self.access and self.access ~= 0 then
     
    129122    end
    130123
    131     local fname = self.lname
    132     if not fname or fname == '' then
    133         fname = self.name
    134     end
    135     n = string.gsub(n..'_'.. (fname), "[<>:, \.%*&]", "_")
     124    n = string.gsub(n..'_'.. (self.lname or self.name), "[<>:, \.%*&]", "_")
    136125
    137126    return n
  • code/branches/pch/src/tolua/lua/function.lua

    r3127 r3138  
    209209    if class then narg=2 else narg=1 end
    210210    if class then
    211         local func = get_is_function(self.parent.type)
     211        local func = 'tolua_isusertype'
    212212        local type = self.parent.type
    213213        if self.name=='new' or static~=nil then
     
    226226            local btype = isbasic(self.args[i].type)
    227227            if btype ~= 'value' and btype ~= 'state' then
    228                 output('     '..self.args[i]:outchecktype(narg)..' ||\n')
     228                output('     !'..self.args[i]:outchecktype(narg)..' ||\n')
    229229            end
    230230            if btype ~= 'state' then
     
    250250        output(' ',self.const,self.parent.type,'*','self = ')
    251251        output('(',self.const,self.parent.type,'*) ')
    252         local to_func = get_to_function(self.parent.type)
    253         output(to_func,'(tolua_S,1,0);')
     252        output('tolua_tousertype(tolua_S,1,0);')
    254253    elseif static then
    255254        _,_,self.mod = strfind(self.mod,'^%s*static%s%s*(.*)')
     
    270269    if class and self.name~='new' and static==nil then
    271270        output('#ifndef TOLUA_RELEASE\n')
    272         output('  if (!self) tolua_error(tolua_S,"'..output_error_hook("invalid \'self\' in function \'%s\'", self.name)..'", NULL);');
     271        output('  if (!self) tolua_error(tolua_S,"invalid \'self\' in function \''..self.name..'\'",NULL);');
    273272        output('#endif\n')
    274273    end
     
    313312    --------------------------------------------------
    314313
    315     pre_call_hook(self)
    316 
    317314    local out = string.find(self.mod, "tolua_outside")
    318315
     
    326323    -- call function
    327324    if class and self.name=='delete' then
    328         output('  Mtolua_delete(self);')
     325        output('  delete self;')
    329326    elseif class and self.name == 'operator&[]' then
    330327        if flags['1'] then -- for compatibility with tolua5 ?
     
    355352    end
    356353    if class and self.name=='new' then
    357         output('Mtolua_new((',self.type,')(')
     354        output('new',self.type,'(')
    358355    elseif class and static then
    359356        if out then
     
    367364        else
    368365            if self.cast_operator then
    369                 --output('static_cast<',self.mod,self.type,self.ptr,' >(*self')
    370                 output('self->operator ',self.mod,self.type,'(')
     366                output('static_cast<',self.mod,self.type,self.ptr,'>(*self')
    371367            else
    372368                output('self->'..self.name,'(')
     
    396392        output('-1);')
    397393    else
    398         if class and self.name=='new' then
    399             output('));') -- close Mtolua_new(
    400         else
    401             output(');')
    402         end
     394        output(');')
    403395    end
    404396
     
    407399        nret = nret + 1
    408400        local t,ct = isbasic(self.type)
    409         if t and self.name ~= "new" then
     401        if t then
    410402            if self.cast_operator and _basic_raw_push[t] then
    411403                output('   ',_basic_raw_push[t],'(tolua_S,(',ct,')tolua_ret);')
     
    416408                t = self.type
    417409                new_t = string.gsub(t, "const%s+", "")
    418                 local owned = false
    419                 if string.find(self.mod, "tolua_owned") then
    420                     owned = true
    421                 end
    422                 local push_func = get_push_function(t)
    423410                if self.ptr == '' then
    424411                    output('   {')
    425412                    output('#ifdef __cplusplus\n')
    426                     output('    void* tolua_obj = Mtolua_new((',new_t,')(tolua_ret));')
    427                     output('    ',push_func,'(tolua_S,tolua_obj,"',t,'");')
    428                     output('    tolua_register_gc(tolua_S,lua_gettop(tolua_S));')
     413                    output('    void* tolua_obj = new',new_t,'(tolua_ret);')
     414                    output('    tolua_pushusertype_and_takeownership(tolua_S,tolua_obj,"',t,'");')
    429415                    output('#else\n')
    430416                    output('    void* tolua_obj = tolua_copy(tolua_S,(void*)&tolua_ret,sizeof(',t,'));')
    431                     output('    ',push_func,'(tolua_S,tolua_obj,"',t,'");')
    432                     output('    tolua_register_gc(tolua_S,lua_gettop(tolua_S));')
     417                    output('    tolua_pushusertype_and_takeownership(tolua_S,tolua_obj,"',t,'");')
    433418                    output('#endif\n')
    434419                    output('   }')
    435420                elseif self.ptr == '&' then
    436                     output('   ',push_func,'(tolua_S,(void*)&tolua_ret,"',t,'");')
     421                    output('   tolua_pushusertype(tolua_S,(void*)&tolua_ret,"',t,'");')
    437422                else
    438                     output('   ',push_func,'(tolua_S,(void*)tolua_ret,"',t,'");')
    439                     if owned or local_constructor then
    440                         output('    tolua_register_gc(tolua_S,lua_gettop(tolua_S));')
     423                    if local_constructor then
     424                        output('   tolua_pushusertype_and_takeownership(tolua_S,(void *)tolua_ret,"',t,'");')
     425                    else
     426                        output('   tolua_pushusertype(tolua_S,(void*)tolua_ret,"',t,'");')
    441427                    end
    442428                end
     
    480466    end
    481467
    482     post_call_hook(self)
    483 
    484468    output(' }')
    485469    output(' return '..nret..';')
     
    490474        output('#ifndef TOLUA_RELEASE\n')
    491475        output('tolua_lerror:\n')
    492         output(' tolua_error(tolua_S,"'..output_error_hook("#ferror in function \'%s\'.", self.lname)..'",&tolua_err);')
     476        output(' tolua_error(tolua_S,"#ferror in function \''..self.lname..'\'.",&tolua_err);')
    493477        output(' return 0;')
    494478        output('#endif\n')
     
    590574    if string.find(par, "%*") then -- it's a pointer with a default value
    591575
    592         if string.find(par, '=%s*new') or string.find(par, "%(") then -- it's a pointer with an instance as default parameter.. is that valid?
     576        if string.find(par, '=%s*new') then -- it's a pointer with an instance as default parameter.. is that valid?
    593577            return true
    594578        end
     
    677661        --ns = strip_defaults(ns)
    678662
    679         local f = Function(d, ns, c)
     663        Function(d, ns, c)
    680664        for i=1,last do
    681665            t[i] = string.gsub(t[i], "=.*$", "")
  • code/branches/pch/src/tolua/lua/operator.lua

    r3127 r3138  
    7575    output(' if (\n')
    7676    -- check self
    77     local is_func = get_is_function(self.parent.type)
    78     output('     !'..is_func..'(tolua_S,1,"'..self.parent.type..'",0,&tolua_err) ||\n')
     77    output('     !'..'tolua_isusertype(tolua_S,1,"'..self.parent.type..'",0,&tolua_err) ||\n')
    7978    output('     !tolua_isnoobj(tolua_S,2,&tolua_err)\n )')
    8079    output('  goto tolua_lerror;')
     
    8786    output(' ',self.const,self.parent.type,'*','self = ')
    8887    output('(',self.const,self.parent.type,'*) ')
    89     local to_func = get_to_func(self.parent.type)
    90     output(to_func,'(tolua_S,1,0);')
     88    output('tolua_tousertype(tolua_S,1,0);')
    9189
    9290    -- check self
    9391    output('#ifndef TOLUA_RELEASE\n')
    94     output('  if (!self) tolua_error(tolua_S,"'..output_error_hook("invalid \'self\' in function \'%s\'", self.name)..'",NULL);');
     92    output('  if (!self) tolua_error(tolua_S,"invalid \'self\' in function \''..self.name..'\'",NULL);');
    9593    output('#endif\n')
    9694
     
    105103    else
    106104        t = self.type
    107         local push_func = get_push_function(t)
    108105        new_t = string.gsub(t, "const%s+", "")
    109106        if self.ptr == '' then
    110107            output('   {')
    111108            output('#ifdef __cplusplus\n')
    112             output('    void* tolua_obj = Mtolua_new((',new_t,')(tolua_ret));')
    113             output('    ',push_func,'(tolua_S,tolua_obj,"',t,'");')
    114             output('    tolua_register_gc(tolua_S,lua_gettop(tolua_S));')
     109            output('    void* tolua_obj = new',new_t,'(tolua_ret);')
     110            output('    tolua_pushusertype_and_takeownership(tolua_S,tolua_obj,"',t,'");')
    115111            output('#else\n')
    116112            output('    void* tolua_obj = tolua_copy(tolua_S,(void*)&tolua_ret,sizeof(',t,'));')
    117             output('    ',push_func,'(tolua_S,tolua_obj,"',t,'");')
    118             output('    tolua_register_gc(tolua_S,lua_gettop(tolua_S));')
     113            output('    tolua_pushusertype_and_takeownership(tolua_S,tolua_obj,"',t,'");')
    119114            output('#endif\n')
    120115            output('   }')
    121116        elseif self.ptr == '&' then
    122             output('   ',push_func,'(tolua_S,(void*)&tolua_ret,"',t,'");')
     117            output('   tolua_pushusertype(tolua_S,(void*)&tolua_ret,"',t,'");')
    123118        else
    124119            if local_constructor then
    125                 output('   ',push_func,'(tolua_S,(void *)tolua_ret,"',t,'");')
    126                 output('    tolua_register_gc(tolua_S,lua_gettop(tolua_S));')
     120                output('   tolua_pushusertype_and_takeownership(tolua_S,(void *)tolua_ret,"',t,'");')
    127121            else
    128                 output('   ',push_func,'(tolua_S,(void*)tolua_ret,"',t,'");')
     122                output('   tolua_pushusertype(tolua_S,(void*)tolua_ret,"',t,'");')
    129123            end
    130124        end
     
    136130    output('#ifndef TOLUA_RELEASE\n')
    137131    output('tolua_lerror:\n')
    138     output(' tolua_error(tolua_S,"'..output_error_hook("#ferror in function \'%s\'.", self.lname)..'",&tolua_err);')
     132    output(' tolua_error(tolua_S,"#ferror in function \''..self.lname..'\'.",&tolua_err);')
    139133    output(' return 0;')
    140134    output('#endif\n')
  • code/branches/pch/src/tolua/lua/package.lua

    r3129 r3138  
    146146            output('{')
    147147            output(' '..i..'* self = ('..i..'*) tolua_tousertype(tolua_S,1,0);')
    148             output('    Mtolua_delete(self);')
     148            output('    delete self;')
    149149            output('    return 0;')
    150150            output('}')
     
    157157    output('static void tolua_reg_types (lua_State* tolua_S)')
    158158    output('{')
    159 
     159    foreach(_usertype,function(n,v) output(' tolua_usertype(tolua_S,"',v,'");') end)
    160160    if flags.t then
    161161        output("#ifndef Mtolua_typeid\n#define Mtolua_typeid(L,TI,T)\n#endif\n")
    162     end
    163     foreach(_usertype,function(n,v)
    164         if (not _global_classes[v]) or _global_classes[v]:check_public_access() then
    165             output(' tolua_usertype(tolua_S,"',v,'");')
    166             if flags.t then
    167                 output(' Mtolua_typeid(tolua_S,typeid(',v,'), "',v,'");')
    168             end
    169         end
    170     end)
    171  output('}')
     162        foreach(_usertype,function(n,v) output(' Mtolua_typeid(tolua_S,typeid(',v,'), "',v,'");') end)
     163    end
     164    output('}')
    172165    output('\n')
    173166end
     
    256249
    257250    -- open input file, if any
    258     local st,msg
    259251    if fn then
    260252        local file
     
    268260            file = flags.f
    269261        end
    270         st, msg = readfrom(file)
     262        local st, msg = readfrom(file)
    271263        if not st then
    272264            error('#'..msg..' path: '..flags.f)
     
    274266        local _; _, _, ext = strfind(fn,".*%.(.*)$")
    275267    end
    276     local code
    277     if ext == 'pkg' then
    278         code = prep(st)
    279     else
    280         code = "\n" .. read('*a')
    281         if ext == 'h' or ext == 'hpp' then
    282             code = extract_code(fn,code)
    283         end
     268    local code = "\n" .. read('*a')
     269    if ext == 'h' or ext == 'hpp' then
     270        code = extract_code(fn,code)
    284271    end
    285272
     
    313300                    error('#'..msg..': '..fn)
    314301                end
    315                 if kind == 'p' then
    316                     local s = prep(fp)
    317                     closefile(fp)
    318                     return s
    319                 end
    320302                local s = read(fp,'*a')
    321303                closefile(fp)
    322304                if kind == 'c' or kind == 'h' then
    323305                    return extract_code(fn,s)
     306                elseif kind == 'p' then
     307                    return "\n\n" .. s
    324308                elseif kind == 'l' then
    325309                    return "\n$[--##"..fn.."\n" .. s .. "\n$]\n"
     
    353337
    354338
    355 setmetatable(_extra_parameters, { __index = _G })
    356 
    357 function prep(file)
    358 
    359     local chunk = {'local __ret = {"\\n"}\n'}
    360     for line in file:lines() do
    361         if string.find(line, "^##") then
    362             table.insert(chunk, string.sub(line, 3) .. "\n")
    363         else
    364             local last = 1
    365             for text, expr, index in string.gfind(line, "(.-)$(%b())()") do
    366                 last = index
    367                 if text ~= "" then
    368                     table.insert(chunk, string.format('table.insert(__ret, %q )', text))
    369                 end
    370                 table.insert(chunk, string.format('table.insert(__ret, %s )', expr))
    371             end
    372             table.insert(chunk, string.format('table.insert(__ret, %q)\n',
    373                                 string.sub(line, last).."\n"))
    374         end
    375     end
    376     table.insert(chunk, '\nreturn table.concat(__ret)\n')
    377     local f,e = loadstring(table.concat(chunk))
    378     if e then
    379         error("#"..e)
    380     end
    381     setfenv(f, _extra_parameters)
    382     return f()
    383 end
  • code/branches/pch/src/tolua/lua/variable.lua

    r3127 r3138  
    109109    if string.find(self.mod, 'tolua_property') then
    110110
    111         local _,_,type = string.find(self.mod, "tolua_property__([^%s]*)")
     111        _,_,type = string.find(self.mod, "tolua_property__([^%s]*)")
    112112        type = type or "default"
    113113        prop_get,prop_set = get_property_methods(type, self.name)
     
    131131        output(' ',self.parent.type,'*','self = ')
    132132        output('(',self.parent.type,'*) ')
    133         local to_func = get_to_function(self.parent.type)
    134         output(to_func,'(tolua_S,1,0);')
     133        output('tolua_tousertype(tolua_S,1,0);')
    135134    elseif static then
    136135        _,_,self.mod = strfind(self.mod,'^%s*static%s%s*(.*)')
     
    141140    if class and static==nil then
    142141        output('#ifndef TOLUA_RELEASE\n')
    143         output('  if (!self) tolua_error(tolua_S,"'..output_error_hook("invalid \'self\' in accessing variable \'%s\'", self.name)..'",NULL);');
     142        output('  if (!self) tolua_error(tolua_S,"invalid \'self\' in accessing variable \''..self.name..'\'",NULL);');
    144143        output('#endif\n')
    145144    end
     
    147146    -- return value
    148147    if string.find(self.mod, 'tolua_inherits') then
    149     local push_func = get_push_function(self.type)
    150148        output('#ifdef __cplusplus\n')
    151         output('  ',push_func,'(tolua_S,(void*)static_cast<'..self.type..'*>(self), "',self.type,'");')
     149        output('  tolua_pushusertype(tolua_S,(void*)static_cast<'..self.type..'*>(self), "',self.type,'");')
    152150        output('#else\n')
    153         output('  ',push_func,'(tolua_S,(void*)(('..self.type..'*)self), "',self.type,'");')
     151        output('  tolua_pushusertype(tolua_S,(void*)(('..self.type..'*)self), "',self.type,'");')
    154152        output('#endif\n')
    155153    else
     
    158156            output('  tolua_push'..t..'(tolua_S,(',ct,')'..self:getvalue(class,static,prop_get)..');')
    159157        else
    160             local push_func = get_push_function(self.type)
    161158            t = self.type
    162159            if self.ptr == '&' or self.ptr == '' then
    163                 output('  ',push_func,'(tolua_S,(void*)&'..self:getvalue(class,static,prop_get)..',"',t,'");')
    164             else
    165                 output('  ',push_func,'(tolua_S,(void*)'..self:getvalue(class,static,prop_get)..',"',t,'");')
     160                output('  tolua_pushusertype(tolua_S,(void*)&'..self:getvalue(class,static,prop_get)..',"',t,'");')
     161            else
     162                output('  tolua_pushusertype(tolua_S,(void*)'..self:getvalue(class,static,prop_get)..',"',t,'");')
    166163            end
    167164        end
     
    188185        output(' ',self.parent.type,'*','self = ')
    189186        output('(',self.parent.type,'*) ')
    190         local to_func = get_to_function(self.parent.type)
    191         output(to_func,'(tolua_S,1,0);')
     187        output('tolua_tousertype(tolua_S,1,0);')
    192188        -- check self value
    193189    end
     
    196192    output('  tolua_Error tolua_err;')
    197193    if class and static==nil then
    198         output('  if (!self) tolua_error(tolua_S,"'..output_error_hook("invalid \'self\' in accessing variable \'%s\'", self.name)..'",NULL);');
     194        output('  if (!self) tolua_error(tolua_S,"invalid \'self\' in accessing variable \''..self.name..'\'",NULL);');
    199195    elseif static then
    200196        _,_,self.mod = strfind(self.mod,'^%s*static%s%s*(.*)')
     
    202198
    203199    -- check variable type
    204     output('  if ('..self:outchecktype(2)..')')
     200    output('  if (!'..self:outchecktype(2)..')')
    205201    output('   tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err);')
    206202    output('#endif\n')
     
    210206    if self.def ~= '' then def = self.def end
    211207    if self.type == 'char*' and self.dim ~= '' then -- is string
    212         output(' strncpy((char*)')
     208        output(' strncpy(')
    213209        if class and static then
    214210            output(self.parent.type..'::'..self.name)
     
    218214                output(self.name)
    219215            end
    220             output(',(const char*)tolua_tostring(tolua_S,2,',def,'),',self.dim,'-1);')
     216            output(',tolua_tostring(tolua_S,2,',def,'),',self.dim,'-1);')
    221217        else
    222218            local ptr = ''
     
    249245                output('tolua_to'..t,'(tolua_S,2,',def,'))')
    250246            else
    251                 local to_func = get_to_function(self.type)
    252                 output(to_func,'(tolua_S,2,',def,'))')
     247                output('tolua_tousertype(tolua_S,2,',def,'))')
    253248            end
    254249            if prop_set then
  • code/branches/pch/src/tolua/tolua++.h

    r3127 r3138  
    5858#define tolua_pushfieldcppstring(L,lo,idx,s) tolua_pushfieldstring(L, lo, idx, s.c_str())
    5959
    60 #ifndef TEMPLATE_BIND
    61  #define TEMPLATE_BIND(p)
    62 #endif
    63 
     60#define TEMPLATE_BIND(p)
    6461#define TOLUA_TEMPLATE_BIND(p)
    65 
    6662#define TOLUA_PROTECTED_DESTRUCTOR
    6763#define TOLUA_PROPERTY_TYPE(p)
     
    8379
    8480TOLUA_API const char* tolua_typename (lua_State* L, int lo);
    85 TOLUA_API void tolua_error (lua_State* L, const char* msg, tolua_Error* err);
     81TOLUA_API void tolua_error (lua_State* L, char* msg, tolua_Error* err);
    8682TOLUA_API int tolua_isnoobj (lua_State* L, int lo, tolua_Error* err);
    8783TOLUA_API int tolua_isvalue (lua_State* L, int lo, int def, tolua_Error* err);
    88 TOLUA_API int tolua_isvaluenil (lua_State* L, int lo, tolua_Error* err);
    8984TOLUA_API int tolua_isboolean (lua_State* L, int lo, int def, tolua_Error* err);
    9085TOLUA_API int tolua_isnumber (lua_State* L, int lo, int def, tolua_Error* err);
     
    115110TOLUA_API int tolua_default_collect (lua_State* tolua_S);
    116111
    117 TOLUA_API void tolua_usertype (lua_State* L, const char* type);
    118 TOLUA_API void tolua_beginmodule (lua_State* L, const char* name);
     112TOLUA_API void tolua_usertype (lua_State* L, char* type);
     113TOLUA_API void tolua_beginmodule (lua_State* L, char* name);
    119114TOLUA_API void tolua_endmodule (lua_State* L);
    120 TOLUA_API void tolua_module (lua_State* L, const char* name, int hasvar);
    121 TOLUA_API void tolua_class (lua_State* L, const char* name, const char* base);
    122 TOLUA_API void tolua_cclass (lua_State* L, const char* lname, const char* name, const char* base, lua_CFunction col);
    123 TOLUA_API void tolua_function (lua_State* L, const char* name, lua_CFunction func);
    124 TOLUA_API void tolua_constant (lua_State* L, const char* name, lua_Number value);
    125 TOLUA_API void tolua_variable (lua_State* L, const char* name, lua_CFunction get, lua_CFunction set);
    126 TOLUA_API void tolua_array (lua_State* L,const char* name, lua_CFunction get, lua_CFunction set);
     115TOLUA_API void tolua_module (lua_State* L, char* name, int hasvar);
     116TOLUA_API void tolua_class (lua_State* L, char* name, char* base);
     117TOLUA_API void tolua_cclass (lua_State* L, char* lname, char* name, char* base, lua_CFunction col);
     118TOLUA_API void tolua_function (lua_State* L, char* name, lua_CFunction func);
     119TOLUA_API void tolua_constant (lua_State* L, char* name, double value);
     120TOLUA_API void tolua_variable (lua_State* L, char* name, lua_CFunction get, lua_CFunction set);
     121TOLUA_API void tolua_array (lua_State* L,char* name, lua_CFunction get, lua_CFunction set);
    127122
    128123/* TOLUA_API void tolua_set_call_event(lua_State* L, lua_CFunction func, char* type); */
     
    131126TOLUA_API void tolua_pushvalue (lua_State* L, int lo);
    132127TOLUA_API void tolua_pushboolean (lua_State* L, int value);
    133 TOLUA_API void tolua_pushnumber (lua_State* L, lua_Number value);
     128TOLUA_API void tolua_pushnumber (lua_State* L, double value);
    134129TOLUA_API void tolua_pushstring (lua_State* L, const char* value);
    135130TOLUA_API void tolua_pushuserdata (lua_State* L, void* value);
     
    138133TOLUA_API void tolua_pushfieldvalue (lua_State* L, int lo, int index, int v);
    139134TOLUA_API void tolua_pushfieldboolean (lua_State* L, int lo, int index, int v);
    140 TOLUA_API void tolua_pushfieldnumber (lua_State* L, int lo, int index, lua_Number v);
     135TOLUA_API void tolua_pushfieldnumber (lua_State* L, int lo, int index, double v);
    141136TOLUA_API void tolua_pushfieldstring (lua_State* L, int lo, int index, const char* v);
    142137TOLUA_API void tolua_pushfielduserdata (lua_State* L, int lo, int index, void* v);
     
    144139TOLUA_API void tolua_pushfieldusertype_and_takeownership (lua_State* L, int lo, int index, void* v, const char* type);
    145140
    146 TOLUA_API lua_Number tolua_tonumber (lua_State* L, int narg, lua_Number def);
     141TOLUA_API double tolua_tonumber (lua_State* L, int narg, double def);
    147142TOLUA_API const char* tolua_tostring (lua_State* L, int narg, const char* def);
    148143TOLUA_API void* tolua_touserdata (lua_State* L, int narg, void* def);
     
    150145TOLUA_API int tolua_tovalue (lua_State* L, int narg, int def);
    151146TOLUA_API int tolua_toboolean (lua_State* L, int narg, int def);
    152 TOLUA_API lua_Number tolua_tofieldnumber (lua_State* L, int lo, int index, lua_Number def);
     147TOLUA_API double tolua_tofieldnumber (lua_State* L, int lo, int index, double def);
    153148TOLUA_API const char* tolua_tofieldstring (lua_State* L, int lo, int index, const char* def);
    154149TOLUA_API void* tolua_tofielduserdata (lua_State* L, int lo, int index, void* def);
     
    181176TOLUA_API int tolua_fast_isa(lua_State *L, int mt_indexa, int mt_indexb, int super_index);
    182177
    183 #ifndef Mtolua_new
    184 #define Mtolua_new(EXP) new EXP
    185 #endif
    186 
    187 #ifndef Mtolua_delete
    188 #define Mtolua_delete(EXP) delete EXP
    189 #endif
    190 
    191 #ifndef Mtolua_new_dim
    192 #define Mtolua_new_dim(EXP, len) new EXP[len]
    193 #endif
    194 
    195 #ifndef Mtolua_delete_dim
    196 #define Mtolua_delete_dim(EXP) delete [] EXP
    197 #endif
    198 
    199 #ifndef tolua_outside
    200 #define tolua_outside
    201 #endif
    202 
    203 #ifndef tolua_owned
    204 #define tolua_owned
    205 #endif
    206 
    207178#ifdef __cplusplus
    208179}
  • code/branches/pch/src/tolua/tolua.c

    r3127 r3138  
    5050         "  -E  value[=value] : add extra values to the luastate\n"
    5151         "  -t       : export a list of types asociates with the C++ typeid name\n"
    52          "  -q       : don't print warnings to the console\n"
    5352         "  -h       : print this message.\n"
    5453         "Should the input file be omitted, stdin is assumed;\n"
     
    150149     case 'E': add_extra(L,argv[++i]); break;
    151150     case 't': setfield(L,t,"t",""); break;
    152      case 'q': setfield(L,t,"q",""); break;
    153151     default: error(argv[i]); break;
    154152    }
  • code/branches/pch/src/tolua/tolua_event.c

    r3127 r3138  
    372372static int class_eq_event (lua_State* L)
    373373{
    374         /* copying code from do_operator here to return false when no operator is found */
    375         if (lua_isuserdata(L,1))
    376         {
    377                 /* Try metatables */
    378                 lua_pushvalue(L,1);                     /* stack: op1 op2 */
    379                 while (lua_getmetatable(L,-1))
    380                 {                                       /* stack: op1 op2 op1 mt */
    381                         lua_remove(L,-2);                      /* stack: op1 op2 mt */
    382                         lua_pushstring(L,".eq");                  /* stack: op1 op2 mt key */
    383                         lua_rawget(L,-2);                      /* stack: obj key mt func */
    384                         if (lua_isfunction(L,-1))
    385                         {
    386                                 lua_pushvalue(L,1);
    387                                 lua_pushvalue(L,2);
    388                                 lua_call(L,2,1);
    389                                 return 1;
    390                         }
    391                         lua_settop(L,3);
    392                 }
    393         }
    394 
    395         lua_settop(L, 3);
    396         lua_pushboolean(L, 0);
    397         return 1;
     374        return do_operator(L,".eq");
    398375}
    399376
  • code/branches/pch/src/tolua/tolua_is.c

    r3127 r3138  
    8686}
    8787
    88 TOLUA_API void tolua_error (lua_State* L, const char* msg, tolua_Error* err)
     88TOLUA_API void tolua_error (lua_State* L, char* msg, tolua_Error* err)
    8989{
    9090        if (msg[0] == '#')
     
    117117
    118118/* the equivalent of lua_is* for usertable */
    119 static  int lua_isusertable (lua_State* L, int lo, const const char* type)
     119static  int lua_isusertable (lua_State* L, int lo, const char* type)
    120120{
    121121        int r = 0;
     
    213213 return 0;
    214214}
     215TOLUA_API int tolua_isvalue (lua_State* L, int lo, int def, tolua_Error* err)
     216{
     217        if (def || abs(lo)<=lua_gettop(L))  /* any valid index */
     218                return 1;
     219        err->index = lo;
     220        err->array = 0;
     221        err->type = "value";
     222        return 0;
     223}
    215224
    216225TOLUA_API int tolua_isboolean (lua_State* L, int lo, int def, tolua_Error* err)
     
    284293        err->array = 0;
    285294        err->type = "userdata";
    286         return 0;
    287 }
    288 
    289 TOLUA_API int tolua_isvaluenil (lua_State* L, int lo, tolua_Error* err) {
    290 
    291         if (lua_gettop(L)<abs(lo))
    292                 return 0; /* somebody else should chack this */
    293         if (!lua_isnil(L, lo))
    294                 return 0;
    295        
    296         err->index = lo;
    297         err->array = 0;
    298         err->type = "value";
    299         return 1;
    300 };
    301 
    302 TOLUA_API int tolua_isvalue (lua_State* L, int lo, int def, tolua_Error* err)
    303 {
    304         if (def || abs(lo)<=lua_gettop(L))  /* any valid index */
    305                 return 1;
    306         err->index = lo;
    307         err->array = 0;
    308         err->type = "value";
    309295        return 0;
    310296}
  • code/branches/pch/src/tolua/tolua_map.c

    r3127 r3138  
    390390        * It maps 'const type' as being also a 'type'
    391391*/
    392 TOLUA_API void tolua_usertype (lua_State* L, const char* type)
     392TOLUA_API void tolua_usertype (lua_State* L, char* type)
    393393{
    394394 char ctype[128] = "const ";
     
    404404        * It pushes the module (or class) table on the stack
    405405*/
    406 TOLUA_API void tolua_beginmodule (lua_State* L, const char* name)
     406TOLUA_API void tolua_beginmodule (lua_State* L, char* name)
    407407{
    408408        if (name)
     
    427427*/
    428428#if 1
    429 TOLUA_API void tolua_module (lua_State* L, const char* name, int hasvar)
     429TOLUA_API void tolua_module (lua_State* L, char* name, int hasvar)
    430430{
    431431        if (name)
     
    463463}
    464464#else
    465 TOLUA_API void tolua_module (lua_State* L, const char* name, int hasvar)
     465TOLUA_API void tolua_module (lua_State* L, char* name, int hasvar)
    466466{
    467467        if (name)
     
    519519        * It maps a C class, setting the appropriate inheritance and super classes.
    520520*/
    521 TOLUA_API void tolua_cclass (lua_State* L, const char* lname, const char* name, const char* base, lua_CFunction col)
     521TOLUA_API void tolua_cclass (lua_State* L, char* lname, char* name, char* base, lua_CFunction col)
    522522{
    523523        char cname[128] = "const ";
     
    578578        * It assigns a function into the current module (or class)
    579579*/
    580 TOLUA_API void tolua_function (lua_State* L, const char* name, lua_CFunction func)
     580TOLUA_API void tolua_function (lua_State* L, char* name, lua_CFunction func)
    581581{
    582582 lua_pushstring(L,name);
     
    601601        * It assigns a constant number into the current module (or class)
    602602*/
    603 TOLUA_API void tolua_constant (lua_State* L, const char* name, lua_Number value)
     603TOLUA_API void tolua_constant (lua_State* L, char* name, double value)
    604604{
    605605        lua_pushstring(L,name);
     
    612612        * It assigns a variable into the current module (or class)
    613613*/
    614 TOLUA_API void tolua_variable (lua_State* L, const char* name, lua_CFunction get, lua_CFunction set)
     614TOLUA_API void tolua_variable (lua_State* L, char* name, lua_CFunction get, lua_CFunction set)
    615615{
    616616        /* get func */
     
    664664        * It assigns an array into the current module (or class)
    665665*/
    666 TOLUA_API void tolua_array (lua_State* L, const char* name, lua_CFunction get, lua_CFunction set)
     666TOLUA_API void tolua_array (lua_State* L, char* name, lua_CFunction get, lua_CFunction set)
    667667{
    668668        lua_pushstring(L,".get");
  • code/branches/pch/src/tolua/tolua_push.c

    r3127 r3138  
    2828}
    2929
    30 TOLUA_API void tolua_pushnumber (lua_State* L, lua_Number value)
     30TOLUA_API void tolua_pushnumber (lua_State* L, double value)
    3131{
    3232 lua_pushnumber(L,value);
     
    134134
    135135
    136 TOLUA_API void tolua_pushfieldnumber (lua_State* L, int lo, int index, lua_Number v)
     136TOLUA_API void tolua_pushfieldnumber (lua_State* L, int lo, int index, double v)
    137137{
    138138 lua_pushnumber(L,index);
  • code/branches/pch/src/tolua/tolua_to.c

    r3127 r3138  
    1818#include <stdlib.h>
    1919
    20 TOLUA_API lua_Number tolua_tonumber (lua_State* L, int narg, lua_Number def)
     20TOLUA_API double tolua_tonumber (lua_State* L, int narg, double def)
    2121{
    2222 return lua_gettop(L)<abs(narg) ? def : lua_tonumber(L,narg);
     
    7272}
    7373
    74 TOLUA_API lua_Number tolua_tofieldnumber (lua_State* L, int lo, int index, lua_Number def)
     74TOLUA_API double tolua_tofieldnumber (lua_State* L, int lo, int index, double def)
    7575{
    7676 double v;
Note: See TracChangeset for help on using the changeset viewer.