diff options
author | Manoj Srivastava <srivasta@debian.org> | 2014-05-14 23:54:09 -0700 |
---|---|---|
committer | Manoj Srivastava <srivasta@debian.org> | 2014-05-14 23:54:09 -0700 |
commit | 4f8b58cc5366bfc2ea3b56fe6ff0443464d10f0f (patch) | |
tree | a0a9cad00e7916b9a97e14831fb362f21871cbef /src/lua/variable.lua |
tome (2.3.11-ah-2) unstable; urgency=low
* Modified the install paths to deploy to the FHS compliant
/usr/games/tome and /var/games/tome, as we have always done
* This is a major change, and includes theming. Some of the options have
changed. Because of this, the manual page has been removed; there is a
command line help option and in game help until the manual page is
rewritten.
# imported from the archive
Diffstat (limited to 'src/lua/variable.lua')
-rw-r--r-- | src/lua/variable.lua | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/lua/variable.lua b/src/lua/variable.lua new file mode 100644 index 00000000..310808b8 --- /dev/null +++ b/src/lua/variable.lua @@ -0,0 +1,192 @@ +-- 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 + + |