3 #define ANONYMOUS_POST "AnOnYmOuS"
4 #define OVERLOAD_POST "OvErlOaD"
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
)
43 if (strlen (n
) <= max_symbol_len
) return n
;
46 if (!(tmp
[i
++] = n
[j
++])) break;
50 return name_not_too_long (strcpy (n
, strcat (tmp
, NAME_TRUNCATED
)));
53 Token
name_anon_regexp ()
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
)
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
)
71 sprintf (tmp
, "%s_"NANONU_POST
"%i", expand (r
), n
);
72 return new_symbol (strdup (tmp
));
75 Token
name_anonymous_struct ()
79 sprintf (tmp
, "_struct%i_" ANONYMOUS_POST
, i
++);
80 return new_symbol (strdup (tmp
));
83 Token
name_anonymous_union ()
87 sprintf (tmp
, "_union%i_" ANONYMOUS_POST
, i
++);
88 return new_symbol (strdup (tmp
));
91 Token
name_anonymous_enum ()
95 sprintf (tmp
, "_enum%i_" ANONYMOUS_POST
, i
++);
96 return new_symbol (strdup (tmp
));
99 Token
name_overload_fun (Token n
, char *astr
)
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
);
110 int bdi
= c
+ 10000 * n
;
113 if (N
= intfind (mfn
, bdi
))
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
);
124 Token
name_internal_object ()
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
])
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
);
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
);
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
);
169 Token
internal_identifiern (int n
)
171 static Token ns
[160]; // cache first 16
173 if (n
< 160 && ns
[n
]) return ns
[n
];
174 sprintf (tmp
, ARGV_PRE
"%i", n
);
176 return ns
[n
] = new_symbol (strdup (tmp
));
177 return new_symbol (strdup (tmp
));
180 Token
name_inherited (Token p
)
185 if (N
= intfind (mfn
, p
))
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
};
196 Token
name_typeid_var (Token o
)
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
)
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
)
213 sprintf (tmp
, "%s_UnWiNdER", expand (o
));
214 return new_symbol (strdup (name_not_too_long (tmp
)));
217 Token
name_arrdto_var (Token o
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
355 sprintf (tmp
, "%s%s\n", expand (t
), s
);
356 return new_symbol (strdup (tmp
));
359 Token
toktokcat (Token t1
, Token t2
)
362 sprintf (tmp
, "%s%s\n", expand (t1
), expand (t2
));
363 return new_symbol (strdup (tmp
));
366 Token
name_ebn_func (Token e
)
369 sprintf (tmp
, "%s_By_NaMe", expand (e
));
370 return new_symbol (strdup (tmp
));
373 Token
name_longbreak ()
377 sprintf (tmp
, "LoNgBrEaK%i", i
++);
378 return new_symbol (strdup (tmp
));
381 Token
name_longcontinue ()
385 sprintf (tmp
, "LoNgCoNtInUe%i", i
++);
386 return new_symbol (strdup (tmp
));