| 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 = { | 
|---|
| 19 |     classtype = 'module' | 
|---|
| 20 | } | 
|---|
| 21 | classModule.__index = classModule | 
|---|
| 22 | setmetatable(classModule,classContainer) | 
|---|
| 23 |  | 
|---|
| 24 | -- register module | 
|---|
| 25 | function classModule:register (pre) | 
|---|
| 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() | 
|---|
| 37 | end | 
|---|
| 38 |  | 
|---|
| 39 | -- Print method | 
|---|
| 40 | function classModule:print (ident,close) | 
|---|
| 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) | 
|---|
| 49 | end | 
|---|
| 50 |  | 
|---|
| 51 | -- Internal constructor | 
|---|
| 52 | function _Module (t) | 
|---|
| 53 |     setmetatable(t,classModule) | 
|---|
| 54 |     append(t) | 
|---|
| 55 |     return t | 
|---|
| 56 | end | 
|---|
| 57 |  | 
|---|
| 58 | -- Constructor | 
|---|
| 59 | -- Expects two string representing the module name and body. | 
|---|
| 60 | function Module (n,b) | 
|---|
| 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 | 
|---|
| 66 | end | 
|---|
| 67 |  | 
|---|
| 68 |  | 
|---|