diff options
Diffstat (limited to 'src/lua/variable.lua')
-rw-r--r-- | src/lua/variable.lua | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/src/lua/variable.lua b/src/lua/variable.lua deleted file mode 100644 index 310808b8..00000000 --- a/src/lua/variable.lua +++ /dev/null @@ -1,192 +0,0 @@ --- tolua: variable class --- Written by Waldemar Celes --- TeCGraf/PUC-Rio --- Jul 1998 --- $Id: variable.lua,v 1.4 2004/06/04 13:42:10 neil Exp $ - --- This code is free software; you can redistribute it and/or modify it. --- The software provided hereunder is on an "as is" basis, and --- the author has no obligation to provide maintenance, support, updates, --- enhancements, or modifications. - - --- Variable class --- Represents a extern variable or a public member of a class. --- Stores all fields present in a declaration. -classVariable = { - _base = classDeclaration, -} - -settag(classVariable,tolua_tag) - --- Print method -function classVariable:print (ident,close) - print(ident.."Variable{") - print(ident.." mod = '"..self.mod.."',") - print(ident.." type = '"..self.type.."',") - print(ident.." ptr = '"..self.ptr.."',") - print(ident.." name = '"..self.name.."',") - print(ident.." def = '"..self.def.."',") - print(ident.." ret = '"..self.ret.."',") - print(ident.."}"..close) -end - --- get variable value -function classVariable:getvalue (class,static) - if class and static then - return class..'::'..self.name - elseif class then - return 'self->'..self.name - else - return self.name - end -end - --- Write binding functions -function classVariable:supcode () - local class = self:inclass() - - -- get function ------------------------------------------------ - if class then - output("/* get function:",self.name," of class ",class," */") - else - output("/* get function:",self.name," */") - end - self.cgetname = self:cfuncname("toluaI_get") - output("static int",self.cgetname,"(lua_State* tolua_S)") - output("{") - - -- declare self, if the case - local _,_,static = strfind(self.mod,'^%s*(static)') - if class and static==nil then - output(' ',class,'*','self = ') - output('(',class,'*) ') - output('tolua_getusertype(tolua_S,1,0);') - elseif static then - _,_,self.mod = strfind(self.mod,'^%s*static%s%s*(.*)') - end - - - -- check self value - if class and static==nil then - output(' if (!self) TOLUA_ERR_SELF;'); - end - - -- return value - local t,ct = isbasic(self.type) - if t then - output(' tolua_push'..t..'(tolua_S,(',ct,')'..self:getvalue(class,static)..');') - else - if self.ptr == '&' or self.ptr == '' then - output(' tolua_pushusertype(tolua_S,(void*)&'..self:getvalue(class,static)..',',self.tag,');') - else - output(' tolua_pushusertype(tolua_S,(void*)'..self:getvalue(class,static)..',',self.tag,');') - end - end - output(' return 1;') - output('}') - output('\n') - - -- set function ------------------------------------------------ - if not strfind(self.mod,'const') then - if class then - output("/* set function:",self.name," of class ",class," */") - else - output("/* set function:",self.name," */") - end - self.csetname = self:cfuncname("toluaI_set") - output("static int",self.csetname,"(lua_State* tolua_S)") - output("{") - - -- declare self, if the case - local narg=1 - if class and static==nil then - output(' ',class,'*','self = ') - output('(',class,'*) ') - output('tolua_getusertype(tolua_S,1,0);') - -- check self value - output(' if (!self) TOLUA_ERR_SELF;'); - narg = narg+1 - elseif static then - _,_,self.mod = strfind(self.mod,'^%s*static%s%s*(.*)') - narg = narg+1 - end - - -- check type - output(' if (!'..self:outchecktype(narg)..')') - output(' TOLUA_ERR_ASSIGN;') - - -- assign value - local ptr = '' - if self.ptr~='' then ptr = '*' end - output(' ') - if class and static then - output(class..'::'..self.name) - elseif class then - output('self->'..self.name) - else - output(self.name) - end - local t = isbasic(self.type) - output(' = ') - if not t and ptr=='' then output('*') end - output('((',self.mod,self.type) - if not t then - output('*') - end - output(') ') - local def = 0 - if self.def ~= '' then def = self.def end - if t then - output('tolua_get'..t,'(tolua_S,',narg,',',def,'));') - else - output('tolua_getusertype(tolua_S,',narg,',',def,'));') - end - output(' return 0;') - output('}') - output('\n') - end - -end - -function classVariable:register () - local parent = self:inclass() or self:inmodule() - if parent then - if self.csetname then - output(' tolua_tablevar(tolua_S,"'..parent..'","'..self.lname..'",'..self.cgetname..','..self.csetname..');') - else - output(' tolua_tablevar(tolua_S,"'..parent..'","'..self.lname..'",'..self.cgetname..',NULL);') - end - else - if self.csetname then - output(' tolua_globalvar(tolua_S,"'..self.lname..'",'..self.cgetname..','..self.csetname..');') - else - output(' tolua_globalvar(tolua_S,"'..self.lname..'",'..self.cgetname..',NULL);') - end - end -end - -function classVariable:unregister () - if self:inclass()==nil and self:inmodule()==nil then - output(' lua_getglobals(tolua_S);') - output(' lua_pushstring(tolua_S,"',self.lname,'"); lua_pushnil(tolua_S); lua_rawset(tolua_S,-3);') - output(' lua_pop(tolua_S,1);') - end -end - - --- Internal constructor -function _Variable (t) - t._base = classVariable - settag(t,tolua_tag) - append(t) - return t -end - --- Constructor --- Expects a string representing the variable declaration. -function Variable (s) - return _Variable (Declaration(s,'var')) -end - - |