diff options
Diffstat (limited to 'src/lua/operator.lua')
-rw-r--r-- | src/lua/operator.lua | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/src/lua/operator.lua b/src/lua/operator.lua deleted file mode 100644 index 7a42cf1b..00000000 --- a/src/lua/operator.lua +++ /dev/null @@ -1,111 +0,0 @@ --- tolua: operator class --- Written by Waldemar Celes --- TeCGraf/PUC-Rio --- Jul 1998 --- $Id: operator.lua,v 1.2 2001/11/26 23:00:27 darkgod 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. - - --- Operator class --- Represents an operator function or a class operator method. --- It stores the same fields as functions do plus: --- kind = set of character representing the operator (as it appers in C++ code) -classOperator = { - kind = '', - _base = classFunction, -} -settag(classOperator,tolua_tag) - --- table to transform operator kind into the appropriate tag method name -_TM = {['+'] = 'operator_add', - ['-'] = 'operator_sub', - ['*'] = 'operator_mul', - ['/'] = 'operator_div', - ['<'] = 'operator_lt', - ['[]'] = 'operator_get', - ['&[]'] = 'operator_set', - } - - --- Print method -function classOperator:print (ident,close) - print(ident.."Operator{") - print(ident.." kind = '"..self.kind.."',") - print(ident.." mod = '"..self.mod.."',") - print(ident.." type = '"..self.type.."',") - print(ident.." ptr = '"..self.ptr.."',") - print(ident.." name = '"..self.name.."',") - print(ident.." const = '"..self.const.."',") - print(ident.." cname = '"..self.cname.."',") - print(ident.." lname = '"..self.lname.."',") - print(ident.." args = {") - local i=1 - while self.args[i] do - self.args[i]:print(ident.." ",",") - i = i+1 - end - print(ident.." }") - print(ident.."}"..close) -end - --- Internal constructor -function _Operator (t) - t._base = classOperator - settag(t,tolua_tag) - - if t.const ~= 'const' and t.const ~= '' then - error("#invalid 'const' specification") - end - - append(t) - if not t:inclass() then - error("#operator can only be defined as class member") - end - - t.cname = t:cfuncname("toluaI")..t:overload(t) - t.name = t.name..t.kind - return t -end - --- Constructor --- Expects three strings: one representing the function declaration, --- another representing the argument list, and the third representing --- the "const" or empty string. -function Operator (d,k,a,c) - local t = split(strsub(a,2,strlen(a)-1),',') -- eliminate braces - local i=1 - local l = {n=0} - while t[i] do - l.n = l.n+1 - l[l.n] = Declaration(t[i],'var') - i = i+1 - end - if k == '[]' then - d = gsub(d,'&','') - elseif k=='&[]' then - l.n = l.n+1 - l[l.n] = Declaration(d,'var') - l[l.n].name = 'toluaI_value' - end - local f = Declaration(d,'func') - if k == '[]' and (l[1]==nil or isbasic(l[1].type)~='number') then - error('operator[] can only be defined for numeric index.') - end - f.args = l - f.const = c - f.kind = gsub(k,"%s","") - f.lname = _TM[f.kind] - if not f.lname then - error("tolua: no support for operator" .. f.kind) - end - if f.kind == '[]' and not strfind(f.mod,'const') then - Operator(d,'&'..k,a,c) -- create correspoding set operator - end - return _Operator(f) -end - - |