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
72