[1650] | 1 | -- tolua: module class |
---|
| 2 | -- Written by Waldemar Celes |
---|
| 3 | -- TeCGraf/PUC-Rio |
---|
| 4 | -- Jul 1998 |
---|
| 5 | -- $Id: $ |
---|
| 6 | |
---|
| 7 | -- This code is free software; you can redistribute it and/or modify it. |
---|
| 8 | -- The software provided hereunder is on an "as is" basis, and |
---|
| 9 | -- the author has no obligation to provide maintenance, support, updates, |
---|
| 10 | -- enhancements, or modifications. |
---|
| 11 | |
---|
| 12 | |
---|
| 13 | |
---|
| 14 | -- Module class |
---|
| 15 | -- Represents module. |
---|
| 16 | -- The following fields are stored: |
---|
| 17 | -- {i} = list of objects in the module. |
---|
| 18 | classModule = { |
---|
[2229] | 19 | classtype = 'module' |
---|
[1650] | 20 | } |
---|
| 21 | classModule.__index = classModule |
---|
| 22 | setmetatable(classModule,classContainer) |
---|
| 23 | |
---|
| 24 | -- register module |
---|
| 25 | function classModule:register (pre) |
---|
[2229] | 26 | pre = pre or '' |
---|
| 27 | push(self) |
---|
| 28 | output(pre..'tolua_module(tolua_S,"'..self.name..'",',self:hasvar(),');') |
---|
| 29 | output(pre..'tolua_beginmodule(tolua_S,"'..self.name..'");') |
---|
| 30 | local i=1 |
---|
| 31 | while self[i] do |
---|
| 32 | self[i]:register(pre..' ') |
---|
| 33 | i = i+1 |
---|
| 34 | end |
---|
| 35 | output(pre..'tolua_endmodule(tolua_S);') |
---|
| 36 | pop() |
---|
[1650] | 37 | end |
---|
| 38 | |
---|
| 39 | -- Print method |
---|
| 40 | function classModule:print (ident,close) |
---|
[2229] | 41 | print(ident.."Module{") |
---|
| 42 | print(ident.." name = '"..self.name.."';") |
---|
| 43 | local i=1 |
---|
| 44 | while self[i] do |
---|
| 45 | self[i]:print(ident.." ",",") |
---|
| 46 | i = i+1 |
---|
| 47 | end |
---|
| 48 | print(ident.."}"..close) |
---|
[1650] | 49 | end |
---|
| 50 | |
---|
| 51 | -- Internal constructor |
---|
| 52 | function _Module (t) |
---|
[2229] | 53 | setmetatable(t,classModule) |
---|
| 54 | append(t) |
---|
| 55 | return t |
---|
[1650] | 56 | end |
---|
| 57 | |
---|
| 58 | -- Constructor |
---|
| 59 | -- Expects two string representing the module name and body. |
---|
| 60 | function Module (n,b) |
---|
[2229] | 61 | local t = _Module(_Container{name=n}) |
---|
| 62 | push(t) |
---|
| 63 | t:parse(strsub(b,2,strlen(b)-1)) -- eliminate braces |
---|
| 64 | pop() |
---|
| 65 | return t |
---|
[1650] | 66 | end |
---|
| 67 | |
---|
| 68 | |
---|