Added package with the documentation and the examples
[lwc.git] / inames.c
blobc2c23d0b4f921781c9bd30dc6b5806741314bc2b
1 #include "global.h"
3 #define ANONYMOUS_POST "AnOnYmOuS"
4 #define OVERLOAD_POST "OvErlOaD"
5 #define MEMBER_POST ""
6 #define TDEF_POST "TyPeDeF"
7 #define UNNAMED_POST "ObJeCt"
8 #define INHERIT_POST "InHeRiTeD"
9 #define INHSTOR_POST "iNhErItEd"
10 #define DOWNCAST_POST "DoWnCaSt"
11 #define UPCAST_POST "UpCaSt"
12 #define ARGV_PRE "__ArGv"
13 #define VIRTUAL_POST "virtual"
14 #define VIRTUALI_POST "ViRtUaLTaBlE"
15 #define VTABLEREC_POST "ViRtUaLTaBlE_StRuCt"
16 #define VIRTFUNC_POST "ViRtUaLLity"
17 #define VVAR_POST "ViRtUaLVar"
18 #define RTTI_POST "DcAsTRttI"
19 #define INCTOR_POST "__ICoNsTRuCTion"
20 #define INDTOR_POST "__IDeStRuCtIoN"
21 #define INVDTOR_POST "__vIDeStRuCtIoN"
22 #define VTDER_POST "DeRRiVe"
23 #define NANONU_POST "anonNeSt"
24 #define NONULL_POST "NoNuLL"
25 #define IREGEXP_PRE "rEgExP"
26 #define TYPEID_POST "TyPeId"
27 #define ARRDTOR_POST "aRrDtOr"
28 #define OBJCTOR "ObJFiLe_ctor"
30 #define NAME_TRUNCATED "_TrNC"
32 #define INTERN_IDENT1 "lwcUniQUe"
33 #define INTERN_IDENT2 "lwcUniQUe2"
34 #define INTERN_IDENT3 "lwcUniQUe3"
36 int max_symbol_len = 512;
38 static char *name_not_too_long (char *n)
40 char tmp [1024];
41 int i, j;
43 if (strlen (n) <= max_symbol_len) return n;
44 i = j = 0;
45 for (;;) {
46 if (!(tmp [i++] = n [j++])) break;
47 if (!n [j++]) break;
49 tmp [i] = 0;
50 return name_not_too_long (strcpy (n, strcat (tmp, NAME_TRUNCATED)));
53 Token name_anon_regexp ()
55 static int i;
56 char tmp [128];
57 sprintf (tmp, IREGEXP_PRE"%i", i++);
58 return new_symbol (strdup (name_not_too_long (tmp)));
61 Token name_local_typedef (Token c, Token n)
63 char tmp [512];
64 sprintf (tmp, TDEF_POST"_%s_"MAGIC_DIGIT"%s", expand (n), expand (c));
65 return new_symbol (strdup (name_not_too_long (tmp)));
68 Token name_anon_union (int n, Token r)
70 char tmp [40];
71 sprintf (tmp, "%s_"NANONU_POST"%i", expand (r), n);
72 return new_symbol (strdup (tmp));
75 Token name_anonymous_struct ()
77 static int i;
78 char tmp [32];
79 sprintf (tmp, "_struct%i_" ANONYMOUS_POST, i++);
80 return new_symbol (strdup (tmp));
83 Token name_anonymous_union ()
85 static int i;
86 char tmp [32];
87 sprintf (tmp, "_union%i_" ANONYMOUS_POST, i++);
88 return new_symbol (strdup (tmp));
91 Token name_anonymous_enum ()
93 static int i;
94 char tmp [32];
95 sprintf (tmp, "_enum%i_" ANONYMOUS_POST, i++);
96 return new_symbol (strdup (tmp));
99 Token name_overload_fun (Token n, char *astr)
101 char tmp [512];
102 sprintf (tmp, "%s_"OVERLOAD_POST"_%s", expand (n), astr);
103 return new_symbol (strdup (name_not_too_long (tmp)));
106 Token name_member_function (recID r, Token n)
108 Token c = name_of_struct (r);
109 static intnode *mfn;
110 int bdi = c + 10000 * n;
111 intnode *N;
113 if (N = intfind (mfn, bdi))
114 return N->v.i;
116 char tmp [512];
117 sprintf (tmp, "%s_"MAGIC_DIGIT"%s_"MEMBER_POST, expand (c), expand (n));
118 c = new_symbol (strdup (name_not_too_long (tmp)));
119 union ival u = { .i = c };
120 intadd (&mfn, bdi, u);
121 return c;
124 Token name_internal_object ()
126 static int i;
127 char tmp [32];
128 sprintf (tmp, "tmp_%i"UNNAMED_POST, i++);
129 return new_symbol (strdup (tmp));
132 Token name_uniq_var (int i)
134 static Token cache [32];
135 if (i < 32 && cache [i])
136 return cache [i];
137 char tmp [32];
138 sprintf (tmp, "UnIqE_%i", i);
139 return i < 32 ? cache [i] = new_symbol (strdup (tmp)) : new_symbol (strdup (tmp));
142 Token internal_identifier1 ()
144 static Token ret = -1;
145 if (ret != -1) return ret;
146 if (!(ret = Lookup_Symbol (INTERN_IDENT1)))
147 ret = new_symbol (INTERN_IDENT1);
148 return ret;
151 Token internal_identifier2 ()
153 static Token ret = -1;
154 if (ret != -1) return ret;
155 if (!(ret = Lookup_Symbol (INTERN_IDENT2)))
156 ret = new_symbol (INTERN_IDENT2);
157 return ret;
160 Token internal_identifier3 ()
162 static Token ret = -1;
163 if (ret != -1) return ret;
164 if (!(ret = Lookup_Symbol (INTERN_IDENT3)))
165 ret = new_symbol (INTERN_IDENT3);
166 return ret;
169 Token internal_identifiern (int n)
171 static Token ns [160]; // cache first 16
172 char tmp [32];
173 if (n < 160 && ns [n]) return ns [n];
174 sprintf (tmp, ARGV_PRE"%i", n);
175 if (n < 160)
176 return ns [n] = new_symbol (strdup (tmp));
177 return new_symbol (strdup (tmp));
180 Token name_inherited (Token p)
182 static intnode *mfn;
183 intnode *N;
185 if (N = intfind (mfn, p))
186 return N->v.i;
188 char tmp [512];
189 sprintf (tmp, "%s_"INHERIT_POST, expand (p));
190 Token c = new_symbol (strdup (name_not_too_long (tmp)));
191 union ival u = { .i = c };
192 intadd (&mfn, p, u);
193 return c;
196 Token name_typeid_var (Token o)
198 char tmp [512];
199 sprintf (tmp, "%s_"TYPEID_POST, expand (o));
200 return new_symbol (strdup (name_not_too_long (tmp)));
203 Token name_glob_static_local (Token o)
205 char tmp [512];
206 sprintf (tmp, "%s_%s_sTaTiC", expand (in_function), expand (o));
207 return new_symbol (strdup (name_not_too_long (tmp)));
210 Token name_unwind_var (Token o)
212 char tmp [512];
213 sprintf (tmp, "%s_UnWiNdER", expand (o));
214 return new_symbol (strdup (name_not_too_long (tmp)));
217 Token name_arrdto_var (Token o)
219 char tmp [512];
220 sprintf (tmp, "%s_aRRdToR", expand (o));
221 return new_symbol (strdup (name_not_too_long (tmp)));
224 Token name_downcast (Token b, Token d)
226 char tmp [512];
227 sprintf (tmp, "%s_%s_"DOWNCAST_POST, expand (b), expand (d));
228 return new_symbol (strdup (name_not_too_long (tmp)));
231 Token name_downcast_safe (Token b, Token d)
233 char tmp [512];
234 sprintf (tmp, "%s_%s_"DOWNCAST_POST NONULL_POST, expand (b), expand (d));
235 return new_symbol (strdup (name_not_too_long (tmp)));
238 Token name_upcast_safe (Token b, Token d)
240 char tmp [512];
241 sprintf (tmp, "%s_%s_"UPCAST_POST NONULL_POST, expand (b), expand (d));
242 return new_symbol (strdup (name_not_too_long (tmp)));
245 Token name_virtual_slot (recID r, Token f, typeID t)
247 char ts [256];
248 char tmp [512];
250 type_string (ts, t);
251 sprintf (tmp, "%s_%s%s_"VIRTUAL_POST, expand (f), expand (name_of_struct (r)), ts);
252 return new_symbol (strdup (name_not_too_long (tmp)));
255 Token name_virtual_variable (recID r, Token m)
257 char tmp [512];
258 sprintf (tmp, "%s_%s_"VVAR_POST, expand (m), expand (name_of_struct (r)));
259 return new_symbol (strdup (name_not_too_long (tmp)));
262 Token name_instance (recID ra, recID rc)
264 char tmp [512];
265 sprintf (tmp, "%s_%s_"VIRTUALI_POST, expand (name_of_struct (ra)), expand (name_of_struct (rc)));
266 return new_symbol (strdup (name_not_too_long (tmp)));
269 Token name_virtual_table (recID r)
271 char tmp [512];
272 sprintf (tmp, "%s_"VTABLEREC_POST, expand (name_of_struct (r)));
273 return new_symbol (strdup (name_not_too_long (tmp)));
276 Token name_arrdtor (recID r)
278 char tmp [512];
279 sprintf (tmp, "%s_"ARRDTOR_POST, expand (name_of_struct (r)));
280 return new_symbol (strdup (name_not_too_long (tmp)));
283 Token name_virtual_inner (recID r, recID r2, Token f, typeID t)
285 char ts [256];
286 char tmp [128];
288 type_string (ts, t);
289 sprintf (tmp, "%s%s_%s%s_"VIRTFUNC_POST, expand (name_of_struct (r)),
290 expand (name_of_struct (r2)), expand (f), ts);
291 return new_symbol (strdup (name_not_too_long (tmp)));
294 Token name_name_enumerate (Token n, int i)
296 char *tmp = (char*) alloca (strlen (expand (n)) + 5);
297 sprintf (tmp, "%s%i", expand (n), i);
298 return new_symbol (strdup (tmp));
301 Token name_rtti_slot (recID r1, Token t2)
303 char tmp [512];
304 sprintf (tmp, "%s_%s_"RTTI_POST, expand (name_of_struct (r1)), expand (t2));
305 return new_symbol (strdup (name_not_too_long (tmp)));
308 Token name_derrive_memb (recID r)
310 char tmp [512];
311 sprintf (tmp, "%s_"VTDER_POST, expand (name_of_struct (r)));
312 return new_symbol (strdup (name_not_too_long (tmp)));
315 Token name_intern_ctor (recID r)
317 char tmp [512];
318 sprintf (tmp, "%s_"INCTOR_POST, expand (name_of_struct (r)));
319 return new_symbol (strdup (name_not_too_long (tmp)));
322 Token name_intern_vdtor (recID r)
324 char tmp [512];
325 sprintf (tmp, "%s_"INVDTOR_POST, expand (name_of_struct (r)));
326 return new_symbol (strdup (name_not_too_long (tmp)));
329 Token name_intern_dtor (recID r)
331 char tmp [512];
332 sprintf (tmp, "%s_"INDTOR_POST, expand (name_of_struct (r)));
333 return new_symbol (strdup (name_not_too_long (tmp)));
336 Token name_storage_inherit (recID r)
338 char tmp [512];
339 sprintf (tmp, "%s_"INHSTOR_POST, expand (name_of_struct (r)));
340 return new_symbol (strdup (name_not_too_long (tmp)));
343 Token name_global_ctor (int i)
345 char tmp [512];
346 sprintf (tmp, OBJCTOR"%i_", i);
347 return new_symbol (strdup (name_not_too_long (tmp)));
350 Token name_derrive_union;
352 Token tokstrcat (Token t, char *s)
354 char tmp [512];
355 sprintf (tmp, "%s%s\n", expand (t), s);
356 return new_symbol (strdup (tmp));
359 Token toktokcat (Token t1, Token t2)
361 char tmp [512];
362 sprintf (tmp, "%s%s\n", expand (t1), expand (t2));
363 return new_symbol (strdup (tmp));
366 Token name_ebn_func (Token e)
368 char tmp [512];
369 sprintf (tmp, "%s_By_NaMe", expand (e));
370 return new_symbol (strdup (tmp));
373 Token name_longbreak ()
375 static int i;
376 char tmp [512];
377 sprintf (tmp, "LoNgBrEaK%i", i++);
378 return new_symbol (strdup (tmp));
381 Token name_longcontinue ()
383 static int i;
384 char tmp [512];
385 sprintf (tmp, "LoNgCoNtInUe%i", i++);
386 return new_symbol (strdup (tmp));