Branch data Line data Source code
1 : : /* do not edit automatically generated by mc from M2Batch. */
2 : : /* M2Batch.mod implements a queue for modules pending compilation.
3 : :
4 : : Copyright (C) 2001-2024 Free Software Foundation, Inc.
5 : : Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
6 : :
7 : : This file is part of GNU Modula-2.
8 : :
9 : : GNU Modula-2 is free software; you can redistribute it and/or modify
10 : : it under the terms of the GNU General Public License as published by
11 : : the Free Software Foundation; either version 3, or (at your option)
12 : : any later version.
13 : :
14 : : GNU Modula-2 is distributed in the hope that it will be useful, but
15 : : WITHOUT ANY WARRANTY; without even the implied warranty of
16 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 : : General Public License for more details.
18 : :
19 : : You should have received a copy of the GNU General Public License
20 : : along with GNU Modula-2; see the file COPYING3. If not see
21 : : <http://www.gnu.org/licenses/>. */
22 : :
23 : : #include "config.h"
24 : : #include "system.h"
25 : : #include "gcc-consolidation.h"
26 : :
27 : : #include <stdbool.h>
28 : : # if !defined (PROC_D)
29 : : # define PROC_D
30 : : typedef void (*PROC_t) (void);
31 : : typedef struct { PROC_t proc; } PROC;
32 : : # endif
33 : :
34 : : # include "GStorage.h"
35 : : # include "Gmcrts.h"
36 : : #if defined(__cplusplus)
37 : : # undef NULL
38 : : # define NULL 0
39 : : #endif
40 : : #define _M2Batch_C
41 : :
42 : : #include "GM2Batch.h"
43 : : # include "GM2Debug.h"
44 : : # include "GSymbolTable.h"
45 : : # include "GNameKey.h"
46 : : # include "GM2Printf.h"
47 : : # include "GM2Error.h"
48 : : # include "GM2MetaError.h"
49 : : # include "GIndexing.h"
50 : : # include "GLists.h"
51 : : # include "GStorage.h"
52 : : # include "GDynamicStrings.h"
53 : : # include "GM2Pass.h"
54 : :
55 : : typedef struct M2Batch_DoProcedure_p M2Batch_DoProcedure;
56 : :
57 : : typedef struct M2Batch__T1_r M2Batch__T1;
58 : :
59 : : typedef M2Batch__T1 *M2Batch_Module;
60 : :
61 : : struct M2Batch__T1_r {
62 : : unsigned int SymNo;
63 : : NameKey_Name Key;
64 : : DynamicStrings_String DefFile;
65 : : DynamicStrings_String ModFile;
66 : : };
67 : :
68 : : static Indexing_Index SeenList;
69 : : static Lists_List PendingQueue;
70 : :
71 : : /*
72 : : MakeDefinitionSource - is given a Name, n, which is used to create a Definition
73 : : module.
74 : : The Definition Module will be placed onto the
75 : : compilation pending queue if it has not yet been
76 : : compiled.
77 : : If the module has been compiled then no action is
78 : : taken. The Module Sym is returned.
79 : : */
80 : :
81 : : extern "C" unsigned int M2Batch_MakeDefinitionSource (unsigned int tok, NameKey_Name n);
82 : :
83 : : /*
84 : : MakeImplementationSource - is given a Name, n, which is used to create an
85 : : implementation module.
86 : : The implementation Module will be placed onto
87 : : the compilation pending
88 : : queue if it has not yet been compiled.
89 : : If the module has been compiled then no
90 : : action is taken. The Module Sym is returned.
91 : : */
92 : :
93 : : extern "C" unsigned int M2Batch_MakeImplementationSource (unsigned int tok, NameKey_Name n);
94 : :
95 : : /*
96 : : MakeProgramSource - is given a Name, n, which is used to create a program module.
97 : : The program module will be placed onto the compilation
98 : : pending queue if it has not yet been compiled.
99 : : If the module has been compiled then no action is taken.
100 : : The Module Sym is returned.
101 : : */
102 : :
103 : : extern "C" unsigned int M2Batch_MakeProgramSource (unsigned int tok, NameKey_Name n);
104 : :
105 : : /*
106 : : GetSource - returns with the symbol Sym of the next module to be compiled.
107 : : If Sym returns with value 0 then no module should be compiled.
108 : : */
109 : :
110 : : extern "C" unsigned int M2Batch_GetSource (void);
111 : :
112 : : /*
113 : : GetModuleNo - returns with symbol number of the nth module read during Pass 1.
114 : : */
115 : :
116 : : extern "C" unsigned int M2Batch_GetModuleNo (unsigned int nth);
117 : :
118 : : /*
119 : : IsModuleKnown - returns TRUE if the Name n matches a module.
120 : : */
121 : :
122 : : extern "C" bool M2Batch_IsModuleKnown (NameKey_Name n);
123 : :
124 : : /*
125 : : AssociateDefinition - associate the source file, filename, with the definition module,
126 : : Sym.
127 : : */
128 : :
129 : : extern "C" DynamicStrings_String M2Batch_AssociateDefinition (DynamicStrings_String filename, unsigned int Sym);
130 : :
131 : : /*
132 : : GetDefinitionModuleFile - returns the filename associated with the definition module, Sym.
133 : : It may return a temporary preprocessed file.
134 : : */
135 : :
136 : : extern "C" DynamicStrings_String M2Batch_GetDefinitionModuleFile (unsigned int Sym);
137 : :
138 : : /*
139 : : AssociateModule - associate the source file, filename, with the implementation/program
140 : : module, Sym.
141 : : */
142 : :
143 : : extern "C" DynamicStrings_String M2Batch_AssociateModule (DynamicStrings_String filename, unsigned int Sym);
144 : :
145 : : /*
146 : : GetModuleFile - returns the filename associated with the implementation/program module, Sym.
147 : : It may return a temporary preprocessed file.
148 : : */
149 : :
150 : : extern "C" DynamicStrings_String M2Batch_GetModuleFile (unsigned int Sym);
151 : :
152 : : /*
153 : : ForeachSourceModuleDo - for each source file call procedure, p.
154 : : */
155 : :
156 : : extern "C" void M2Batch_ForeachSourceModuleDo (M2Batch_DoProcedure p);
157 : :
158 : : /*
159 : : IsSourceSeen - returns TRUE if the source for the program module or
160 : : implementation module has been seen.
161 : : */
162 : :
163 : : extern "C" bool M2Batch_IsSourceSeen (unsigned int sym);
164 : :
165 : : /*
166 : : IsModuleSeen - returns TRUE if the source for module, name, has been seen.
167 : : */
168 : :
169 : : extern "C" bool M2Batch_IsModuleSeen (NameKey_Name n);
170 : :
171 : : /*
172 : : LookupModule - looks up a module in the current scope, if a module does not exist
173 : : then it creates a DefImp module.
174 : : */
175 : :
176 : : extern "C" unsigned int M2Batch_LookupModule (unsigned int tok, NameKey_Name n);
177 : :
178 : : /*
179 : : LookupOuterModule - looks up a module in the order of: current scope, then outer scope, finally if a
180 : : module does not exist then it creates a DefImp module.
181 : : */
182 : :
183 : : extern "C" unsigned int M2Batch_LookupOuterModule (unsigned int tok, NameKey_Name n);
184 : :
185 : : /*
186 : : Get - returns the module symbol matching name n.
187 : : */
188 : :
189 : : extern "C" unsigned int M2Batch_Get (NameKey_Name n);
190 : :
191 : : /*
192 : : DisplayModules - a debugging routine to textually emit the names of modules in the SeenList.
193 : : */
194 : :
195 : : extern "C" void M2Batch_DisplayModules (void);
196 : :
197 : : /*
198 : : Get - returns the module symbol matching name n.
199 : : */
200 : :
201 : : static void Put (unsigned int Sym, NameKey_Name n);
202 : :
203 : : /*
204 : : Get - returns the module symbol matching name n.
205 : : */
206 : :
207 : : static void Push (unsigned int Sym);
208 : :
209 : : /*
210 : : Get - returns the module symbol matching name n.
211 : : */
212 : :
213 : : static unsigned int Pop (void);
214 : :
215 : :
216 : : /*
217 : : Get - returns the module symbol matching name n.
218 : : */
219 : :
220 : 139862 : static void Put (unsigned int Sym, NameKey_Name n)
221 : : {
222 : 139862 : M2Batch_Module m;
223 : :
224 : 139862 : Storage_ALLOCATE ((void **) &m, sizeof (M2Batch__T1));
225 : 139862 : Indexing_IncludeIndiceIntoIndex (SeenList, reinterpret_cast <void *> (m));
226 : 139862 : m->SymNo = Sym;
227 : 139862 : m->Key = n;
228 : 139862 : m->DefFile = static_cast<DynamicStrings_String> (NULL);
229 : 139862 : m->ModFile = static_cast<DynamicStrings_String> (NULL);
230 : 139862 : }
231 : :
232 : :
233 : : /*
234 : : Get - returns the module symbol matching name n.
235 : : */
236 : :
237 : 139862 : static void Push (unsigned int Sym)
238 : : {
239 : 0 : Lists_IncludeItemIntoList (PendingQueue, Sym);
240 : 139862 : }
241 : :
242 : :
243 : : /*
244 : : Get - returns the module symbol matching name n.
245 : : */
246 : :
247 : 0 : static unsigned int Pop (void)
248 : : {
249 : 0 : unsigned int n;
250 : 0 : unsigned int Sym;
251 : :
252 : 0 : n = Lists_NoOfItemsInList (PendingQueue);
253 : 0 : if (n == 0)
254 : : {
255 : : return SymbolTable_NulSym;
256 : : }
257 : : else
258 : : {
259 : 0 : Sym = static_cast<unsigned int> (Lists_GetItemFromList (PendingQueue, n));
260 : 0 : Lists_RemoveItemFromList (PendingQueue, Sym);
261 : 0 : return Sym;
262 : : }
263 : : /* static analysis guarentees a RETURN statement will be used before here. */
264 : : __builtin_unreachable ();
265 : : }
266 : :
267 : :
268 : : /*
269 : : MakeDefinitionSource - is given a Name, n, which is used to create a Definition
270 : : module.
271 : : The Definition Module will be placed onto the
272 : : compilation pending queue if it has not yet been
273 : : compiled.
274 : : If the module has been compiled then no action is
275 : : taken. The Module Sym is returned.
276 : : */
277 : :
278 : 7988561 : extern "C" unsigned int M2Batch_MakeDefinitionSource (unsigned int tok, NameKey_Name n)
279 : : {
280 : 7988561 : unsigned int Sym;
281 : :
282 : 7988561 : Sym = M2Batch_Get (n);
283 : 7988561 : if (Sym == SymbolTable_NulSym)
284 : : {
285 : 125691 : M2Debug_Assert ((((! (M2Pass_IsPass1 ())) && (! (M2Pass_IsPass2 ()))) && (! (M2Pass_IsPass3 ()))) && (! (M2Pass_IsPassC ())));
286 : : /* Neither been compiled or on the Pending Queue */
287 : 125691 : Sym = SymbolTable_MakeDefImp (tok, n);
288 : 125691 : Put (Sym, n);
289 : 125691 : Push (Sym);
290 : : }
291 : : else
292 : : {
293 : 7862870 : SymbolTable_PutDeclared (tok, Sym);
294 : : }
295 : 7988561 : return Sym;
296 : : /* static analysis guarentees a RETURN statement will be used before here. */
297 : : __builtin_unreachable ();
298 : : }
299 : :
300 : :
301 : : /*
302 : : MakeImplementationSource - is given a Name, n, which is used to create an
303 : : implementation module.
304 : : The implementation Module will be placed onto
305 : : the compilation pending
306 : : queue if it has not yet been compiled.
307 : : If the module has been compiled then no
308 : : action is taken. The Module Sym is returned.
309 : : */
310 : :
311 : 263934 : extern "C" unsigned int M2Batch_MakeImplementationSource (unsigned int tok, NameKey_Name n)
312 : : {
313 : 263934 : unsigned int Sym;
314 : :
315 : 263934 : Sym = M2Batch_Get (n);
316 : 263934 : if (Sym == SymbolTable_NulSym)
317 : : {
318 : 2935 : M2Debug_Assert ((((! (M2Pass_IsPass1 ())) && (! (M2Pass_IsPass2 ()))) && (! (M2Pass_IsPass3 ()))) && (! (M2Pass_IsPassC ())));
319 : : /* Neither been compiled or on the Pending Queue */
320 : 2935 : Sym = SymbolTable_MakeDefImp (tok, n);
321 : 2935 : Put (Sym, n);
322 : 2935 : Push (Sym);
323 : : }
324 : : else
325 : : {
326 : 260999 : SymbolTable_PutDeclared (tok, Sym);
327 : : }
328 : 263934 : return Sym;
329 : : /* static analysis guarentees a RETURN statement will be used before here. */
330 : : __builtin_unreachable ();
331 : : }
332 : :
333 : :
334 : : /*
335 : : MakeProgramSource - is given a Name, n, which is used to create a program module.
336 : : The program module will be placed onto the compilation
337 : : pending queue if it has not yet been compiled.
338 : : If the module has been compiled then no action is taken.
339 : : The Module Sym is returned.
340 : : */
341 : :
342 : 66780 : extern "C" unsigned int M2Batch_MakeProgramSource (unsigned int tok, NameKey_Name n)
343 : : {
344 : 66780 : unsigned int Sym;
345 : :
346 : 66780 : Sym = M2Batch_Get (n);
347 : 66780 : if (Sym == SymbolTable_NulSym)
348 : : {
349 : 11236 : M2Debug_Assert ((((! (M2Pass_IsPass1 ())) && (! (M2Pass_IsPass2 ()))) && (! (M2Pass_IsPass3 ()))) && (! (M2Pass_IsPassC ())));
350 : : /* Neither been compiled or on the Pending Queue */
351 : 11236 : Sym = SymbolTable_MakeModule (tok, n);
352 : 11236 : Put (Sym, n);
353 : 11236 : Push (Sym);
354 : : }
355 : : else
356 : : {
357 : 55544 : SymbolTable_PutDeclared (tok, Sym);
358 : : }
359 : 66780 : return Sym;
360 : : /* static analysis guarentees a RETURN statement will be used before here. */
361 : : __builtin_unreachable ();
362 : : }
363 : :
364 : :
365 : : /*
366 : : GetSource - returns with the symbol Sym of the next module to be compiled.
367 : : If Sym returns with value 0 then no module should be compiled.
368 : : */
369 : :
370 : 0 : extern "C" unsigned int M2Batch_GetSource (void)
371 : : {
372 : 0 : return Pop ();
373 : : /* static analysis guarentees a RETURN statement will be used before here. */
374 : : __builtin_unreachable ();
375 : : }
376 : :
377 : :
378 : : /*
379 : : GetModuleNo - returns with symbol number of the nth module read during Pass 1.
380 : : */
381 : :
382 : 699925 : extern "C" unsigned int M2Batch_GetModuleNo (unsigned int nth)
383 : : {
384 : 699925 : M2Batch_Module m;
385 : :
386 : 699925 : M2Debug_Assert (nth != 0);
387 : 699925 : if (Indexing_InBounds (SeenList, nth))
388 : : {
389 : 629978 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, nth));
390 : 629978 : return m->SymNo;
391 : : }
392 : : else
393 : : {
394 : : return SymbolTable_NulSym;
395 : : }
396 : : /* static analysis guarentees a RETURN statement will be used before here. */
397 : : __builtin_unreachable ();
398 : : }
399 : :
400 : :
401 : : /*
402 : : IsModuleKnown - returns TRUE if the Name n matches a module.
403 : : */
404 : :
405 : 6 : extern "C" bool M2Batch_IsModuleKnown (NameKey_Name n)
406 : : {
407 : 6 : return (M2Batch_Get (n)) != SymbolTable_NulSym;
408 : : /* static analysis guarentees a RETURN statement will be used before here. */
409 : : __builtin_unreachable ();
410 : : }
411 : :
412 : :
413 : : /*
414 : : AssociateDefinition - associate the source file, filename, with the definition module,
415 : : Sym.
416 : : */
417 : :
418 : 115558 : extern "C" DynamicStrings_String M2Batch_AssociateDefinition (DynamicStrings_String filename, unsigned int Sym)
419 : : {
420 : 115558 : unsigned int no;
421 : 115558 : unsigned int i;
422 : 115558 : M2Batch_Module m;
423 : :
424 : 115558 : i = 1;
425 : 115558 : no = Indexing_HighIndice (SeenList);
426 : 1238628 : while (i <= no)
427 : : {
428 : 1123070 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
429 : 1123070 : if (m->SymNo == Sym)
430 : : {
431 : 115558 : m->DefFile = filename;
432 : 115558 : return filename;
433 : : }
434 : : else
435 : : {
436 : 1007512 : i += 1;
437 : : }
438 : : }
439 : 0 : M2Error_InternalError ((const char *) "failed to find module sym", 25);
440 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2Batch.def", 20, 1);
441 : : __builtin_unreachable ();
442 : : }
443 : :
444 : :
445 : : /*
446 : : GetDefinitionModuleFile - returns the filename associated with the definition module, Sym.
447 : : It may return a temporary preprocessed file.
448 : : */
449 : :
450 : 503168 : extern "C" DynamicStrings_String M2Batch_GetDefinitionModuleFile (unsigned int Sym)
451 : : {
452 : 503168 : unsigned int no;
453 : 503168 : unsigned int i;
454 : 503168 : M2Batch_Module m;
455 : :
456 : 503168 : i = 1;
457 : 503168 : no = Indexing_HighIndice (SeenList);
458 : 5159660 : while (i <= no)
459 : : {
460 : 4656492 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
461 : 4656492 : if (m->SymNo == Sym)
462 : : {
463 : 503168 : return m->DefFile;
464 : : }
465 : : else
466 : : {
467 : 4153324 : i += 1;
468 : : }
469 : : }
470 : : return static_cast<DynamicStrings_String> (NULL);
471 : : /* static analysis guarentees a RETURN statement will be used before here. */
472 : : __builtin_unreachable ();
473 : : }
474 : :
475 : :
476 : : /*
477 : : AssociateModule - associate the source file, filename, with the implementation/program
478 : : module, Sym.
479 : : */
480 : :
481 : 63533 : extern "C" DynamicStrings_String M2Batch_AssociateModule (DynamicStrings_String filename, unsigned int Sym)
482 : : {
483 : 63533 : unsigned int no;
484 : 63533 : unsigned int i;
485 : 63533 : M2Batch_Module m;
486 : :
487 : 63533 : i = 1;
488 : 63533 : no = Indexing_HighIndice (SeenList);
489 : 764177 : while (i <= no)
490 : : {
491 : 700644 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
492 : 700644 : if (m->SymNo == Sym)
493 : : {
494 : 63533 : m->ModFile = filename;
495 : 63533 : return filename;
496 : : }
497 : : else
498 : : {
499 : 637111 : i += 1;
500 : : }
501 : : }
502 : 0 : M2Error_InternalError ((const char *) "failed to find module sym", 25);
503 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2Batch.def", 20, 1);
504 : : __builtin_unreachable ();
505 : : }
506 : :
507 : :
508 : : /*
509 : : GetModuleFile - returns the filename associated with the implementation/program module, Sym.
510 : : It may return a temporary preprocessed file.
511 : : */
512 : :
513 : 515810 : extern "C" DynamicStrings_String M2Batch_GetModuleFile (unsigned int Sym)
514 : : {
515 : 515810 : unsigned int no;
516 : 515810 : unsigned int i;
517 : 515810 : M2Batch_Module m;
518 : :
519 : 515810 : i = 1;
520 : 515810 : no = Indexing_HighIndice (SeenList);
521 : 5299496 : while (i <= no)
522 : : {
523 : 4783686 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
524 : 4783686 : if (m->SymNo == Sym)
525 : : {
526 : 515810 : return m->ModFile;
527 : : }
528 : : else
529 : : {
530 : 4267876 : i += 1;
531 : : }
532 : : }
533 : : return static_cast<DynamicStrings_String> (NULL);
534 : : /* static analysis guarentees a RETURN statement will be used before here. */
535 : : __builtin_unreachable ();
536 : : }
537 : :
538 : :
539 : : /*
540 : : ForeachSourceModuleDo - for each source file call procedure, p.
541 : : */
542 : :
543 : 96 : extern "C" void M2Batch_ForeachSourceModuleDo (M2Batch_DoProcedure p)
544 : : {
545 : 96 : unsigned int i;
546 : 96 : unsigned int no;
547 : 96 : M2Batch_Module m;
548 : :
549 : 96 : i = 1;
550 : 96 : no = Indexing_HighIndice (SeenList);
551 : 2328 : while (i <= no)
552 : : {
553 : 2136 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
554 : 2136 : if (m->ModFile != NULL)
555 : : {
556 : 1632 : (*p.proc) (m->SymNo);
557 : : }
558 : 2136 : i += 1;
559 : : }
560 : 96 : }
561 : :
562 : :
563 : : /*
564 : : IsSourceSeen - returns TRUE if the source for the program module or
565 : : implementation module has been seen.
566 : : */
567 : :
568 : 1482 : extern "C" bool M2Batch_IsSourceSeen (unsigned int sym)
569 : : {
570 : 2964 : M2Debug_Assert ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)));
571 : 1482 : return (M2Batch_GetModuleFile (sym)) != NULL;
572 : : /* static analysis guarentees a RETURN statement will be used before here. */
573 : : __builtin_unreachable ();
574 : : }
575 : :
576 : :
577 : : /*
578 : : IsModuleSeen - returns TRUE if the source for module, name, has been seen.
579 : : */
580 : :
581 : 0 : extern "C" bool M2Batch_IsModuleSeen (NameKey_Name n)
582 : : {
583 : 0 : return (M2Batch_Get (n)) != SymbolTable_NulSym;
584 : : /* static analysis guarentees a RETURN statement will be used before here. */
585 : : __builtin_unreachable ();
586 : : }
587 : :
588 : :
589 : : /*
590 : : LookupModule - looks up a module in the current scope, if a module does not exist
591 : : then it creates a DefImp module.
592 : : */
593 : :
594 : 1067750 : extern "C" unsigned int M2Batch_LookupModule (unsigned int tok, NameKey_Name n)
595 : : {
596 : 1067750 : unsigned int sym;
597 : :
598 : 1067750 : sym = SymbolTable_GetSym (n);
599 : 1067750 : if (sym == SymbolTable_NulSym)
600 : : {
601 : 1054556 : return M2Batch_MakeDefinitionSource (tok, n);
602 : : }
603 : 13194 : else if ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)))
604 : : {
605 : : /* avoid dangling else. */
606 : 12378 : return sym;
607 : : }
608 : : else
609 : : {
610 : : /* avoid dangling else. */
611 : 816 : return M2Batch_MakeDefinitionSource (tok, n);
612 : : }
613 : : /* static analysis guarentees a RETURN statement will be used before here. */
614 : : __builtin_unreachable ();
615 : : }
616 : :
617 : :
618 : : /*
619 : : LookupOuterModule - looks up a module in the order of: current scope, then outer scope, finally if a
620 : : module does not exist then it creates a DefImp module.
621 : : */
622 : :
623 : 80326 : extern "C" unsigned int M2Batch_LookupOuterModule (unsigned int tok, NameKey_Name n)
624 : : {
625 : 80326 : unsigned int outer;
626 : 80326 : unsigned int sym;
627 : :
628 : 80326 : sym = SymbolTable_GetSym (n);
629 : 80326 : if (sym == SymbolTable_NulSym)
630 : : {
631 : 79520 : outer = SymbolTable_GetScope (SymbolTable_GetCurrentScope ());
632 : 79520 : if (outer != SymbolTable_NulSym)
633 : : {
634 : 264 : sym = SymbolTable_GetLocalSym (outer, n);
635 : : }
636 : 79520 : if (sym == SymbolTable_NulSym)
637 : : {
638 : : /* not a local module, so it must be refering to a definition module. */
639 : 79376 : sym = M2Batch_MakeDefinitionSource (tok, n);
640 : : }
641 : : }
642 : 80326 : if ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)))
643 : : {
644 : 80290 : return sym;
645 : : }
646 : : else
647 : : {
648 : 36 : return M2Batch_MakeDefinitionSource (tok, n);
649 : : }
650 : : /* static analysis guarentees a RETURN statement will be used before here. */
651 : : __builtin_unreachable ();
652 : : }
653 : :
654 : :
655 : : /*
656 : : Get - returns the module symbol matching name n.
657 : : */
658 : :
659 : 8319281 : extern "C" unsigned int M2Batch_Get (NameKey_Name n)
660 : : {
661 : 8319281 : unsigned int i;
662 : 8319281 : unsigned int no;
663 : 8319281 : M2Batch_Module m;
664 : :
665 : 8319281 : i = 1;
666 : 8319281 : no = Indexing_HighIndice (SeenList);
667 : 78530488 : while (i <= no)
668 : : {
669 : 70071345 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
670 : 70071345 : if (m->Key == n)
671 : : {
672 : 8179419 : return m->SymNo;
673 : : }
674 : : else
675 : : {
676 : 61891926 : i += 1;
677 : : }
678 : : }
679 : : return SymbolTable_NulSym;
680 : : /* static analysis guarentees a RETURN statement will be used before here. */
681 : : __builtin_unreachable ();
682 : : }
683 : :
684 : :
685 : : /*
686 : : DisplayModules - a debugging routine to textually emit the names of modules in the SeenList.
687 : : */
688 : :
689 : 0 : extern "C" void M2Batch_DisplayModules (void)
690 : : {
691 : 0 : M2Batch_Module m;
692 : 0 : unsigned int n;
693 : 0 : unsigned int i;
694 : :
695 : 0 : i = 1;
696 : 0 : n = Indexing_HighIndice (SeenList);
697 : 0 : while (i <= n)
698 : : {
699 : 0 : m = static_cast<M2Batch_Module> (Indexing_GetIndice (SeenList, i));
700 : 0 : M2Printf_printf2 ((const char *) "Module %a %d\\n", 14, (const unsigned char *) &m->Key, (sizeof (m->Key)-1), (const unsigned char *) &i, (sizeof (i)-1));
701 : 0 : i += 1;
702 : : }
703 : 0 : }
704 : :
705 : 14232 : extern "C" void _M2_M2Batch_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
706 : : {
707 : 14232 : Lists_InitList (&PendingQueue);
708 : 14232 : SeenList = Indexing_InitIndex (1);
709 : 14232 : }
710 : :
711 : 0 : extern "C" void _M2_M2Batch_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
712 : : {
713 : 0 : }
|