Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gui/src/tolua/lua/typedef.lua @ 1650

Last change on this file since 1650 was 1650, checked in by rgrieder, 16 years ago

added preliminary automatic creation of tolua generator that creates the actual executable
(please don't ask about the egg-hen question…)

File size: 1.7 KB
Line 
1-- tolua: typedef 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-- Typedef class
15-- Represents a type synonym.
16-- The 'de facto' type replaces the typedef before the
17-- remaining code is parsed.
18-- The following fields are stored:
19--   utype = typedef name
20--   type = 'the facto' type
21--   mod = modifiers to the 'de facto' type
22classTypedef = {
23 utype = '',
24 mod = '',
25 type = ''
26}
27classTypedef.__index = classTypedef
28
29-- Print method
30function classTypedef:print (ident,close)
31 print(ident.."Typedef{")
32 print(ident.." utype = '"..self.utype.."',")
33 print(ident.." mod = '"..self.mod.."',")
34 print(ident.." type = '"..self.type.."',")
35 print(ident.."}"..close)
36end
37
38-- Return it's not a variable
39function classTypedef:isvariable ()
40 return false
41end
42
43-- Internal constructor
44function _Typedef (t)
45 setmetatable(t,classTypedef)
46 t.type = resolve_template_types(t.type)
47 appendtypedef(t)
48 return t
49end
50
51-- Constructor
52-- Expects one string representing the type definition.
53function Typedef (s)
54 if strfind(string.gsub(s, '%b<>', ''),'[%*&]') then
55  tolua_error("#invalid typedef: pointers (and references) are not supported")
56 end
57 local o = {mod = ''}
58 if string.find(s, "[<>]") then
59        _,_,o.type,o.utype = string.find(s, "^%s*([^<>]+%b<>[^%s]*)%s+(.-)$")
60 else
61        local t = split(gsub(s,"%s%s*"," ")," ")
62        o = {
63          utype = t[t.n],
64          type = t[t.n-1],
65          mod = concat(t,1,t.n-2),
66         }
67 end
68 return _Typedef(o)
69end
70
71
Note: See TracBrowser for help on using the repository browser.