Branch data Line data Source code
1 : : /* do not edit automatically generated by mc from SymbolTable. */
2 : : /* SymbolTable.mod provides access to the symbol table.
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 : : # if !defined (TRUE)
35 : : # define TRUE (1==1)
36 : : # endif
37 : :
38 : : # if !defined (FALSE)
39 : : # define FALSE (1==0)
40 : : # endif
41 : :
42 : : # include "GStorage.h"
43 : : # include "Gmcrts.h"
44 : : #if defined(__cplusplus)
45 : : # undef NULL
46 : : # define NULL 0
47 : : #endif
48 : : #define _SymbolTable_C
49 : :
50 : : #include "GSymbolTable.h"
51 : : # include "GSYSTEM.h"
52 : : # include "GStorage.h"
53 : : # include "GM2Debug.h"
54 : : # include "Glibc.h"
55 : : # include "GASCII.h"
56 : : # include "GIndexing.h"
57 : : # include "GSets.h"
58 : : # include "Ggcctypes.h"
59 : : # include "GM2Options.h"
60 : : # include "GM2LexBuf.h"
61 : : # include "GM2ALU.h"
62 : : # include "GM2Error.h"
63 : : # include "GM2MetaError.h"
64 : : # include "GFormatStrings.h"
65 : : # include "GM2Printf.h"
66 : : # include "GDynamicStrings.h"
67 : : # include "GLists.h"
68 : : # include "GNameKey.h"
69 : : # include "GSymbolKey.h"
70 : : # include "GM2Base.h"
71 : : # include "GM2System.h"
72 : : # include "Gm2expr.h"
73 : : # include "Gm2linemap.h"
74 : : # include "GStrLib.h"
75 : : # include "Gm2builtins.h"
76 : : # include "GM2Comp.h"
77 : : # include "GM2Scaffold.h"
78 : : # include "GM2SymInit.h"
79 : : # include "GM2RTS.h"
80 : :
81 : : # define SymbolTable_NulSym 0
82 : : typedef struct SymbolTable_FamilyOperation_p SymbolTable_FamilyOperation;
83 : :
84 : : # define DebugUnknowns false
85 : : # define DebugUnknownToken false
86 : : # define UnboundedAddressName "_m2_contents"
87 : : # define UnboundedHighName "_m2_high_%d"
88 : : # define BreakSym 203
89 : : typedef struct SymbolTable_ProcAnyBoolean_p SymbolTable_ProcAnyBoolean;
90 : :
91 : : typedef struct SymbolTable_ProcAnyCardinal_p SymbolTable_ProcAnyCardinal;
92 : :
93 : : typedef struct SymbolTable_LRLists_a SymbolTable_LRLists;
94 : :
95 : : typedef struct SymbolTable_LRInitDesc_a SymbolTable_LRInitDesc;
96 : :
97 : : typedef struct SymbolTable_Where_r SymbolTable_Where;
98 : :
99 : : typedef struct SymbolTable_VarDecl_r SymbolTable_VarDecl;
100 : :
101 : : typedef struct SymbolTable_PackedInfo_r SymbolTable_PackedInfo;
102 : :
103 : : typedef struct SymbolTable_ModuleCtor_r SymbolTable_ModuleCtor;
104 : :
105 : : typedef struct SymbolTable_SymImportStatement_r SymbolTable_SymImportStatement;
106 : :
107 : : typedef struct SymbolTable_SymImport_r SymbolTable_SymImport;
108 : :
109 : : typedef struct SymbolTable_SymEquiv_r SymbolTable_SymEquiv;
110 : :
111 : : typedef struct SymbolTable_SymOAFamily_r SymbolTable_SymOAFamily;
112 : :
113 : : typedef struct SymbolTable_SymTuple_r SymbolTable_SymTuple;
114 : :
115 : : typedef struct SymbolTable_SymError_r SymbolTable_SymError;
116 : :
117 : : typedef struct SymbolTable_SymObject_r SymbolTable_SymObject;
118 : :
119 : : typedef struct SymbolTable_SymUndefined_r SymbolTable_SymUndefined;
120 : :
121 : : typedef struct SymbolTable_SymGnuAsm_r SymbolTable_SymGnuAsm;
122 : :
123 : : typedef struct SymbolTable_SymInterface_r SymbolTable_SymInterface;
124 : :
125 : : typedef struct SymbolTable_SymVarient_r SymbolTable_SymVarient;
126 : :
127 : : typedef struct SymbolTable_SymRecord_r SymbolTable_SymRecord;
128 : :
129 : : typedef struct SymbolTable_SymSubrange_r SymbolTable_SymSubrange;
130 : :
131 : : typedef struct SymbolTable_SymEnumeration_r SymbolTable_SymEnumeration;
132 : :
133 : : typedef struct SymbolTable_SymArray_r SymbolTable_SymArray;
134 : :
135 : : typedef struct SymbolTable_SymSubscript_r SymbolTable_SymSubscript;
136 : :
137 : : typedef struct SymbolTable_SymUnbounded_r SymbolTable_SymUnbounded;
138 : :
139 : : typedef struct SymbolTable_SymPartialUnbounded_r SymbolTable_SymPartialUnbounded;
140 : :
141 : : typedef struct SymbolTable_ProcedureDeclaration_r SymbolTable_ProcedureDeclaration;
142 : :
143 : : typedef struct SymbolTable_SymProcedure_r SymbolTable_SymProcedure;
144 : :
145 : : typedef struct SymbolTable_SymProcType_r SymbolTable_SymProcType;
146 : :
147 : : typedef struct SymbolTable_SymParam_r SymbolTable_SymParam;
148 : :
149 : : typedef struct SymbolTable_SymVarParam_r SymbolTable_SymVarParam;
150 : :
151 : : typedef struct SymbolTable_SymConstString_r SymbolTable_SymConstString;
152 : :
153 : : typedef struct SymbolTable_SymConstLit_r SymbolTable_SymConstLit;
154 : :
155 : : typedef struct SymbolTable_SymConstVar_r SymbolTable_SymConstVar;
156 : :
157 : : typedef struct SymbolTable_SymVar_r SymbolTable_SymVar;
158 : :
159 : : typedef struct SymbolTable_SymType_r SymbolTable_SymType;
160 : :
161 : : typedef struct SymbolTable_SymPointer_r SymbolTable_SymPointer;
162 : :
163 : : typedef struct SymbolTable_SymRecordField_r SymbolTable_SymRecordField;
164 : :
165 : : typedef struct SymbolTable_SymVarientField_r SymbolTable_SymVarientField;
166 : :
167 : : typedef struct SymbolTable_SymEnumerationField_r SymbolTable_SymEnumerationField;
168 : :
169 : : typedef struct SymbolTable_SymSet_r SymbolTable_SymSet;
170 : :
171 : : typedef struct SymbolTable_SymDefImp_r SymbolTable_SymDefImp;
172 : :
173 : : typedef struct SymbolTable_SymModule_r SymbolTable_SymModule;
174 : :
175 : : typedef struct SymbolTable_SymDummy_r SymbolTable_SymDummy;
176 : :
177 : : typedef struct SymbolTable_Symbol_r SymbolTable_Symbol;
178 : :
179 : : typedef struct SymbolTable_CallFrame_r SymbolTable_CallFrame;
180 : :
181 : : typedef struct SymbolTable_CheckProcedure_p SymbolTable_CheckProcedure;
182 : :
183 : : typedef SymbolTable_Symbol *SymbolTable_PtrToSymbol;
184 : :
185 : : typedef SymbolTable_CallFrame *SymbolTable_PtrToCallFrame;
186 : :
187 : : typedef struct SymbolTable__T4_r SymbolTable__T4;
188 : :
189 : : typedef SymbolTable__T4 *SymbolTable_ConstLitPoolEntry;
190 : :
191 : : typedef struct SymbolTable__T5_r SymbolTable__T5;
192 : :
193 : : typedef SymbolTable__T5 *SymbolTable_PtrToAsmConstraint;
194 : :
195 : : typedef struct SymbolTable__T6_a SymbolTable__T6;
196 : :
197 : : typedef enum {SymbolTable_m2str, SymbolTable_cstr, SymbolTable_m2nulstr, SymbolTable_cnulstr} SymbolTable_ConstStringVariant;
198 : :
199 : : typedef enum {SymbolTable_RecordSym, SymbolTable_VarientSym, SymbolTable_DummySym, SymbolTable_VarSym, SymbolTable_EnumerationSym, SymbolTable_SubrangeSym, SymbolTable_ArraySym, SymbolTable_ConstStringSym, SymbolTable_ConstVarSym, SymbolTable_ConstLitSym, SymbolTable_VarParamSym, SymbolTable_ParamSym, SymbolTable_PointerSym, SymbolTable_UndefinedSym, SymbolTable_TypeSym, SymbolTable_RecordFieldSym, SymbolTable_VarientFieldSym, SymbolTable_EnumerationFieldSym, SymbolTable_DefImpSym, SymbolTable_ModuleSym, SymbolTable_SetSym, SymbolTable_ProcedureSym, SymbolTable_ProcTypeSym, SymbolTable_SubscriptSym, SymbolTable_UnboundedSym, SymbolTable_GnuAsmSym, SymbolTable_InterfaceSym, SymbolTable_ObjectSym, SymbolTable_PartialUnboundedSym, SymbolTable_TupleSym, SymbolTable_OAFamilySym, SymbolTable_ImportSym, SymbolTable_ImportStatementSym, SymbolTable_EquivSym, SymbolTable_ErrorSym} SymbolTable_TypeOfSymbol;
200 : :
201 : : typedef bool (*SymbolTable_ProcAnyBoolean_t) (unsigned int, SymbolTable_ProcedureKind);
202 : : struct SymbolTable_ProcAnyBoolean_p { SymbolTable_ProcAnyBoolean_t proc; };
203 : :
204 : : typedef unsigned int (*SymbolTable_ProcAnyCardinal_t) (unsigned int, SymbolTable_ProcedureKind);
205 : : struct SymbolTable_ProcAnyCardinal_p { SymbolTable_ProcAnyCardinal_t proc; };
206 : :
207 : : struct SymbolTable_LRLists_a { Lists_List array[SymbolTable_LeftValue-SymbolTable_RightValue+1]; };
208 : : struct SymbolTable_LRInitDesc_a { M2SymInit_InitDesc array[SymbolTable_LeftValue-SymbolTable_RightValue+1]; };
209 : : struct SymbolTable_Where_r {
210 : : unsigned int DefDeclared;
211 : : unsigned int FirstUsed;
212 : : unsigned int ModDeclared;
213 : : };
214 : :
215 : : struct SymbolTable_VarDecl_r {
216 : : unsigned int FullTok;
217 : : unsigned int VarTok;
218 : : unsigned int TypeTok;
219 : : };
220 : :
221 : : struct SymbolTable_PackedInfo_r {
222 : : bool IsPacked;
223 : : unsigned int PackedEquiv;
224 : : };
225 : :
226 : : struct SymbolTable_ModuleCtor_r {
227 : : unsigned int ctor;
228 : : unsigned int init;
229 : : unsigned int fini;
230 : : unsigned int dep;
231 : : };
232 : :
233 : : struct SymbolTable_SymOAFamily_r {
234 : : unsigned int MaxDimensions;
235 : : unsigned int SimpleType;
236 : : Indexing_Index Dimensions;
237 : : };
238 : :
239 : : struct SymbolTable_SymPartialUnbounded_r {
240 : : unsigned int Type;
241 : : unsigned int NDim;
242 : : };
243 : :
244 : : struct SymbolTable_ProcedureDeclaration_r {
245 : : Lists_List ListOfParam;
246 : : bool Defined;
247 : : bool ParamDefined;
248 : : bool HasVarArgs;
249 : : bool HasOptArg;
250 : : bool IsNoReturn;
251 : : bool ReturnOptional;
252 : : unsigned int ReturnTypeTok;
253 : : unsigned int ProcedureTok;
254 : : };
255 : :
256 : : struct SymbolTable_SymDummy_r {
257 : : unsigned int NextFree;
258 : : };
259 : :
260 : : struct SymbolTable_CallFrame_r {
261 : : unsigned int Main;
262 : : unsigned int Search;
263 : : unsigned int Start;
264 : : };
265 : :
266 : : typedef void (*SymbolTable_CheckProcedure_t) (unsigned int);
267 : : struct SymbolTable_CheckProcedure_p { SymbolTable_CheckProcedure_t proc; };
268 : :
269 : : struct SymbolTable__T4_r {
270 : : unsigned int sym;
271 : : unsigned int tok;
272 : : NameKey_Name constName;
273 : : unsigned int constType;
274 : : SymbolTable_ConstLitPoolEntry next;
275 : : };
276 : :
277 : : struct SymbolTable__T5_r {
278 : : unsigned int tokpos;
279 : : NameKey_Name name;
280 : : unsigned int str;
281 : : unsigned int obj;
282 : : };
283 : :
284 : : struct SymbolTable_SymImportStatement_r {
285 : : unsigned int listNo;
286 : : Lists_List ListOfImports;
287 : : SymbolTable_Where at;
288 : : };
289 : :
290 : : struct SymbolTable_SymImport_r {
291 : : unsigned int module;
292 : : unsigned int listNo;
293 : : bool qualified;
294 : : SymbolTable_Where at;
295 : : };
296 : :
297 : : struct SymbolTable_SymEquiv_r {
298 : : SymbolTable_PackedInfo packedInfo;
299 : : unsigned int nonPacked;
300 : : };
301 : :
302 : : struct SymbolTable_SymTuple_r {
303 : : SymbolTable_Where At;
304 : : unsigned int nTuple;
305 : : Indexing_Index list;
306 : : };
307 : :
308 : : struct SymbolTable_SymError_r {
309 : : NameKey_Name name;
310 : : unsigned int Scope;
311 : : SymbolTable_Where At;
312 : : };
313 : :
314 : : struct SymbolTable_SymObject_r {
315 : : NameKey_Name name;
316 : : SymbolTable_Where At;
317 : : };
318 : :
319 : : struct SymbolTable_SymUndefined_r {
320 : : NameKey_Name name;
321 : : unsigned int oafamily;
322 : : M2Error_ErrorScope errorScope;
323 : : SymbolTable_Where At;
324 : : };
325 : :
326 : : struct SymbolTable_SymGnuAsm_r {
327 : : unsigned int String;
328 : : SymbolTable_Where At;
329 : : unsigned int Inputs;
330 : : unsigned int Outputs;
331 : : unsigned int Trashed;
332 : : bool Volatile;
333 : : bool Simple;
334 : : };
335 : :
336 : : struct SymbolTable_SymInterface_r {
337 : : Indexing_Index Parameters;
338 : : SymbolTable_Where At;
339 : : };
340 : :
341 : : struct SymbolTable_SymVarient_r {
342 : : M2ALU_PtrToValue Size;
343 : : Lists_List ListOfSons;
344 : : bool DeclPacked;
345 : : bool DeclResolved;
346 : : unsigned int Parent;
347 : : unsigned int Varient;
348 : : unsigned int tag;
349 : : unsigned int Scope;
350 : : SymbolTable_Where At;
351 : : };
352 : :
353 : : struct SymbolTable_SymRecord_r {
354 : : NameKey_Name name;
355 : : SymbolKey_SymbolTree LocalSymbols;
356 : : M2ALU_PtrToValue Size;
357 : : Lists_List ListOfSons;
358 : : unsigned int Align;
359 : : unsigned int DefaultAlign;
360 : : bool DeclPacked;
361 : : bool DeclResolved;
362 : : unsigned int oafamily;
363 : : unsigned int Parent;
364 : : unsigned int Scope;
365 : : SymbolTable_Where At;
366 : : };
367 : :
368 : : struct SymbolTable_SymSubrange_r {
369 : : NameKey_Name name;
370 : : unsigned int Low;
371 : : unsigned int High;
372 : : M2ALU_PtrToValue Size;
373 : : unsigned int Type;
374 : : unsigned int Align;
375 : : SymbolKey_SymbolTree ConstLitTree;
376 : : SymbolTable_PackedInfo packedInfo;
377 : : unsigned int oafamily;
378 : : unsigned int Scope;
379 : : SymbolTable_Where At;
380 : : };
381 : :
382 : : struct SymbolTable_SymEnumeration_r {
383 : : NameKey_Name name;
384 : : unsigned int NoOfElements;
385 : : SymbolKey_SymbolTree LocalSymbols;
386 : : Lists_List ListOfFields;
387 : : M2ALU_PtrToValue Size;
388 : : SymbolTable_PackedInfo packedInfo;
389 : : unsigned int oafamily;
390 : : unsigned int Scope;
391 : : SymbolTable_Where At;
392 : : };
393 : :
394 : : struct SymbolTable_SymArray_r {
395 : : NameKey_Name name;
396 : : unsigned int Subscript;
397 : : M2ALU_PtrToValue Size;
398 : : M2ALU_PtrToValue Offset;
399 : : unsigned int Type;
400 : : unsigned int Align;
401 : : bool Large;
402 : : unsigned int oafamily;
403 : : unsigned int Scope;
404 : : SymbolTable_Where At;
405 : : };
406 : :
407 : : struct SymbolTable_SymSubscript_r {
408 : : unsigned int Type;
409 : : M2ALU_PtrToValue Size;
410 : : M2ALU_PtrToValue Offset;
411 : : SymbolTable_Where At;
412 : : };
413 : :
414 : : struct SymbolTable_SymUnbounded_r {
415 : : unsigned int Type;
416 : : M2ALU_PtrToValue Size;
417 : : unsigned int RecordType;
418 : : unsigned int Dimensions;
419 : : unsigned int Scope;
420 : : SymbolTable_Where At;
421 : : };
422 : :
423 : : struct SymbolTable_SymProcType_r {
424 : : NameKey_Name name;
425 : : Lists_List ListOfParam;
426 : : bool HasVarArgs;
427 : : bool HasOptArg;
428 : : unsigned int OptArgInit;
429 : : unsigned int ReturnType;
430 : : bool ReturnOptional;
431 : : unsigned int ReturnTypeTok;
432 : : unsigned int Scope;
433 : : M2ALU_PtrToValue Size;
434 : : M2ALU_PtrToValue TotalParamSize;
435 : : unsigned int oafamily;
436 : : SymbolTable_Where At;
437 : : };
438 : :
439 : : struct SymbolTable_SymParam_r {
440 : : NameKey_Name name;
441 : : unsigned int Type;
442 : : bool IsUnbounded;
443 : : unsigned int ShadowVar;
444 : : SymbolTable_Where At;
445 : : };
446 : :
447 : : struct SymbolTable_SymVarParam_r {
448 : : NameKey_Name name;
449 : : unsigned int Type;
450 : : bool IsUnbounded;
451 : : unsigned int HeapVar;
452 : : unsigned int ShadowVar;
453 : : SymbolTable_Where At;
454 : : };
455 : :
456 : : struct SymbolTable_SymConstString_r {
457 : : NameKey_Name name;
458 : : NameKey_Name Contents;
459 : : unsigned int Length;
460 : : SymbolTable_ConstStringVariant StringVariant;
461 : : bool Known;
462 : : unsigned int Scope;
463 : : SymbolTable_Where At;
464 : : };
465 : :
466 : : struct SymbolTable_SymConstLit_r {
467 : : NameKey_Name name;
468 : : M2ALU_PtrToValue Value;
469 : : unsigned int Type;
470 : : bool IsSet;
471 : : bool IsConstructor;
472 : : bool IsInternal;
473 : : unsigned int FromType;
474 : : bool RangeError;
475 : : bool UnresFromType;
476 : : unsigned int Scope;
477 : : SymbolTable_Where At;
478 : : };
479 : :
480 : : struct SymbolTable_SymConstVar_r {
481 : : NameKey_Name name;
482 : : M2ALU_PtrToValue Value;
483 : : unsigned int Type;
484 : : bool IsConditional;
485 : : bool IsSet;
486 : : bool IsConstructor;
487 : : unsigned int FromType;
488 : : bool UnresFromType;
489 : : bool IsTemp;
490 : : unsigned int Scope;
491 : : SymbolTable_Where At;
492 : : };
493 : :
494 : : struct SymbolTable_SymVar_r {
495 : : NameKey_Name name;
496 : : unsigned int Type;
497 : : unsigned int BackType;
498 : : M2ALU_PtrToValue Size;
499 : : M2ALU_PtrToValue Offset;
500 : : SymbolTable_ModeOfAddr AddrMode;
501 : : unsigned int Scope;
502 : : bool AtAddress;
503 : : unsigned int Address;
504 : : bool IsComponentRef;
505 : : Indexing_Index list;
506 : : bool IsConditional;
507 : : bool IsTemp;
508 : : bool IsParam;
509 : : bool IsPointerCheck;
510 : : bool IsWritten;
511 : : bool IsSSA;
512 : : bool IsConst;
513 : : bool ArrayRef;
514 : : bool Heap;
515 : : SymbolTable_LRInitDesc InitState;
516 : : SymbolTable_VarDecl Declared;
517 : : SymbolTable_Where At;
518 : : SymbolTable_LRLists ReadUsageList;
519 : : SymbolTable_LRLists WriteUsageList;
520 : : };
521 : :
522 : : struct SymbolTable_SymType_r {
523 : : NameKey_Name name;
524 : : unsigned int Type;
525 : : bool IsHidden;
526 : : SymbolKey_SymbolTree ConstLitTree;
527 : : M2ALU_PtrToValue Size;
528 : : SymbolTable_PackedInfo packedInfo;
529 : : unsigned int oafamily;
530 : : unsigned int Align;
531 : : unsigned int Scope;
532 : : SymbolTable_Where At;
533 : : };
534 : :
535 : : struct SymbolTable_SymPointer_r {
536 : : NameKey_Name name;
537 : : unsigned int Type;
538 : : M2ALU_PtrToValue Size;
539 : : unsigned int Align;
540 : : SymbolKey_SymbolTree ConstLitTree;
541 : : unsigned int oafamily;
542 : : unsigned int Scope;
543 : : SymbolTable_Where At;
544 : : };
545 : :
546 : : struct SymbolTable_SymRecordField_r {
547 : : NameKey_Name name;
548 : : unsigned int Type;
549 : : bool Tag;
550 : : M2ALU_PtrToValue Size;
551 : : M2ALU_PtrToValue Offset;
552 : : unsigned int Parent;
553 : : unsigned int Varient;
554 : : unsigned int Align;
555 : : bool Used;
556 : : bool DeclPacked;
557 : : bool DeclResolved;
558 : : unsigned int Scope;
559 : : SymbolTable_Where At;
560 : : };
561 : :
562 : : struct SymbolTable_SymVarientField_r {
563 : : NameKey_Name name;
564 : : M2ALU_PtrToValue Size;
565 : : M2ALU_PtrToValue Offset;
566 : : unsigned int Parent;
567 : : unsigned int Varient;
568 : : Lists_List ListOfSons;
569 : : bool DeclPacked;
570 : : bool DeclResolved;
571 : : unsigned int Scope;
572 : : SymbolTable_Where At;
573 : : };
574 : :
575 : : struct SymbolTable_SymEnumerationField_r {
576 : : NameKey_Name name;
577 : : M2ALU_PtrToValue Value;
578 : : unsigned int Type;
579 : : unsigned int Scope;
580 : : SymbolTable_Where At;
581 : : };
582 : :
583 : : struct SymbolTable_SymSet_r {
584 : : NameKey_Name name;
585 : : unsigned int Type;
586 : : SymbolTable_PackedInfo packedInfo;
587 : : bool ispacked;
588 : : M2ALU_PtrToValue Size;
589 : : unsigned int oafamily;
590 : : unsigned int Scope;
591 : : SymbolTable_Where At;
592 : : };
593 : :
594 : : struct SymbolTable_SymDefImp_r {
595 : : NameKey_Name name;
596 : : NameKey_Name libname;
597 : : SymbolTable_ModuleCtor ctors;
598 : : Lists_List DefListOfDep;
599 : : Lists_List ModListOfDep;
600 : : SymbolKey_SymbolTree ExportQualifiedTree;
601 : : SymbolKey_SymbolTree ExportUnQualifiedTree;
602 : : SymbolKey_SymbolTree ExportRequest;
603 : : Lists_List IncludeList;
604 : : Lists_List DefIncludeList;
605 : : SymbolKey_SymbolTree ImportTree;
606 : : SymbolKey_SymbolTree ExportUndeclared;
607 : : SymbolKey_SymbolTree NeedToBeImplemented;
608 : : SymbolKey_SymbolTree LocalSymbols;
609 : : Lists_List EnumerationScopeList;
610 : : SymbolKey_SymbolTree NamedObjects;
611 : : SymbolKey_SymbolTree NamedImports;
612 : : SymbolKey_SymbolTree WhereImported;
613 : : unsigned int Priority;
614 : : SymbolKey_SymbolTree Unresolved;
615 : : unsigned int StartQuad;
616 : : unsigned int EndQuad;
617 : : unsigned int StartFinishQuad;
618 : : unsigned int EndFinishQuad;
619 : : tree FinallyFunction;
620 : : bool ExceptionFinally;
621 : : bool ExceptionBlock;
622 : : bool ContainsHiddenType;
623 : : bool ContainsBuiltin;
624 : : bool ForC;
625 : : bool NeedExportList;
626 : : bool ModLink;
627 : : bool DefLink;
628 : : bool Builtin;
629 : : Lists_List ListOfVars;
630 : : Lists_List ListOfProcs;
631 : : Lists_List ListOfModules;
632 : : M2Error_ErrorScope errorScope;
633 : : SymbolTable_Where At;
634 : : };
635 : :
636 : : struct SymbolTable_SymModule_r {
637 : : NameKey_Name name;
638 : : NameKey_Name libname;
639 : : SymbolTable_ModuleCtor ctors;
640 : : Lists_List ModListOfDep;
641 : : SymbolKey_SymbolTree LocalSymbols;
642 : : SymbolKey_SymbolTree ExportTree;
643 : : Lists_List IncludeList;
644 : : SymbolKey_SymbolTree ImportTree;
645 : : SymbolKey_SymbolTree ExportUndeclared;
646 : : Lists_List EnumerationScopeList;
647 : : SymbolKey_SymbolTree NamedObjects;
648 : : SymbolKey_SymbolTree NamedImports;
649 : : SymbolKey_SymbolTree WhereImported;
650 : : unsigned int Scope;
651 : : unsigned int Priority;
652 : : SymbolKey_SymbolTree Unresolved;
653 : : unsigned int StartQuad;
654 : : unsigned int EndQuad;
655 : : unsigned int StartFinishQuad;
656 : : unsigned int EndFinishQuad;
657 : : tree FinallyFunction;
658 : : bool ExceptionFinally;
659 : : bool ExceptionBlock;
660 : : bool ModLink;
661 : : bool Builtin;
662 : : Lists_List ListOfVars;
663 : : Lists_List ListOfProcs;
664 : : Lists_List ListOfModules;
665 : : M2Error_ErrorScope errorScope;
666 : : SymbolTable_Where At;
667 : : };
668 : :
669 : : struct SymbolTable__T6_a { SymbolTable_ProcedureDeclaration array[SymbolTable_DefProcedure-SymbolTable_ProperProcedure+1]; };
670 : : struct SymbolTable_SymProcedure_r {
671 : : NameKey_Name name;
672 : : SymbolTable__T6 Decl;
673 : : unsigned int OptArgInit;
674 : : bool IsExtern;
675 : : bool IsPublic;
676 : : bool IsCtor;
677 : : bool IsMonoName;
678 : : bool BuildProcType;
679 : : SymbolKey_SymbolTree Unresolved;
680 : : unsigned int ScopeQuad;
681 : : unsigned int StartQuad;
682 : : unsigned int EndQuad;
683 : : bool Reachable;
684 : : bool SavePriority;
685 : : unsigned int ReturnType;
686 : : unsigned int ProcedureType;
687 : : bool IsBuiltin;
688 : : NameKey_Name BuiltinName;
689 : : bool IsInline;
690 : : SymbolKey_SymbolTree LocalSymbols;
691 : : Lists_List EnumerationScopeList;
692 : : Lists_List ListOfVars;
693 : : Lists_List ListOfProcs;
694 : : SymbolKey_SymbolTree NamedObjects;
695 : : M2ALU_PtrToValue Size;
696 : : M2ALU_PtrToValue TotalParamSize;
697 : : bool ExceptionFinally;
698 : : bool ExceptionBlock;
699 : : unsigned int Scope;
700 : : M2Error_ErrorScope errorScope;
701 : : Lists_List ListOfModules;
702 : : unsigned int Begin;
703 : : unsigned int End;
704 : : SymbolTable_Where At;
705 : : };
706 : :
707 : : struct SymbolTable_Symbol_r {
708 : : SymbolTable_TypeOfSymbol SymbolType; /* case tag */
709 : : union {
710 : : SymbolTable_SymOAFamily OAFamily;
711 : : SymbolTable_SymObject Object;
712 : : SymbolTable_SymEquiv Equiv;
713 : : SymbolTable_SymRecord Record;
714 : : SymbolTable_SymVarient Varient;
715 : : SymbolTable_SymVar Var;
716 : : SymbolTable_SymEnumeration Enumeration;
717 : : SymbolTable_SymSubrange Subrange;
718 : : SymbolTable_SymSubscript Subscript;
719 : : SymbolTable_SymArray Array;
720 : : SymbolTable_SymUnbounded Unbounded;
721 : : SymbolTable_SymPartialUnbounded PartialUnbounded;
722 : : SymbolTable_SymConstVar ConstVar;
723 : : SymbolTable_SymConstLit ConstLit;
724 : : SymbolTable_SymConstString ConstString;
725 : : SymbolTable_SymVarParam VarParam;
726 : : SymbolTable_SymParam Param;
727 : : SymbolTable_SymError Error;
728 : : SymbolTable_SymUndefined Undefined;
729 : : SymbolTable_SymType Type;
730 : : SymbolTable_SymPointer Pointer;
731 : : SymbolTable_SymRecordField RecordField;
732 : : SymbolTable_SymVarientField VarientField;
733 : : SymbolTable_SymEnumerationField EnumerationField;
734 : : SymbolTable_SymDefImp DefImp;
735 : : SymbolTable_SymModule Module;
736 : : SymbolTable_SymSet Set;
737 : : SymbolTable_SymProcedure Procedure;
738 : : SymbolTable_SymProcType ProcType;
739 : : SymbolTable_SymImportStatement ImportStatement;
740 : : SymbolTable_SymImport Import;
741 : : SymbolTable_SymGnuAsm GnuAsm;
742 : : SymbolTable_SymInterface Interface;
743 : : SymbolTable_SymTuple Tuple;
744 : : SymbolTable_SymDummy Dummy;
745 : : };
746 : : };
747 : :
748 : : static Indexing_Index Symbols;
749 : : static Indexing_Index ScopeCallFrame;
750 : : static unsigned int FreeSymbol;
751 : : static SymbolKey_SymbolTree DefModuleTree;
752 : : static SymbolKey_SymbolTree ModuleTree;
753 : : static unsigned int CurrentModule;
754 : : static unsigned int MainModule;
755 : : static unsigned int FileModule;
756 : : static unsigned int ScopePtr;
757 : : static unsigned int BaseScopePtr;
758 : : static unsigned int BaseModule;
759 : : static unsigned int TemporaryNo;
760 : : static M2Error_Error CurrentError;
761 : : static Lists_List AddressTypes;
762 : : static Lists_List UnresolvedConstructorType;
763 : : static unsigned int AnonymousName;
764 : : static Sets_Set ReportedUnknowns;
765 : : static SymbolKey_SymbolTree ConstLitPoolTree;
766 : : static Indexing_Index ConstLitArray;
767 : : static unsigned int recordConsist;
768 : : static DynamicStrings_String ListifySentance;
769 : : static unsigned int ListifyTotal;
770 : : static unsigned int ListifyWordCount;
771 : : static unsigned int ExportRequestModule;
772 : : static unsigned int ResolveModule;
773 : :
774 : : /*
775 : : FinalSymbol - returns the highest number symbol used.
776 : : */
777 : :
778 : : extern "C" unsigned int SymbolTable_FinalSymbol (void);
779 : :
780 : : /*
781 : : MakeComponentRecord - make a temporary which will be used to reference and field
782 : : (or sub field) of record.
783 : : */
784 : :
785 : : extern "C" unsigned int SymbolTable_MakeComponentRecord (unsigned int tok, SymbolTable_ModeOfAddr Mode, unsigned int record);
786 : :
787 : : /*
788 : : MakeComponentRef - use, sym, to reference, field, sym is returned.
789 : : */
790 : :
791 : : extern "C" unsigned int SymbolTable_MakeComponentRef (unsigned int sym, unsigned int field);
792 : :
793 : : /*
794 : : IsComponent - returns TRUE if symbol, sym, is a temporary and a component
795 : : reference.
796 : : */
797 : :
798 : : extern "C" bool SymbolTable_IsComponent (unsigned int sym);
799 : :
800 : : /*
801 : : MakeTemporary - Makes a new temporary variable at the highest real scope.
802 : : The addressing mode of the temporary is set to NoValue.
803 : : */
804 : :
805 : : extern "C" unsigned int SymbolTable_MakeTemporary (unsigned int tok, SymbolTable_ModeOfAddr Mode);
806 : :
807 : : /*
808 : : MakeTemporaryFromExpression - makes a new temporary variable at the
809 : : highest real scope. The addressing
810 : : mode of the temporary is set and the
811 : : type is determined by expressions, e.
812 : : */
813 : :
814 : : extern "C" unsigned int SymbolTable_MakeTemporaryFromExpression (unsigned int tok, unsigned int e, SymbolTable_ModeOfAddr mode);
815 : :
816 : : /*
817 : : MakeTemporaryFromExpressions - makes a new temporary variable at the
818 : : highest real scope. The addressing
819 : : mode of the temporary is set and the
820 : : type is determined by expressions,
821 : : e1 and e2.
822 : : */
823 : :
824 : : extern "C" unsigned int SymbolTable_MakeTemporaryFromExpressions (unsigned int tok, unsigned int e1, unsigned int e2, SymbolTable_ModeOfAddr mode);
825 : :
826 : : /*
827 : : PutMode - Puts the addressing mode, SymMode, into symbol Sym.
828 : : The mode may only be altered if the mode
829 : : is None.
830 : : */
831 : :
832 : : extern "C" void SymbolTable_PutMode (unsigned int Sym, SymbolTable_ModeOfAddr SymMode);
833 : :
834 : : /*
835 : : GetMode - Returns the addressing mode of a symbol.
836 : : */
837 : :
838 : : extern "C" SymbolTable_ModeOfAddr SymbolTable_GetMode (unsigned int Sym);
839 : :
840 : : /*
841 : : StartScope - starts a block scope at Sym. Transparent determines
842 : : whether the search for a symbol will look at the
843 : : previous ScopeCallFrame if Sym does not contain the
844 : : symbol that GetSym is searching.
845 : :
846 : : WITH statements are partially implemented by calling
847 : : StartScope. Therefore we must retain the old Main from
848 : : the previous ScopePtr when a record is added to the scope
849 : : stack. (Main contains the symbol where all identifiers
850 : : should be added.)
851 : : */
852 : :
853 : : extern "C" void SymbolTable_StartScope (unsigned int Sym);
854 : :
855 : : /*
856 : : EndScope - ends a block scope started by StartScope. The current
857 : : head of the symbol scope reverts back to the symbol
858 : : which was the Head of the symbol scope before the
859 : : last StartScope was called.
860 : : */
861 : :
862 : : extern "C" void SymbolTable_EndScope (void);
863 : :
864 : : /*
865 : : PseudoScope - starts a pseudo scope at Sym.
866 : : We always connect parent up to the last scope,
867 : : to determine the transparancy of a scope we call
868 : : TransparentScope.
869 : :
870 : : A Pseudo scope has no end block,
871 : : but is terminated when the next EndScope is used.
872 : : The function of the pseudo scope is to provide an
873 : : automatic mechanism to solve enumeration types.
874 : : A declared enumeration type is a Pseudo scope and
875 : : identifiers used with the name of an enumeration
876 : : type field will find the enumeration symbol by
877 : : the scoping algorithm.
878 : : */
879 : :
880 : : extern "C" void SymbolTable_PseudoScope (unsigned int Sym);
881 : :
882 : : /*
883 : : GetCurrentScope - returns the symbol who is responsible for the current
884 : : scope. Note that it ignore pseudo scopes.
885 : : */
886 : :
887 : : extern "C" unsigned int SymbolTable_GetCurrentScope (void);
888 : :
889 : : /*
890 : : IsDeclaredIn - returns TRUE if a symbol was declared in, scope.
891 : : */
892 : :
893 : : extern "C" bool SymbolTable_IsDeclaredIn (unsigned int scope, unsigned int sym);
894 : :
895 : : /*
896 : : SetCurrentModule - Used to set the CurrentModule to a symbol, Sym.
897 : : This Sym must represent the module name of the
898 : : file currently being compiled.
899 : : */
900 : :
901 : : extern "C" void SymbolTable_SetCurrentModule (unsigned int Sym);
902 : :
903 : : /*
904 : : SetFileModule - Used to set the FileModule to a symbol, Sym.
905 : : This Sym must represent the current program module
906 : : file which is being parsed.
907 : : */
908 : :
909 : : extern "C" void SymbolTable_SetFileModule (unsigned int Sym);
910 : :
911 : : /*
912 : : SetMainModule - Used to set the MainModule to a symbol, Sym.
913 : : This Sym must represent the main module which was
914 : : envoked by the user to be compiled.
915 : : */
916 : :
917 : : extern "C" void SymbolTable_SetMainModule (unsigned int Sym);
918 : :
919 : : /*
920 : : CheckAnonymous - checks to see whether the name is NulName and if so
921 : : it creates a unique anonymous name.
922 : : */
923 : :
924 : : extern "C" NameKey_Name SymbolTable_CheckAnonymous (NameKey_Name name);
925 : :
926 : : /*
927 : : IsNameAnonymous - returns TRUE if the symbol, sym, has an anonymous name
928 : : or no name.
929 : : */
930 : :
931 : : extern "C" bool SymbolTable_IsNameAnonymous (unsigned int sym);
932 : :
933 : : /*
934 : : NoOfVariables - returns the number of variables in scope. The scope maybe
935 : : a procedure, module or defimp scope.
936 : : */
937 : :
938 : : extern "C" unsigned int SymbolTable_NoOfVariables (unsigned int scope);
939 : :
940 : : /*
941 : : MakeModule - creates a module sym with ModuleName. It returns the
942 : : symbol index.
943 : : */
944 : :
945 : : extern "C" unsigned int SymbolTable_MakeModule (unsigned int tok, NameKey_Name ModuleName);
946 : :
947 : : /*
948 : : MakeDefImp - creates a definition and implementation module sym
949 : : with name DefImpName. It returns the symbol index.
950 : : */
951 : :
952 : : extern "C" unsigned int SymbolTable_MakeDefImp (unsigned int tok, NameKey_Name DefImpName);
953 : :
954 : : /*
955 : : MakeInnerModule - creates an inner module sym with ModuleName. It returns the
956 : : symbol index.
957 : : */
958 : :
959 : : extern "C" unsigned int SymbolTable_MakeInnerModule (unsigned int tok, NameKey_Name ModuleName);
960 : :
961 : : /*
962 : : MakeProcedure - creates a procedure sym with name. It returns
963 : : the symbol index.
964 : : */
965 : :
966 : : extern "C" unsigned int SymbolTable_MakeProcedure (unsigned int tok, NameKey_Name ProcedureName);
967 : :
968 : : /*
969 : : MakeProcedureCtorExtern - creates an extern ctor procedure
970 : : */
971 : :
972 : : extern "C" unsigned int SymbolTable_MakeProcedureCtorExtern (unsigned int tokenno, NameKey_Name libname, NameKey_Name modulename);
973 : :
974 : : /*
975 : : PutLibName - places libname into defimp or module sym.
976 : : */
977 : :
978 : : extern "C" void SymbolTable_PutLibName (unsigned int sym, NameKey_Name libname);
979 : :
980 : : /*
981 : : GetLibName - returns libname associated with a defimp or module sym.
982 : : */
983 : :
984 : : extern "C" NameKey_Name SymbolTable_GetLibName (unsigned int sym);
985 : :
986 : : /*
987 : : PutMonoName - changes the IsMonoName boolean inside the procedure.
988 : : */
989 : :
990 : : extern "C" void SymbolTable_PutMonoName (unsigned int sym, bool value);
991 : :
992 : : /*
993 : : IsMonoName - returns the public boolean associated with a procedure.
994 : : */
995 : :
996 : : extern "C" bool SymbolTable_IsMonoName (unsigned int sym);
997 : :
998 : : /*
999 : : PutExtern - changes the extern boolean inside the procedure.
1000 : : */
1001 : :
1002 : : extern "C" void SymbolTable_PutExtern (unsigned int sym, bool value);
1003 : :
1004 : : /*
1005 : : IsExtern - returns the public boolean associated with a procedure.
1006 : : */
1007 : :
1008 : : extern "C" bool SymbolTable_IsExtern (unsigned int sym);
1009 : :
1010 : : /*
1011 : : PutPublic - changes the public boolean inside the procedure.
1012 : : */
1013 : :
1014 : : extern "C" void SymbolTable_PutPublic (unsigned int sym, bool value);
1015 : :
1016 : : /*
1017 : : IsPublic - returns the public boolean associated with a procedure.
1018 : : */
1019 : :
1020 : : extern "C" bool SymbolTable_IsPublic (unsigned int sym);
1021 : :
1022 : : /*
1023 : : PutCtor - changes the ctor boolean inside the procedure.
1024 : : */
1025 : :
1026 : : extern "C" void SymbolTable_PutCtor (unsigned int sym, bool value);
1027 : :
1028 : : /*
1029 : : IsCtor - returns the ctor boolean associated with a procedure.
1030 : : */
1031 : :
1032 : : extern "C" bool SymbolTable_IsCtor (unsigned int sym);
1033 : :
1034 : : /*
1035 : : GetModuleCtors - mod can be a DefImp or Module symbol. ctor, init and fini
1036 : : are assigned for this module. An inner module ctor value will
1037 : : be NulSym.
1038 : : */
1039 : :
1040 : : extern "C" void SymbolTable_GetModuleCtors (unsigned int mod, unsigned int *ctor, unsigned int *init, unsigned int *fini, unsigned int *dep);
1041 : :
1042 : : /*
1043 : : MakeModuleCtor - for a defimp or module symbol create all the ctor
1044 : : related procedures.
1045 : : */
1046 : :
1047 : : extern "C" void SymbolTable_MakeModuleCtor (unsigned int moduleTok, unsigned int beginTok, unsigned int finallyTok, unsigned int moduleSym);
1048 : :
1049 : : /*
1050 : : PutModuleCtorExtern - for every ctor related procedure in module sym.
1051 : : Make it external. It will create any missing
1052 : : init/fini procedures but not any missing dep/ctor
1053 : : procedures.
1054 : : */
1055 : :
1056 : : extern "C" void SymbolTable_PutModuleCtorExtern (unsigned int tok, unsigned int sym, bool external);
1057 : :
1058 : : /*
1059 : : PutVarHeap - assigns ArrayRef field with value.
1060 : : */
1061 : :
1062 : : extern "C" void SymbolTable_PutVarHeap (unsigned int sym, bool value);
1063 : :
1064 : : /*
1065 : : IsVarHeap - returns ArrayRef field value.
1066 : : */
1067 : :
1068 : : extern "C" bool SymbolTable_IsVarHeap (unsigned int sym);
1069 : :
1070 : : /*
1071 : : MakeVar - creates a variable sym with VarName. It returns the
1072 : : symbol index.
1073 : : */
1074 : :
1075 : : extern "C" unsigned int SymbolTable_MakeVar (unsigned int tok, NameKey_Name VarName);
1076 : :
1077 : : /*
1078 : : PutVarConditional - assign IsConditional to value.
1079 : : */
1080 : :
1081 : : extern "C" void SymbolTable_PutVarConditional (unsigned int sym, bool value);
1082 : :
1083 : : /*
1084 : : IsVarConditional - return TRUE if the symbol is a var symbol
1085 : : containing the result of a boolean conditional.
1086 : : */
1087 : :
1088 : : extern "C" bool SymbolTable_IsVarConditional (unsigned int sym);
1089 : :
1090 : : /*
1091 : : MakeRecord - makes a Record symbol with name RecordName.
1092 : : */
1093 : :
1094 : : extern "C" unsigned int SymbolTable_MakeRecord (unsigned int tok, NameKey_Name RecordName);
1095 : :
1096 : : /*
1097 : : MakeVarient - creates a new symbol, a varient symbol for record or varient field
1098 : : symbol, RecOrVarFieldSym.
1099 : : */
1100 : :
1101 : : extern "C" unsigned int SymbolTable_MakeVarient (unsigned int tok, unsigned int RecOrVarFieldSym);
1102 : :
1103 : : /*
1104 : : MakeFieldVarient - returns a FieldVarient symbol which has been
1105 : : assigned to the Varient symbol, Sym.
1106 : : */
1107 : :
1108 : : extern "C" unsigned int SymbolTable_MakeFieldVarient (NameKey_Name n, unsigned int Sym);
1109 : :
1110 : : /*
1111 : : MakeEnumeration - places a new symbol in the current scope, the symbol
1112 : : is an enumeration symbol. The symbol index is returned.
1113 : : */
1114 : :
1115 : : extern "C" unsigned int SymbolTable_MakeEnumeration (unsigned int tok, NameKey_Name EnumerationName);
1116 : :
1117 : : /*
1118 : : MakeType - makes a type symbol with name TypeName.
1119 : : */
1120 : :
1121 : : extern "C" unsigned int SymbolTable_MakeType (unsigned int tok, NameKey_Name TypeName);
1122 : :
1123 : : /*
1124 : : MakeHiddenType - makes a type symbol that is hidden from the
1125 : : definition module.
1126 : : This symbol is placed into the UnImplemented list of
1127 : : the definition/implementation module.
1128 : : The type will be filled in when the implementation module
1129 : : is reached.
1130 : : */
1131 : :
1132 : : extern "C" unsigned int SymbolTable_MakeHiddenType (unsigned int tok, NameKey_Name TypeName);
1133 : :
1134 : : /*
1135 : : MakeConstant - create a constant cardinal and return the symbol.
1136 : : */
1137 : :
1138 : : extern "C" unsigned int SymbolTable_MakeConstant (unsigned int tok, unsigned int value);
1139 : :
1140 : : /*
1141 : : MakeConstLit - returns a constant literal of type, constType, with a constName,
1142 : : at location, tok.
1143 : : */
1144 : :
1145 : : extern "C" unsigned int SymbolTable_MakeConstLit (unsigned int tok, NameKey_Name constName, unsigned int constType);
1146 : :
1147 : : /*
1148 : : MakeConstVar - makes a ConstVar type with
1149 : : name ConstVarName.
1150 : : */
1151 : :
1152 : : extern "C" unsigned int SymbolTable_MakeConstVar (unsigned int tok, NameKey_Name ConstVarName);
1153 : :
1154 : : /*
1155 : : MakeConstString - create a string constant in the symboltable.
1156 : : */
1157 : :
1158 : : extern "C" unsigned int SymbolTable_MakeConstString (unsigned int tok, NameKey_Name ConstName);
1159 : :
1160 : : /*
1161 : : MakeConstStringCnul - creates a constant string nul terminated string suitable for C.
1162 : : If known is TRUE then name is assigned to the contents
1163 : : and the escape sequences will be converted into characters.
1164 : : */
1165 : :
1166 : : extern "C" unsigned int SymbolTable_MakeConstStringCnul (unsigned int tok, NameKey_Name name, bool known);
1167 : :
1168 : : /*
1169 : : MakeConstStringM2nul - creates a constant string nul terminated string suitable for M2.
1170 : : If known is TRUE then name is assigned to the contents
1171 : : however the escape sequences are not converted into characters.
1172 : : */
1173 : :
1174 : : extern "C" unsigned int SymbolTable_MakeConstStringM2nul (unsigned int tok, NameKey_Name name, bool known);
1175 : :
1176 : : /*
1177 : : PutConstStringKnown - if sym is a constvar then convert it into a conststring.
1178 : : If known is FALSE then contents is ignored and NulName is
1179 : : stored. If escape is TRUE then the contents will have
1180 : : any escape sequences converted into single characters.
1181 : : */
1182 : :
1183 : : extern "C" void SymbolTable_PutConstStringKnown (unsigned int tok, unsigned int sym, NameKey_Name contents, bool escape, bool known);
1184 : :
1185 : : /*
1186 : : CopyConstString - copies string contents from expr to des
1187 : : and retain the kind of string.
1188 : : */
1189 : :
1190 : : extern "C" void SymbolTable_CopyConstString (unsigned int tok, unsigned int des, unsigned int expr);
1191 : :
1192 : : /*
1193 : : IsConstStringKnown - returns TRUE if sym is a const string
1194 : : and the contents are known.
1195 : : */
1196 : :
1197 : : extern "C" bool SymbolTable_IsConstStringKnown (unsigned int sym);
1198 : :
1199 : : /*
1200 : : IsConstStringM2 - returns whether this conststring is a
1201 : : Modula-2 string.
1202 : : */
1203 : :
1204 : : extern "C" bool SymbolTable_IsConstStringM2 (unsigned int sym);
1205 : :
1206 : : /*
1207 : : IsConstStringC - returns whether this conststring is a C style string
1208 : : which will have any escape translated.
1209 : : */
1210 : :
1211 : : extern "C" bool SymbolTable_IsConstStringC (unsigned int sym);
1212 : :
1213 : : /*
1214 : : IsConstStringM2nul - returns whether this conststring is a Modula-2 string which
1215 : : contains a nul terminator.
1216 : : */
1217 : :
1218 : : extern "C" bool SymbolTable_IsConstStringM2nul (unsigned int sym);
1219 : :
1220 : : /*
1221 : : IsConstStringCnul - returns whether this conststring is a C style string
1222 : : which will have any escape translated and also contains
1223 : : a nul terminator.
1224 : : */
1225 : :
1226 : : extern "C" bool SymbolTable_IsConstStringCnul (unsigned int sym);
1227 : :
1228 : : /*
1229 : : MakeSubrange - makes a new symbol into a subrange type with
1230 : : name SubrangeName.
1231 : : */
1232 : :
1233 : : extern "C" unsigned int SymbolTable_MakeSubrange (unsigned int tok, NameKey_Name SubrangeName);
1234 : :
1235 : : /*
1236 : : MakeSet - makes a set Symbol with name, SetName.
1237 : : */
1238 : :
1239 : : extern "C" unsigned int SymbolTable_MakeSet (unsigned int tok, NameKey_Name SetName);
1240 : :
1241 : : /*
1242 : : MakeArray - makes an Array symbol with name ArrayName.
1243 : : */
1244 : :
1245 : : extern "C" unsigned int SymbolTable_MakeArray (unsigned int tok, NameKey_Name ArrayName);
1246 : :
1247 : : /*
1248 : : PutArrayLarge - indicates that this is a large array in which case
1249 : : the interface to gcc maps this array from 0..high-low,
1250 : : using an integer indice.
1251 : : */
1252 : :
1253 : : extern "C" void SymbolTable_PutArrayLarge (unsigned int array);
1254 : :
1255 : : /*
1256 : : IsArrayLarge - returns TRUE if we need to treat this as a large array.
1257 : : */
1258 : :
1259 : : extern "C" bool SymbolTable_IsArrayLarge (unsigned int array);
1260 : :
1261 : : /*
1262 : : PutPriority - places a interrupt, priority, value into module, module.
1263 : : */
1264 : :
1265 : : extern "C" void SymbolTable_PutPriority (unsigned int module, unsigned int priority);
1266 : :
1267 : : /*
1268 : : GetPriority - returns the interrupt priority which was assigned to
1269 : : module, module.
1270 : : */
1271 : :
1272 : : extern "C" unsigned int SymbolTable_GetPriority (unsigned int module);
1273 : :
1274 : : /*
1275 : : PutNeedSavePriority - set a boolean flag indicating that this procedure
1276 : : needs to save and restore interrupts.
1277 : : */
1278 : :
1279 : : extern "C" void SymbolTable_PutNeedSavePriority (unsigned int sym);
1280 : :
1281 : : /*
1282 : : GetNeedSavePriority - returns the boolean flag indicating whether this procedure
1283 : : needs to save and restore interrupts.
1284 : : */
1285 : :
1286 : : extern "C" bool SymbolTable_GetNeedSavePriority (unsigned int sym);
1287 : :
1288 : : /*
1289 : : PutVariableAtAddress - determines that a variable, sym, is declared at
1290 : : a specific address.
1291 : : */
1292 : :
1293 : : extern "C" void SymbolTable_PutVariableAtAddress (unsigned int sym, unsigned int address);
1294 : :
1295 : : /*
1296 : : GetVariableAtAddress - returns the address at which variable, sym, is declared.
1297 : : */
1298 : :
1299 : : extern "C" unsigned int SymbolTable_GetVariableAtAddress (unsigned int sym);
1300 : :
1301 : : /*
1302 : : IsVariableAtAddress - returns TRUE if a variable, sym, was declared at
1303 : : a specific address.
1304 : : */
1305 : :
1306 : : extern "C" bool SymbolTable_IsVariableAtAddress (unsigned int sym);
1307 : :
1308 : : /*
1309 : : PutVariableSSA - assigns value to the SSA field within variable sym.
1310 : : */
1311 : :
1312 : : extern "C" void SymbolTable_PutVariableSSA (unsigned int sym, bool value);
1313 : :
1314 : : /*
1315 : : IsVariableSSA - returns TRUE if variable is known to be a SSA.
1316 : : */
1317 : :
1318 : : extern "C" bool SymbolTable_IsVariableSSA (unsigned int sym);
1319 : :
1320 : : /*
1321 : : PutVarConst - sets the IsConst field to value indicating the variable is read only.
1322 : : */
1323 : :
1324 : : extern "C" void SymbolTable_PutVarConst (unsigned int sym, bool value);
1325 : :
1326 : : /*
1327 : : MakeGnuAsm - create a GnuAsm symbol.
1328 : : */
1329 : :
1330 : : extern "C" unsigned int SymbolTable_MakeGnuAsm (void);
1331 : :
1332 : : /*
1333 : : PutGnuAsm - places the instruction textual name into the GnuAsm symbol.
1334 : : */
1335 : :
1336 : : extern "C" void SymbolTable_PutGnuAsm (unsigned int sym, unsigned int string);
1337 : :
1338 : : /*
1339 : : PutGnuAsmOutput - places the interface object, out, into GnuAsm symbol, sym.
1340 : : */
1341 : :
1342 : : extern "C" void SymbolTable_PutGnuAsmOutput (unsigned int sym, unsigned int out);
1343 : :
1344 : : /*
1345 : : PutGnuAsmInput - places the interface object, in, into GnuAsm symbol, sym.
1346 : : */
1347 : :
1348 : : extern "C" void SymbolTable_PutGnuAsmInput (unsigned int sym, unsigned int in);
1349 : :
1350 : : /*
1351 : : PutGnuAsmTrash - places the interface object, trash, into GnuAsm symbol, sym.
1352 : : */
1353 : :
1354 : : extern "C" void SymbolTable_PutGnuAsmTrash (unsigned int sym, unsigned int trash);
1355 : :
1356 : : /*
1357 : : GetGnuAsm - returns the string symbol, representing the instruction textual
1358 : : of the GnuAsm symbol. It will return a ConstString.
1359 : : */
1360 : :
1361 : : extern "C" unsigned int SymbolTable_GetGnuAsm (unsigned int sym);
1362 : :
1363 : : /*
1364 : : GetGnuAsmInput - returns the input list of registers.
1365 : : */
1366 : :
1367 : : extern "C" unsigned int SymbolTable_GetGnuAsmInput (unsigned int sym);
1368 : :
1369 : : /*
1370 : : GetGnuAsmOutput - returns the output list of registers.
1371 : : */
1372 : :
1373 : : extern "C" unsigned int SymbolTable_GetGnuAsmOutput (unsigned int sym);
1374 : :
1375 : : /*
1376 : : GetGnuAsmTrash - returns the list of trashed registers.
1377 : : */
1378 : :
1379 : : extern "C" unsigned int SymbolTable_GetGnuAsmTrash (unsigned int sym);
1380 : :
1381 : : /*
1382 : : PutGnuAsmVolatile - defines a GnuAsm symbol as VOLATILE.
1383 : : */
1384 : :
1385 : : extern "C" void SymbolTable_PutGnuAsmVolatile (unsigned int Sym);
1386 : :
1387 : : /*
1388 : : PutGnuAsmSimple - defines a GnuAsm symbol as a simple kind.
1389 : : */
1390 : :
1391 : : extern "C" void SymbolTable_PutGnuAsmSimple (unsigned int Sym);
1392 : :
1393 : : /*
1394 : : MakeRegInterface - creates and returns a register interface symbol.
1395 : : */
1396 : :
1397 : : extern "C" unsigned int SymbolTable_MakeRegInterface (void);
1398 : :
1399 : : /*
1400 : : PutRegInterface - places a, name, string, and, object, into the interface array,
1401 : : sym, at position, i.
1402 : : The string symbol will either be a register name or a constraint.
1403 : : The object is an optional Modula-2 variable or constant symbol.
1404 : : read and write are the quadruple numbers representing any read
1405 : : or write operation.
1406 : : */
1407 : :
1408 : : extern "C" void SymbolTable_PutRegInterface (unsigned int tok, unsigned int sym, unsigned int i, NameKey_Name n, unsigned int string, unsigned int object, unsigned int read_, unsigned int write_);
1409 : :
1410 : : /*
1411 : : GetRegInterface - gets a, name, string, and, object, from the interface array,
1412 : : sym, from position, i.
1413 : : */
1414 : :
1415 : : extern "C" void SymbolTable_GetRegInterface (unsigned int sym, unsigned int i, unsigned int *tok, NameKey_Name *n, unsigned int *string, unsigned int *object);
1416 : :
1417 : : /*
1418 : : GetModule - Returns the Module symbol for the module with name, name.
1419 : : */
1420 : :
1421 : : extern "C" unsigned int SymbolTable_GetModule (NameKey_Name name);
1422 : :
1423 : : /*
1424 : : GetCurrentModule - returns the current module Sym that is being
1425 : : compiled.
1426 : : */
1427 : :
1428 : : extern "C" unsigned int SymbolTable_GetCurrentModule (void);
1429 : :
1430 : : /*
1431 : : GetFileModule - returns the FileModule symbol that was requested by
1432 : : the user to be compiled.
1433 : : */
1434 : :
1435 : : extern "C" unsigned int SymbolTable_GetFileModule (void);
1436 : :
1437 : : /*
1438 : : GetBaseModule - returns the base module symbol that contains Modula-2
1439 : : base types, procedures and functions.
1440 : : */
1441 : :
1442 : : extern "C" unsigned int SymbolTable_GetBaseModule (void);
1443 : :
1444 : : /*
1445 : : GetMainModule - returns the main module symbol that was requested by
1446 : : the user to be compiled.
1447 : : */
1448 : :
1449 : : extern "C" unsigned int SymbolTable_GetMainModule (void);
1450 : :
1451 : : /*
1452 : : GetCurrentModuleScope - returns the module symbol which forms the
1453 : : current (possibly inner most) module.
1454 : : */
1455 : :
1456 : : extern "C" unsigned int SymbolTable_GetCurrentModuleScope (void);
1457 : :
1458 : : /*
1459 : : GetLastModuleScope - returns the last module scope encountered,
1460 : : the module scope before the Current Module Scope.
1461 : : */
1462 : :
1463 : : extern "C" unsigned int SymbolTable_GetLastModuleScope (void);
1464 : :
1465 : : /*
1466 : : AddSymToModuleScope - adds a symbol, Sym, to the scope of the module
1467 : : ModSym.
1468 : : */
1469 : :
1470 : : extern "C" void SymbolTable_AddSymToModuleScope (unsigned int ModSym, unsigned int Sym);
1471 : :
1472 : : /*
1473 : : GetType - Returns the symbol that is the TYPE symbol to Sym.
1474 : : If zero is returned then we assume type unknown.
1475 : : */
1476 : :
1477 : : extern "C" unsigned int SymbolTable_GetType (unsigned int Sym);
1478 : :
1479 : : /*
1480 : : SkipType - if sym is a TYPE foo = bar
1481 : : then call SkipType(bar)
1482 : : else return sym
1483 : :
1484 : : it does not skip over hidden types.
1485 : : */
1486 : :
1487 : : extern "C" unsigned int SymbolTable_SkipType (unsigned int Sym);
1488 : :
1489 : : /*
1490 : : SkipTypeAndSubrange - if sym is a TYPE foo = bar OR
1491 : : sym is declared as a subrange of bar
1492 : : then call SkipTypeAndSubrange(bar)
1493 : : else return sym
1494 : :
1495 : : it does not skip over hidden types.
1496 : : */
1497 : :
1498 : : extern "C" unsigned int SymbolTable_SkipTypeAndSubrange (unsigned int Sym);
1499 : :
1500 : : /*
1501 : : GetLowestType - Returns the lowest type in the type chain of
1502 : : symbol Sym.
1503 : : If NulSym is returned then we assume type unknown or
1504 : : you have reqested the type of a base type.
1505 : : */
1506 : :
1507 : : extern "C" unsigned int SymbolTable_GetLowestType (unsigned int Sym);
1508 : :
1509 : : /*
1510 : : GetLType - get lowest type. It returns the lowest type
1511 : : of symbol, sym. It skips over type equivalences.
1512 : : It will not skip over base types.
1513 : : */
1514 : :
1515 : : extern "C" unsigned int SymbolTable_GetLType (unsigned int sym);
1516 : :
1517 : : /*
1518 : : GetSType - get source type. It returns the type closest
1519 : : to the object. It does not skip over type
1520 : : equivalences. It will skip over base types.
1521 : : */
1522 : :
1523 : : extern "C" unsigned int SymbolTable_GetSType (unsigned int sym);
1524 : :
1525 : : /*
1526 : : GetDType - get gcc declared type. It returns the type
1527 : : of the object which is declared to GCC.
1528 : : It does skip over type equivalences but only
1529 : : if they do not contain a user alignment.
1530 : : It does not skip over hidden types.
1531 : : It does not skip over base types.
1532 : : */
1533 : :
1534 : : extern "C" unsigned int SymbolTable_GetDType (unsigned int sym);
1535 : :
1536 : : /*
1537 : : GetTypeMode - return the type of sym, it returns Address is the
1538 : : symbol is a LValue.
1539 : : */
1540 : :
1541 : : extern "C" unsigned int SymbolTable_GetTypeMode (unsigned int sym);
1542 : :
1543 : : /*
1544 : : GetSym - searches the current scope (and previous scopes if the
1545 : : scope tranparent allows) for a symbol with name.
1546 : : */
1547 : :
1548 : : extern "C" unsigned int SymbolTable_GetSym (NameKey_Name name);
1549 : :
1550 : : /*
1551 : : GetDeclareSym - searches for a symbol with a name SymName in the
1552 : : current and previous scopes.
1553 : : If the symbol is found then it is returned
1554 : : else an unknown symbol is returned.
1555 : : This procedure assumes that SymName is being
1556 : : declared at this point and therefore it does
1557 : : not examine the base scope (for pervasive
1558 : : identifiers).
1559 : : */
1560 : :
1561 : : extern "C" unsigned int SymbolTable_GetDeclareSym (unsigned int tok, NameKey_Name SymName);
1562 : :
1563 : : /*
1564 : : GetLocalSym - only searches the scope Sym for a symbol with name
1565 : : and returns the index to the symbol.
1566 : : */
1567 : :
1568 : : extern "C" unsigned int SymbolTable_GetLocalSym (unsigned int Sym, NameKey_Name name);
1569 : :
1570 : : /*
1571 : : GetRecord - fetches the record symbol from the parent of Sym.
1572 : : Sym maybe a varient symbol in which case its parent is searched
1573 : : etc.
1574 : : */
1575 : :
1576 : : extern "C" unsigned int SymbolTable_GetRecord (unsigned int Sym);
1577 : :
1578 : : /*
1579 : : FromModuleGetSym - attempts to find a symbol of name, n, in the
1580 : : module, mod, scope. An unknown symbol is created
1581 : : at token position tok if necessary.
1582 : : */
1583 : :
1584 : : extern "C" unsigned int SymbolTable_FromModuleGetSym (unsigned int tok, NameKey_Name n, unsigned int mod);
1585 : :
1586 : : /*
1587 : : GetNth - returns the n th symbol in the list associated with the scope
1588 : : of Sym. Sym may be a Module, DefImp, Procedure, Record or
1589 : : Enumeration symbol.
1590 : : */
1591 : :
1592 : : extern "C" unsigned int SymbolTable_GetNth (unsigned int Sym, unsigned int n);
1593 : :
1594 : : /*
1595 : : GetNthParam - returns the n th parameter of a procedure Sym.
1596 : : */
1597 : :
1598 : : extern "C" unsigned int SymbolTable_GetNthParam (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo);
1599 : :
1600 : : /*
1601 : : GetVarScope - returns the symbol which is the scope of variable Sym.
1602 : : ie a Module, DefImp or Procedure Symbol.
1603 : : */
1604 : :
1605 : : extern "C" unsigned int SymbolTable_GetVarScope (unsigned int Sym);
1606 : :
1607 : : /*
1608 : : GetSubrange - returns HighSym and LowSym - two constants which make up the
1609 : : subrange.
1610 : : */
1611 : :
1612 : : extern "C" void SymbolTable_GetSubrange (unsigned int Sym, unsigned int *HighSym, unsigned int *LowSym);
1613 : :
1614 : : /*
1615 : : GetParam - returns the ParamNo parameter from procedure ProcSym
1616 : : */
1617 : :
1618 : : extern "C" unsigned int SymbolTable_GetParam (unsigned int Sym, unsigned int ParamNo);
1619 : :
1620 : : /*
1621 : : GetString - returns the contents of the string symbol sym, note that
1622 : : this is not the same as GetName (unless it was a literal).
1623 : : */
1624 : :
1625 : : extern "C" NameKey_Name SymbolTable_GetString (unsigned int Sym);
1626 : :
1627 : : /*
1628 : : GetStringLength - returns the length of the string symbol Sym.
1629 : : */
1630 : :
1631 : : extern "C" unsigned int SymbolTable_GetStringLength (unsigned int tok, unsigned int sym);
1632 : :
1633 : : /*
1634 : : GetProcedureBuiltin - returns the builtin name for the equivalent procedure, Sym.
1635 : : */
1636 : :
1637 : : extern "C" NameKey_Name SymbolTable_GetProcedureBuiltin (unsigned int Sym);
1638 : :
1639 : : /*
1640 : : PutProcedureBuiltin - assigns the builtin name for the equivalent procedure, Sym.
1641 : : */
1642 : :
1643 : : extern "C" void SymbolTable_PutProcedureBuiltin (unsigned int Sym, NameKey_Name name);
1644 : :
1645 : : /*
1646 : : IsProcedureBuiltin - returns TRUE if this procedure has a builtin equivalent.
1647 : : */
1648 : :
1649 : : extern "C" bool SymbolTable_IsProcedureBuiltin (unsigned int Sym);
1650 : :
1651 : : /*
1652 : : PutProcedureInline - determines that procedure, Sym, has been requested to be inlined.
1653 : : */
1654 : :
1655 : : extern "C" void SymbolTable_PutProcedureInline (unsigned int Sym);
1656 : : extern "C" bool SymbolTable_IsProcedureInline (unsigned int Sym);
1657 : :
1658 : : /*
1659 : : PutExceptionBlock - sets a BOOLEAN in block module/procedure/defimp,
1660 : : sym, indicating that this block as an EXCEPT
1661 : : statement sequence.
1662 : : */
1663 : :
1664 : : extern "C" void SymbolTable_PutExceptionBlock (unsigned int sym);
1665 : :
1666 : : /*
1667 : : HasExceptionBlock - returns a BOOLEAN determining whether
1668 : : module/procedure/defimp, sym, has
1669 : : an EXCEPT statement sequence.
1670 : : */
1671 : :
1672 : : extern "C" bool SymbolTable_HasExceptionBlock (unsigned int sym);
1673 : :
1674 : : /*
1675 : : PutExceptionFinally - sets a BOOLEAN in block module/defimp,
1676 : : sym, indicating that this FINALLY block
1677 : : as an EXCEPT statement sequence.
1678 : : */
1679 : :
1680 : : extern "C" void SymbolTable_PutExceptionFinally (unsigned int sym);
1681 : :
1682 : : /*
1683 : : HasExceptionFinally - returns a BOOLEAN determining whether
1684 : : module/defimp, sym, has
1685 : : an EXCEPT statement sequence.
1686 : : */
1687 : :
1688 : : extern "C" bool SymbolTable_HasExceptionFinally (unsigned int sym);
1689 : :
1690 : : /*
1691 : : PutVar - gives the VarSym symbol Sym a type Type.
1692 : : */
1693 : :
1694 : : extern "C" void SymbolTable_PutVar (unsigned int Sym, unsigned int VarType);
1695 : :
1696 : : /*
1697 : : PutVarTok - gives the VarSym symbol Sym a type Type at typetok.
1698 : : */
1699 : :
1700 : : extern "C" void SymbolTable_PutVarTok (unsigned int Sym, unsigned int VarType, unsigned int typetok);
1701 : :
1702 : : /*
1703 : : PutLeftValueFrontBackType - gives the variable symbol a front and backend type.
1704 : : The variable must be a LeftValue.
1705 : : */
1706 : :
1707 : : extern "C" void SymbolTable_PutLeftValueFrontBackType (unsigned int Sym, unsigned int FrontType, unsigned int BackType);
1708 : :
1709 : : /*
1710 : : GetVarBackEndType - returns the back end type if specified.
1711 : : */
1712 : :
1713 : : extern "C" unsigned int SymbolTable_GetVarBackEndType (unsigned int Sym);
1714 : :
1715 : : /*
1716 : : PutVarPointerCheck - marks variable, sym, as requiring (or not
1717 : : depending upon the, value), a NIL pointer check
1718 : : when this symbol is dereferenced.
1719 : : */
1720 : :
1721 : : extern "C" void SymbolTable_PutVarPointerCheck (unsigned int sym, bool value);
1722 : :
1723 : : /*
1724 : : GetVarPointerCheck - returns TRUE if this symbol is a variable and
1725 : : has been marked as needing a pointer via NIL check.
1726 : : */
1727 : :
1728 : : extern "C" bool SymbolTable_GetVarPointerCheck (unsigned int sym);
1729 : :
1730 : : /*
1731 : : PutVarWritten - marks variable, sym, as being written to (or not
1732 : : depending upon the, value).
1733 : : */
1734 : :
1735 : : extern "C" void SymbolTable_PutVarWritten (unsigned int sym, bool value);
1736 : :
1737 : : /*
1738 : : GetVarWritten - returns TRUE if this symbol is a variable and
1739 : : has been marked as being written.
1740 : : */
1741 : :
1742 : : extern "C" bool SymbolTable_GetVarWritten (unsigned int sym);
1743 : :
1744 : : /*
1745 : : PutConst - gives the constant symbol Sym a type ConstType.
1746 : : */
1747 : :
1748 : : extern "C" void SymbolTable_PutConst (unsigned int Sym, unsigned int ConstType);
1749 : :
1750 : : /*
1751 : : PutConstSet - informs the const var symbol, sym, that it is or will contain
1752 : : a set value.
1753 : : */
1754 : :
1755 : : extern "C" void SymbolTable_PutConstSet (unsigned int Sym);
1756 : :
1757 : : /*
1758 : : IsConstSet - returns TRUE if the constant is declared as a set.
1759 : : */
1760 : :
1761 : : extern "C" bool SymbolTable_IsConstSet (unsigned int Sym);
1762 : :
1763 : : /*
1764 : : PutConstructor - informs the const var symbol, sym, that it is or
1765 : : will contain a constructor (record, set or array)
1766 : : value.
1767 : : */
1768 : :
1769 : : extern "C" void SymbolTable_PutConstructor (unsigned int Sym);
1770 : :
1771 : : /*
1772 : : PutConstructorFrom - sets the from type field in constructor,
1773 : : Sym, to, from.
1774 : : */
1775 : :
1776 : : extern "C" void SymbolTable_PutConstructorFrom (unsigned int Sym, unsigned int from);
1777 : :
1778 : : /*
1779 : : PutFieldRecord - places a field, FieldName and FieldType into a record, Sym.
1780 : : VarSym is a optional varient symbol which can be returned
1781 : : by a call to GetVarient(fieldsymbol). The created field
1782 : : is returned.
1783 : : */
1784 : :
1785 : : extern "C" unsigned int SymbolTable_PutFieldRecord (unsigned int Sym, NameKey_Name FieldName, unsigned int FieldType, unsigned int VarSym);
1786 : :
1787 : : /*
1788 : : PutFieldVarient - places the field varient, Field, as a brother to, the
1789 : : varient symbol, sym, and also tells Field that its varient
1790 : : parent is Sym.
1791 : : */
1792 : :
1793 : : extern "C" void SymbolTable_PutFieldVarient (unsigned int Field, unsigned int Sym);
1794 : :
1795 : : /*
1796 : : GetVarient - returns the varient symbol associated with the
1797 : : record or varient field symbol, Field.
1798 : : */
1799 : :
1800 : : extern "C" unsigned int SymbolTable_GetVarient (unsigned int Field);
1801 : :
1802 : : /*
1803 : : IsRecordFieldAVarientTag - returns TRUE if record field, sym, is
1804 : : a varient tag.
1805 : : */
1806 : :
1807 : : extern "C" bool SymbolTable_IsRecordFieldAVarientTag (unsigned int sym);
1808 : :
1809 : : /*
1810 : : IsEmptyFieldVarient - returns TRUE if the field variant has
1811 : : no fields. This will occur then the
1812 : : compiler constructs 'else end' variants.
1813 : : */
1814 : :
1815 : : extern "C" bool SymbolTable_IsEmptyFieldVarient (unsigned int sym);
1816 : :
1817 : : /*
1818 : : GetVarientTag - returns the varient tag from, Sym.
1819 : : */
1820 : :
1821 : : extern "C" unsigned int SymbolTable_GetVarientTag (unsigned int Sym);
1822 : :
1823 : : /*
1824 : : PutVarientTag - places, Tag, into varient, Sym.
1825 : : */
1826 : :
1827 : : extern "C" void SymbolTable_PutVarientTag (unsigned int Sym, unsigned int Tag);
1828 : :
1829 : : /*
1830 : : PutFieldEnumeration - places a field into the enumeration type
1831 : : Sym. The field has a name FieldName and a
1832 : : value FieldVal.
1833 : : */
1834 : :
1835 : : extern "C" void SymbolTable_PutFieldEnumeration (unsigned int tok, unsigned int Sym, NameKey_Name FieldName);
1836 : :
1837 : : /*
1838 : : PutSubrange - places LowSym and HighSym as two symbols
1839 : : which provide the limits of the range.
1840 : : */
1841 : :
1842 : : extern "C" void SymbolTable_PutSubrange (unsigned int Sym, unsigned int LowSym, unsigned int HighSym, unsigned int TypeSymbol);
1843 : :
1844 : : /*
1845 : : PutSet - places SimpleType as the type for set, Sym.
1846 : : */
1847 : :
1848 : : extern "C" void SymbolTable_PutSet (unsigned int Sym, unsigned int SimpleType, bool packed);
1849 : :
1850 : : /*
1851 : : IsSetPacked - returns TRUE if Sym is packed.
1852 : : */
1853 : :
1854 : : extern "C" bool SymbolTable_IsSetPacked (unsigned int Sym);
1855 : :
1856 : : /*
1857 : : GetArraySubscript - returns the subscript symbol for array, Sym.
1858 : : */
1859 : :
1860 : : extern "C" unsigned int SymbolTable_GetArraySubscript (unsigned int Sym);
1861 : :
1862 : : /*
1863 : : PutArraySubscript - places an index field into the array Sym. The
1864 : : index field is a subscript sym.
1865 : : */
1866 : :
1867 : : extern "C" void SymbolTable_PutArraySubscript (unsigned int Sym, unsigned int SubscriptSymbol);
1868 : :
1869 : : /*
1870 : : PutType - gives a type symbol Sym type TypeSymbol.
1871 : : */
1872 : :
1873 : : extern "C" void SymbolTable_PutType (unsigned int Sym, unsigned int TypeSymbol);
1874 : :
1875 : : /*
1876 : : PutFunction - Places a TypeSym as the return type to a procedure Sym.
1877 : : */
1878 : :
1879 : : extern "C" void SymbolTable_PutFunction (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int TypeSym);
1880 : :
1881 : : /*
1882 : : PutOptFunction - places a TypeSym as the optional return type to a procedure Sym.
1883 : : */
1884 : :
1885 : : extern "C" void SymbolTable_PutOptFunction (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int TypeSym);
1886 : :
1887 : : /*
1888 : : IsReturnOptional - returns TRUE if the return value for, sym, is
1889 : : optional.
1890 : : */
1891 : :
1892 : : extern "C" bool SymbolTable_IsReturnOptional (unsigned int sym, SymbolTable_ProcedureKind kind);
1893 : :
1894 : : /*
1895 : : IsReturnOptionalAny - returns TRUE if the return value for sym is
1896 : : optional.
1897 : : */
1898 : :
1899 : : extern "C" bool SymbolTable_IsReturnOptionalAny (unsigned int sym);
1900 : :
1901 : : /*
1902 : : PutParam - Places a Non VAR parameter ParamName with type ParamType into
1903 : : procedure Sym:kind. The parameter number is ParamNo.
1904 : : If the procedure Sym already has this parameter then
1905 : : the parameter is checked for consistancy and the
1906 : : consistancy test is returned.
1907 : : */
1908 : :
1909 : : extern "C" bool SymbolTable_PutParam (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo, NameKey_Name ParamName, unsigned int ParamType, bool isUnbounded, unsigned int typetok);
1910 : :
1911 : : /*
1912 : : PutVarParam - Places a Non VAR parameter ParamName with type
1913 : : ParamType into procedure Sym:kind.
1914 : : The parameter number is ParamNo.
1915 : : If the procedure Sym already has this parameter then
1916 : : the parameter is checked for consistancy and the
1917 : : consistancy test is returned.
1918 : : */
1919 : :
1920 : : extern "C" bool SymbolTable_PutVarParam (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo, NameKey_Name ParamName, unsigned int ParamType, bool isUnbounded, unsigned int typetok);
1921 : :
1922 : : /*
1923 : : PutParamName - assigns a name to paramater no of procedure ProcSym:kind.
1924 : : */
1925 : :
1926 : : extern "C" void SymbolTable_PutParamName (unsigned int tok, unsigned int ProcSym, SymbolTable_ProcedureKind kind, unsigned int no, NameKey_Name name, unsigned int ParamType, unsigned int typetok);
1927 : :
1928 : : /*
1929 : : PutProcedureReachable - Sets the procedure, Sym, to be reachable by the
1930 : : main Module.
1931 : : */
1932 : :
1933 : : extern "C" void SymbolTable_PutProcedureReachable (unsigned int Sym);
1934 : :
1935 : : /*
1936 : : IsProcedureReachable - Returns true if the procedure, Sym, is
1937 : : reachable from the main Module.
1938 : : */
1939 : :
1940 : : extern "C" bool SymbolTable_IsProcedureReachable (unsigned int Sym);
1941 : :
1942 : : /*
1943 : : PutProcedureNoReturn - places value into the no return attribute
1944 : : field of procedure sym.
1945 : : */
1946 : :
1947 : : extern "C" void SymbolTable_PutProcedureNoReturn (unsigned int Sym, SymbolTable_ProcedureKind kind, bool value);
1948 : :
1949 : : /*
1950 : : IsProcedureNoReturn - returns TRUE if this procedure never returns.
1951 : : */
1952 : :
1953 : : extern "C" bool SymbolTable_IsProcedureNoReturn (unsigned int Sym, SymbolTable_ProcedureKind kind);
1954 : :
1955 : : /*
1956 : : GetProcedureProcType - returns the proctype matching procedure sym.
1957 : : */
1958 : :
1959 : : extern "C" unsigned int SymbolTable_GetProcedureProcType (unsigned int sym);
1960 : :
1961 : : /*
1962 : : PutModuleStartQuad - Places QuadNumber into the Module symbol, Sym.
1963 : : QuadNumber is the start quad of Module,
1964 : : Sym.
1965 : : */
1966 : :
1967 : : extern "C" void SymbolTable_PutModuleStartQuad (unsigned int Sym, unsigned int QuadNumber);
1968 : :
1969 : : /*
1970 : : PutModuleEndQuad - Places QuadNumber into the Module symbol, Sym.
1971 : : QuadNumber is the end quad of Module,
1972 : : Sym.
1973 : : */
1974 : :
1975 : : extern "C" void SymbolTable_PutModuleEndQuad (unsigned int Sym, unsigned int QuadNumber);
1976 : :
1977 : : /*
1978 : : PutModuleFinallyStartQuad - Places QuadNumber into the Module symbol, Sym.
1979 : : QuadNumber is the finally start quad of
1980 : : Module, Sym.
1981 : : */
1982 : :
1983 : : extern "C" void SymbolTable_PutModuleFinallyStartQuad (unsigned int Sym, unsigned int QuadNumber);
1984 : :
1985 : : /*
1986 : : PutModuleFinallyEndQuad - Places QuadNumber into the Module symbol, Sym.
1987 : : QuadNumber is the end quad of the finally block
1988 : : in Module, Sym.
1989 : : */
1990 : :
1991 : : extern "C" void SymbolTable_PutModuleFinallyEndQuad (unsigned int Sym, unsigned int QuadNumber);
1992 : :
1993 : : /*
1994 : : GetModuleQuads - Returns, StartInit EndInit StartFinish EndFinish,
1995 : : Quads of a Module, Sym.
1996 : : Start and End represent the initialization code
1997 : : of the Module, Sym.
1998 : : */
1999 : :
2000 : : extern "C" void SymbolTable_GetModuleQuads (unsigned int Sym, unsigned int *StartInit, unsigned int *EndInit, unsigned int *StartFinish, unsigned int *EndFinish);
2001 : :
2002 : : /*
2003 : : PutModuleFinallyFunction - Places Tree, finally, into the Module symbol, Sym.
2004 : : */
2005 : :
2006 : : extern "C" void SymbolTable_PutModuleFinallyFunction (unsigned int Sym, tree finally);
2007 : :
2008 : : /*
2009 : : GetModuleFinallyFunction - returns the finally tree from the Module symbol, Sym.
2010 : : */
2011 : :
2012 : : extern "C" tree SymbolTable_GetModuleFinallyFunction (unsigned int Sym);
2013 : :
2014 : : /*
2015 : : PutProcedureScopeQuad - Places QuadNumber into the Procedure symbol, Sym.
2016 : : QuadNumber is the start quad of scope for procedure,
2017 : : Sym.
2018 : : */
2019 : :
2020 : : extern "C" void SymbolTable_PutProcedureScopeQuad (unsigned int Sym, unsigned int QuadNumber);
2021 : :
2022 : : /*
2023 : : PutProcedureStartQuad - Places QuadNumber into the Procedure symbol, Sym.
2024 : : QuadNumber is the start quad of procedure,
2025 : : Sym.
2026 : : */
2027 : :
2028 : : extern "C" void SymbolTable_PutProcedureStartQuad (unsigned int Sym, unsigned int QuadNumber);
2029 : :
2030 : : /*
2031 : : PutProcedureEndQuad - Places QuadNumber into the Procedure symbol, Sym.
2032 : : QuadNumber is the end quad of procedure,
2033 : : Sym.
2034 : : */
2035 : :
2036 : : extern "C" void SymbolTable_PutProcedureEndQuad (unsigned int Sym, unsigned int QuadNumber);
2037 : :
2038 : : /*
2039 : : GetProcedureQuads - Returns, Start and End, Quads of a procedure, Sym.
2040 : : */
2041 : :
2042 : : extern "C" void SymbolTable_GetProcedureQuads (unsigned int Sym, unsigned int *scope, unsigned int *start, unsigned int *end);
2043 : :
2044 : : /*
2045 : : GetQuads - assigns Start and End to the beginning and end of
2046 : : symbol, Sym, usage.
2047 : : */
2048 : :
2049 : : extern "C" void SymbolTable_GetQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int *Start, unsigned int *End);
2050 : :
2051 : : /*
2052 : : GetReadQuads - assigns Start and End to the beginning and end of
2053 : : symbol, Sym, read history usage.
2054 : : */
2055 : :
2056 : : extern "C" void SymbolTable_GetReadQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int *Start, unsigned int *End);
2057 : :
2058 : : /*
2059 : : GetWriteQuads - assigns Start and End to the beginning and end of
2060 : : symbol, Sym, usage.
2061 : : */
2062 : :
2063 : : extern "C" void SymbolTable_GetWriteQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int *Start, unsigned int *End);
2064 : :
2065 : : /*
2066 : : PutReadQuad - places Quad into the list of symbol usage.
2067 : : */
2068 : :
2069 : : extern "C" void SymbolTable_PutReadQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad);
2070 : :
2071 : : /*
2072 : : RemoveReadQuad - places Quad into the list of symbol usage.
2073 : : */
2074 : :
2075 : : extern "C" void SymbolTable_RemoveReadQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad);
2076 : :
2077 : : /*
2078 : : PutWriteQuad - places Quad into the list of symbol usage.
2079 : : */
2080 : :
2081 : : extern "C" void SymbolTable_PutWriteQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad);
2082 : :
2083 : : /*
2084 : : RemoveWriteQuad - places Quad into the list of symbol usage.
2085 : : */
2086 : :
2087 : : extern "C" void SymbolTable_RemoveWriteQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad);
2088 : :
2089 : : /*
2090 : : GetReadLimitQuads - returns Start and End which have been assigned
2091 : : the start and end of when the symbol was read
2092 : : to within: StartLimit..EndLimit.
2093 : : */
2094 : :
2095 : : extern "C" void SymbolTable_GetReadLimitQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int StartLimit, unsigned int EndLimit, unsigned int *Start, unsigned int *End);
2096 : :
2097 : : /*
2098 : : GetWriteLimitQuads - returns Start and End which have been assigned
2099 : : the start and end of when the symbol was written
2100 : : to within: StartLimit..EndLimit.
2101 : : */
2102 : :
2103 : : extern "C" void SymbolTable_GetWriteLimitQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int StartLimit, unsigned int EndLimit, unsigned int *Start, unsigned int *End);
2104 : :
2105 : : /*
2106 : : GetNthProcedure - Returns the Nth procedure in Module, Sym.
2107 : : */
2108 : :
2109 : : extern "C" unsigned int SymbolTable_GetNthProcedure (unsigned int Sym, unsigned int n);
2110 : :
2111 : : /*
2112 : : GetDeclaredDef - returns the tokenno where the symbol was declared
2113 : : in the definition module. UnknownTokenNo is returned
2114 : : if no declaration occurred.
2115 : : */
2116 : :
2117 : : extern "C" unsigned int SymbolTable_GetDeclaredDef (unsigned int Sym);
2118 : :
2119 : : /*
2120 : : GetDeclaredMod - returns the tokenno where the symbol was declared.
2121 : : in the program or implementation module.
2122 : : UnknownTokenNo is returned if no declaration occurred.
2123 : : */
2124 : :
2125 : : extern "C" unsigned int SymbolTable_GetDeclaredMod (unsigned int Sym);
2126 : :
2127 : : /*
2128 : : GetDeclaredFor - returns the token where this forward procedure symbol
2129 : : was declared in the program or implementation module.
2130 : : UnknownTokenNo is returned if no declaration occurred.
2131 : : */
2132 : :
2133 : : extern "C" unsigned int SymbolTable_GetDeclaredFor (unsigned int Sym);
2134 : :
2135 : : /*
2136 : : GetDeclaredDefinition - returns the token where this symbol
2137 : : was declared in the definition module.
2138 : : */
2139 : :
2140 : : extern "C" unsigned int SymbolTable_GetDeclaredDefinition (unsigned int Sym);
2141 : :
2142 : : /*
2143 : : GetDeclaredModule - returns the token where this symbol was declared
2144 : : in an implementation or program module.
2145 : : */
2146 : :
2147 : : extern "C" unsigned int SymbolTable_GetDeclaredModule (unsigned int Sym);
2148 : :
2149 : : /*
2150 : : PutDeclared - adds an entry to symbol, Sym, indicating that it
2151 : : was declared at, tok. This routine
2152 : : may be called twice, once for definition module
2153 : : partial declaration and once when parsing the
2154 : : implementation module.
2155 : : */
2156 : :
2157 : : extern "C" void SymbolTable_PutDeclared (unsigned int tok, unsigned int Sym);
2158 : :
2159 : : /*
2160 : : GetFirstUsed - returns the token where this symbol was first used.
2161 : : */
2162 : :
2163 : : extern "C" unsigned int SymbolTable_GetFirstUsed (unsigned int Sym);
2164 : :
2165 : : /*
2166 : : PutProcedureBegin - assigns begin as the token number matching the
2167 : : procedure BEGIN.
2168 : : */
2169 : :
2170 : : extern "C" void SymbolTable_PutProcedureBegin (unsigned int Sym, unsigned int begin);
2171 : :
2172 : : /*
2173 : : PutProcedureEnd - assigns end as the token number matching the
2174 : : procedure END.
2175 : : */
2176 : :
2177 : : extern "C" void SymbolTable_PutProcedureEnd (unsigned int Sym, unsigned int end);
2178 : :
2179 : : /*
2180 : : GetProcedureBeginEnd - assigns, begin, end, to the stored token values.
2181 : : */
2182 : :
2183 : : extern "C" void SymbolTable_GetProcedureBeginEnd (unsigned int Sym, unsigned int *begin, unsigned int *end);
2184 : :
2185 : : /*
2186 : : ForeachProcedureDo - for each procedure in module, Sym, do procedure, P.
2187 : : */
2188 : :
2189 : : extern "C" void SymbolTable_ForeachProcedureDo (unsigned int Sym, SymbolKey_PerformOperation P);
2190 : :
2191 : : /*
2192 : : ForeachModuleDo - for each module do procedure, P.
2193 : : */
2194 : :
2195 : : extern "C" void SymbolTable_ForeachModuleDo (SymbolKey_PerformOperation P);
2196 : :
2197 : : /*
2198 : : ForeachInnerModuleDo - for each inner module in module, Sym,
2199 : : do procedure, P.
2200 : : */
2201 : :
2202 : : extern "C" void SymbolTable_ForeachInnerModuleDo (unsigned int Sym, SymbolKey_PerformOperation P);
2203 : :
2204 : : /*
2205 : : IsVarParam - Returns a conditional depending whether parameter ParamNo
2206 : : is a VAR parameter.
2207 : : */
2208 : :
2209 : : extern "C" bool SymbolTable_IsVarParam (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo);
2210 : :
2211 : : /*
2212 : : IsVarParamAny - Returns a conditional depending whether parameter ParamNo
2213 : : is a VAR parameter.
2214 : : */
2215 : :
2216 : : extern "C" bool SymbolTable_IsVarParamAny (unsigned int Sym, unsigned int ParamNo);
2217 : :
2218 : : /*
2219 : : IsUnboundedParam - Returns a conditional depending whether parameter
2220 : : ParamNo is an unbounded array procedure parameter.
2221 : : */
2222 : :
2223 : : extern "C" bool SymbolTable_IsUnboundedParam (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo);
2224 : : extern "C" bool SymbolTable_IsUnboundedParamAny (unsigned int Sym, unsigned int ParamNo);
2225 : :
2226 : : /*
2227 : : IsParameterUnbounded - returns TRUE if parameter, Sym, is
2228 : : unbounded.
2229 : : */
2230 : :
2231 : : extern "C" bool SymbolTable_IsParameterUnbounded (unsigned int Sym);
2232 : :
2233 : : /*
2234 : : IsParameterVar - returns true if parameter symbol Sym
2235 : : was declared as a VAR.
2236 : : */
2237 : :
2238 : : extern "C" bool SymbolTable_IsParameterVar (unsigned int Sym);
2239 : :
2240 : : /*
2241 : : GetParameterShadowVar - returns the local variable associated with the
2242 : : parameter symbol, sym.
2243 : : */
2244 : :
2245 : : extern "C" unsigned int SymbolTable_GetParameterShadowVar (unsigned int sym);
2246 : :
2247 : : /*
2248 : : NoOfParam - Returns the number of parameters that procedure Sym contains.
2249 : : */
2250 : :
2251 : : extern "C" unsigned int SymbolTable_NoOfParam (unsigned int Sym, SymbolTable_ProcedureKind kind);
2252 : :
2253 : : /*
2254 : : HasVarParameters - returns TRUE if procedure, p, has any VAR parameters.
2255 : : */
2256 : :
2257 : : extern "C" bool SymbolTable_HasVarParameters (unsigned int p);
2258 : :
2259 : : /*
2260 : : NoOfLocalVar - returns the number of local variables that exist in
2261 : : procedure Sym. Parameters are NOT included in the
2262 : : count.
2263 : : */
2264 : :
2265 : : extern "C" unsigned int SymbolTable_NoOfLocalVar (unsigned int Sym);
2266 : :
2267 : : /*
2268 : : IsDefImp - returns true is the Sym is a DefImp symbol.
2269 : : Definition/Implementation module symbol.
2270 : : */
2271 : :
2272 : : extern "C" bool SymbolTable_IsDefImp (unsigned int Sym);
2273 : :
2274 : : /*
2275 : : IsModule - returns true is the Sym is a Module symbol.
2276 : : Program module symbol.
2277 : : */
2278 : :
2279 : : extern "C" bool SymbolTable_IsModule (unsigned int Sym);
2280 : :
2281 : : /*
2282 : : IsInnerModule - returns true if the symbol, Sym, is an inner module.
2283 : : */
2284 : :
2285 : : extern "C" bool SymbolTable_IsInnerModule (unsigned int Sym);
2286 : :
2287 : : /*
2288 : : GetSymName - returns the symbol name.
2289 : : */
2290 : :
2291 : : extern "C" NameKey_Name SymbolTable_GetSymName (unsigned int Sym);
2292 : :
2293 : : /*
2294 : : RenameSym - renames a symbol, Sym, with SymName.
2295 : : It also checks the unknown tree for a symbol
2296 : : with this new name. Must only be renamed in
2297 : : the same scope of being declared.
2298 : : */
2299 : :
2300 : : extern "C" void SymbolTable_RenameSym (unsigned int Sym, NameKey_Name SymName);
2301 : :
2302 : : /*
2303 : : IsUnknown - returns true is the symbol Sym is unknown.
2304 : : */
2305 : :
2306 : : extern "C" bool SymbolTable_IsUnknown (unsigned int Sym);
2307 : :
2308 : : /*
2309 : : IsPartialUnbounded - returns TRUE if, sym, is a partially unbounded symbol.
2310 : : */
2311 : :
2312 : : extern "C" bool SymbolTable_IsPartialUnbounded (unsigned int sym);
2313 : :
2314 : : /*
2315 : : RequestSym - searches for a symbol with a name SymName in the
2316 : : current and previous scopes.
2317 : : If the symbol is found then it is returned
2318 : : else an unknown symbol is returned create at token
2319 : : position, tok.
2320 : : This procedure does search the base scope (for
2321 : : pervasive identifiers).
2322 : : */
2323 : :
2324 : : extern "C" unsigned int SymbolTable_RequestSym (unsigned int tok, NameKey_Name SymName);
2325 : :
2326 : : /*
2327 : : PutImported - places a symbol, Sym, into the current main scope.
2328 : : */
2329 : :
2330 : : extern "C" void SymbolTable_PutImported (unsigned int Sym);
2331 : :
2332 : : /*
2333 : : PutIncluded - places a symbol, Sym, into the included list of the
2334 : : current module.
2335 : : Symbols that are placed in this list are indirectly declared
2336 : : by:
2337 : :
2338 : : IMPORT modulename ;
2339 : :
2340 : : modulename.identifier
2341 : : */
2342 : :
2343 : : extern "C" void SymbolTable_PutIncluded (unsigned int Sym);
2344 : :
2345 : : /*
2346 : : PutExported - places a symbol, Sym into the next level out module.
2347 : : Sym is also placed in the ExportTree of the current inner
2348 : : module.
2349 : : */
2350 : :
2351 : : extern "C" void SymbolTable_PutExported (unsigned int Sym);
2352 : :
2353 : : /*
2354 : : PutExportQualified - places a symbol with the name, SymName,
2355 : : into the export tree of the
2356 : : Definition module being compiled.
2357 : : The symbol with name has been EXPORT QUALIFIED
2358 : : by the definition module and therefore any reference
2359 : : to this symbol in the code generation phase
2360 : : will be in the form _Module_Name.
2361 : : */
2362 : :
2363 : : extern "C" void SymbolTable_PutExportQualified (unsigned int tokenno, NameKey_Name SymName);
2364 : :
2365 : : /*
2366 : : PutExportUnQualified - places a symbol with the name, SymName,
2367 : : into the export tree of the
2368 : : Definition module being compiled.
2369 : : The symbol with Name has been EXPORT UNQUALIFIED
2370 : : by the definition module and therefore any reference
2371 : : to this symbol in the code generation phase
2372 : : will be in the form _Name.
2373 : : */
2374 : :
2375 : : extern "C" void SymbolTable_PutExportUnQualified (unsigned int tokenno, NameKey_Name SymName);
2376 : :
2377 : : /*
2378 : : PutExportUnImplemented - places a symbol, Sym, into the currently compiled
2379 : : DefImp module NeedToBeImplemented list.
2380 : : */
2381 : :
2382 : : extern "C" void SymbolTable_PutExportUnImplemented (unsigned int tokenno, unsigned int Sym);
2383 : :
2384 : : /*
2385 : : GetExported - returns the symbol which has a name SymName,
2386 : : and is exported from the definition module ModSym.
2387 : :
2388 : : */
2389 : :
2390 : : extern "C" unsigned int SymbolTable_GetExported (unsigned int tokenno, unsigned int ModSym, NameKey_Name SymName);
2391 : :
2392 : : /*
2393 : : GetFromOuterModule - returns a symbol with name, SymName, which comes
2394 : : from outside the current module.
2395 : : */
2396 : :
2397 : : extern "C" unsigned int SymbolTable_GetFromOuterModule (unsigned int tokenno, NameKey_Name SymName);
2398 : :
2399 : : /*
2400 : : TryMoveUndeclaredSymToInnerModule - attempts to move a symbol of
2401 : : name, name, which is
2402 : : currently undefined in the
2403 : : outer scope to the inner scope.
2404 : : If successful then the symbol is
2405 : : returned otherwise NulSym is
2406 : : returned.
2407 : : */
2408 : :
2409 : : extern "C" unsigned int SymbolTable_TryMoveUndeclaredSymToInnerModule (unsigned int OuterScope, unsigned int InnerScope, NameKey_Name name);
2410 : :
2411 : : /*
2412 : : IsExportQualified - returns true if a symbol, Sym, was defined as
2413 : : being EXPORT QUALIFIED.
2414 : : Sym is expected to be either a procedure or a
2415 : : variable.
2416 : : */
2417 : :
2418 : : extern "C" bool SymbolTable_IsExportQualified (unsigned int Sym);
2419 : :
2420 : : /*
2421 : : IsExportUnQualified - returns true if a symbol, Sym, was defined as
2422 : : being EXPORT UNQUALIFIED.
2423 : : */
2424 : :
2425 : : extern "C" bool SymbolTable_IsExportUnQualified (unsigned int Sym);
2426 : :
2427 : : /*
2428 : : IsExported - returns true if a symbol, Sym, is exported
2429 : : from module, ModSym.
2430 : : If ModSym is a DefImp symbol then its
2431 : : ExportQualified and ExportUnQualified lists are examined.
2432 : : */
2433 : :
2434 : : extern "C" bool SymbolTable_IsExported (unsigned int ModSym, unsigned int Sym);
2435 : :
2436 : : /*
2437 : : IsImplicityExported - returns TRUE if, Sym, is implicitly exported from module, ModSym.
2438 : : ModSym must be a defimp symbol.
2439 : : */
2440 : :
2441 : : extern "C" bool SymbolTable_IsImplicityExported (unsigned int ModSym, unsigned int Sym);
2442 : :
2443 : : /*
2444 : : IsImported - returns true if a symbol, Sym, in module, ModSym,
2445 : : was imported.
2446 : : */
2447 : :
2448 : : extern "C" bool SymbolTable_IsImported (unsigned int ModSym, unsigned int Sym);
2449 : :
2450 : : /*
2451 : : PutIncludedByDefinition - places a module symbol, Sym, into the
2452 : : included list of the current definition module.
2453 : : */
2454 : :
2455 : : extern "C" void SymbolTable_PutIncludedByDefinition (unsigned int Sym);
2456 : :
2457 : : /*
2458 : : IsIncludedByDefinition - returns TRUE if definition module symbol, Sym, was included
2459 : : by ModSym's definition module.
2460 : : */
2461 : :
2462 : : extern "C" bool SymbolTable_IsIncludedByDefinition (unsigned int ModSym, unsigned int Sym);
2463 : :
2464 : : /*
2465 : : ForeachImportedDo - calls a procedure, P, foreach imported symbol
2466 : : in module, ModSym.
2467 : : */
2468 : :
2469 : : extern "C" void SymbolTable_ForeachImportedDo (unsigned int ModSym, SymbolKey_PerformOperation P);
2470 : :
2471 : : /*
2472 : : ForeachExportedDo - calls a procedure, P, foreach imported symbol
2473 : : in module, ModSym.
2474 : : */
2475 : :
2476 : : extern "C" void SymbolTable_ForeachExportedDo (unsigned int ModSym, SymbolKey_PerformOperation P);
2477 : :
2478 : : /*
2479 : : CheckForExportedImplementation - checks to see whether an implementation
2480 : : module is currently being compiled, if so,
2481 : : symbol, Sym, is removed from the
2482 : : NeedToBeImplemented list.
2483 : : This procedure is called whenever a symbol
2484 : : is declared, thus attempting to reduce
2485 : : the NeedToBeImplemented list.
2486 : : Only needs to be called when a TYPE or
2487 : : PROCEDURE is built since the implementation
2488 : : module can only implement these objects
2489 : : declared in the definition module.
2490 : :
2491 : : It also checks whether a definition module
2492 : : is currently being compiled and, if so,
2493 : : it will ensure that symbol, Sym, is removed
2494 : : from the ExportRequest list. If Sym is an
2495 : : enumerated type it ensures that its fields
2496 : : are also removed.
2497 : : */
2498 : :
2499 : : extern "C" void SymbolTable_CheckForExportedImplementation (unsigned int Sym);
2500 : :
2501 : : /*
2502 : : CheckForUnImplementedExports - displays an error and the offending symbols
2503 : : which have been exported but not implemented
2504 : : from the current compiled module.
2505 : : */
2506 : :
2507 : : extern "C" void SymbolTable_CheckForUnImplementedExports (void);
2508 : :
2509 : : /*
2510 : : CheckForUndeclaredExports - displays an error and the offending symbols
2511 : : which have been exported but not declared
2512 : : from module, ModSym.
2513 : : */
2514 : :
2515 : : extern "C" void SymbolTable_CheckForUndeclaredExports (unsigned int ModSym);
2516 : :
2517 : : /*
2518 : : CheckForUnknownInModule - checks for any unknown symbols in the
2519 : : current module.
2520 : : If any unknown symbols are found then
2521 : : an error message is displayed.
2522 : : */
2523 : :
2524 : : extern "C" void SymbolTable_CheckForUnknownInModule (void);
2525 : :
2526 : : /*
2527 : : UnknownReported - if sym is an unknown symbol and has not been reported
2528 : : then include it into the set of reported unknowns.
2529 : : */
2530 : :
2531 : : extern "C" void SymbolTable_UnknownReported (unsigned int sym);
2532 : :
2533 : : /*
2534 : : IsReallyPointer - returns TRUE is sym is a pointer, address or a
2535 : : type declared as a pointer or address.
2536 : : */
2537 : :
2538 : : extern "C" bool SymbolTable_IsReallyPointer (unsigned int Sym);
2539 : :
2540 : : /*
2541 : : CheckHiddenTypeAreAddress - checks to see that any hidden types
2542 : : which we have declared are actually
2543 : : of type ADDRESS or map onto a POINTER type.
2544 : : */
2545 : :
2546 : : extern "C" void SymbolTable_CheckHiddenTypeAreAddress (void);
2547 : :
2548 : : /*
2549 : : PutDefinitionForC - sets a flag in the current compiled module which
2550 : : indicates that this module is a wrapper for a C
2551 : : file. Parameters passes to procedures in this module
2552 : : will adopt the C calling convention.
2553 : : */
2554 : :
2555 : : extern "C" void SymbolTable_PutDefinitionForC (unsigned int Sym);
2556 : :
2557 : : /*
2558 : : IsDefinitionForC - returns true if this definition module was declared
2559 : : as a DEFINITION MODULE FOR "C".
2560 : : */
2561 : :
2562 : : extern "C" bool SymbolTable_IsDefinitionForC (unsigned int Sym);
2563 : :
2564 : : /*
2565 : : PutDoesNeedExportList - sets a flag in module, Sym, which
2566 : : indicates that this module requires an explicit
2567 : : EXPORT QUALIFIED or UNQUALIFIED list. PIM-2
2568 : : */
2569 : :
2570 : : extern "C" void SymbolTable_PutDoesNeedExportList (unsigned int Sym);
2571 : :
2572 : : /*
2573 : : PutDoesNotNeedExportList - sets a flag in module, Sym, which
2574 : : indicates that this module does not require an explicit
2575 : : EXPORT QUALIFIED or UNQUALIFIED list. PIM-3|4
2576 : : */
2577 : :
2578 : : extern "C" void SymbolTable_PutDoesNotNeedExportList (unsigned int Sym);
2579 : :
2580 : : /*
2581 : : DoesNotNeedExportList - returns TRUE if module, Sym, does not require an explicit
2582 : : EXPORT QUALIFIED list.
2583 : : */
2584 : :
2585 : : extern "C" bool SymbolTable_DoesNotNeedExportList (unsigned int Sym);
2586 : :
2587 : : /*
2588 : : CheckForEnumerationInCurrentModule - checks to see whether the enumeration
2589 : : type symbol, Sym, has been entered into
2590 : : the current modules scope list.
2591 : : */
2592 : :
2593 : : extern "C" void SymbolTable_CheckForEnumerationInCurrentModule (unsigned int Sym);
2594 : :
2595 : : /*
2596 : : SanityCheckConstants - must only be called once all constants, types, procedures
2597 : : have been declared. It checks to see that constants are
2598 : : not used as procedure parameter types.
2599 : : */
2600 : :
2601 : : extern "C" void SymbolTable_SanityCheckConstants (void);
2602 : :
2603 : : /*
2604 : : ForeachLocalSymDo - foreach local symbol in module, Sym, or procedure, Sym,
2605 : : perform the procedure, P.
2606 : : */
2607 : :
2608 : : extern "C" void SymbolTable_ForeachLocalSymDo (unsigned int Sym, SymbolKey_PerformOperation P);
2609 : :
2610 : : /*
2611 : : ForeachParamSymDo - foreach parameter symbol in procedure Sym
2612 : : perform the procedure P. Each symbol
2613 : : looked up will be VarParam or Param
2614 : : (not the shadow variable). Every parameter
2615 : : from each KindProcedure is iterated over.
2616 : : */
2617 : :
2618 : : extern "C" void SymbolTable_ForeachParamSymDo (unsigned int Sym, SymbolKey_PerformOperation P);
2619 : :
2620 : : /*
2621 : : ForeachFieldEnumerationDo - for each field in enumeration, Sym,
2622 : : do procedure, P. Each call to P contains
2623 : : an enumeration field, the order is alphabetical.
2624 : : Use ForeachLocalSymDo for declaration order.
2625 : : */
2626 : :
2627 : : extern "C" void SymbolTable_ForeachFieldEnumerationDo (unsigned int Sym, SymbolKey_PerformOperation P);
2628 : :
2629 : : /*
2630 : : IsType - returns true if the Sym is a type symbol.
2631 : : */
2632 : :
2633 : : extern "C" bool SymbolTable_IsType (unsigned int Sym);
2634 : :
2635 : : /*
2636 : : IsProcedure - returns true if Sym is a procedure symbol.
2637 : : */
2638 : :
2639 : : extern "C" bool SymbolTable_IsProcedure (unsigned int Sym);
2640 : :
2641 : : /*
2642 : : IsParameter - returns true if Sym is a parameter symbol.
2643 : : */
2644 : :
2645 : : extern "C" bool SymbolTable_IsParameter (unsigned int Sym);
2646 : :
2647 : : /*
2648 : : GetProcedureKind - returns the procedure kind given the declaration tok.
2649 : : The declaration tok must match the ident tok in the
2650 : : procedure name. It is only safe to call this
2651 : : procedure function during pass 2 onwards.
2652 : : */
2653 : :
2654 : : extern "C" SymbolTable_ProcedureKind SymbolTable_GetProcedureKind (unsigned int sym, unsigned int tok);
2655 : :
2656 : : /*
2657 : : GetProcedureDeclaredTok - return the token where the
2658 : : declaration of procedure sym:kind
2659 : : occurred.
2660 : : */
2661 : :
2662 : : extern "C" unsigned int SymbolTable_GetProcedureDeclaredTok (unsigned int sym, SymbolTable_ProcedureKind kind);
2663 : :
2664 : : /*
2665 : : PutProcedureDeclaredTok - places the tok where the
2666 : : declaration of procedure sym:kind
2667 : : occurred.
2668 : : */
2669 : :
2670 : : extern "C" void SymbolTable_PutProcedureDeclaredTok (unsigned int sym, SymbolTable_ProcedureKind kind, unsigned int tok);
2671 : :
2672 : : /*
2673 : : GetReturnTypeTok - return the token where the
2674 : : return type procedure sym:kind or proctype
2675 : : was defined.
2676 : : */
2677 : :
2678 : : extern "C" unsigned int SymbolTable_GetReturnTypeTok (unsigned int sym, SymbolTable_ProcedureKind kind);
2679 : :
2680 : : /*
2681 : : PutReturnTypeTok - places the tok where the
2682 : : return type of procedure sym:kind or proctype
2683 : : was defined.
2684 : : */
2685 : :
2686 : : extern "C" void SymbolTable_PutReturnTypeTok (unsigned int sym, SymbolTable_ProcedureKind kind, unsigned int tok);
2687 : :
2688 : : /*
2689 : : PutProcedureParametersDefined - the procedure symbol sym:kind
2690 : : parameters have been defined.
2691 : : */
2692 : :
2693 : : extern "C" void SymbolTable_PutProcedureParametersDefined (unsigned int sym, SymbolTable_ProcedureKind kind);
2694 : :
2695 : : /*
2696 : : GetProcedureParametersDefined - returns true if procedure symbol sym:kind
2697 : : parameters are defined.
2698 : : */
2699 : :
2700 : : extern "C" bool SymbolTable_GetProcedureParametersDefined (unsigned int sym, SymbolTable_ProcedureKind kind);
2701 : :
2702 : : /*
2703 : : PutProcedureDefined - the procedure symbol sym:kind is defined.
2704 : : */
2705 : :
2706 : : extern "C" void SymbolTable_PutProcedureDefined (unsigned int sym, SymbolTable_ProcedureKind kind);
2707 : :
2708 : : /*
2709 : : GetProcedureDefined - returns true if procedure symbol sym:kind
2710 : : is defined.
2711 : : */
2712 : :
2713 : : extern "C" bool SymbolTable_GetProcedureDefined (unsigned int sym, SymbolTable_ProcedureKind kind);
2714 : :
2715 : : /*
2716 : : PutUseVarArgs - tell the symbol table that this procedure, Sym,
2717 : : uses varargs.
2718 : : The procedure _must_ be declared inside a
2719 : : DEFINITION FOR "C"
2720 : :
2721 : : */
2722 : :
2723 : : extern "C" void SymbolTable_PutUseVarArgs (unsigned int Sym);
2724 : :
2725 : : /*
2726 : : UsesVarArgs - returns TRUE if procedure, Sym, uses varargs.
2727 : : The procedure _must_ be declared inside a
2728 : : DEFINITION FOR "C"
2729 : : */
2730 : :
2731 : : extern "C" bool SymbolTable_UsesVarArgs (unsigned int Sym);
2732 : :
2733 : : /*
2734 : : PutUseOptArg - tell the symbol table that this procedure, Sym,
2735 : : uses an optarg.
2736 : : */
2737 : :
2738 : : extern "C" void SymbolTable_PutUseOptArg (unsigned int Sym, SymbolTable_ProcedureKind kind);
2739 : :
2740 : : /*
2741 : : UsesOptArg - returns TRUE if procedure, Sym, uses varargs.
2742 : : */
2743 : :
2744 : : extern "C" bool SymbolTable_UsesOptArg (unsigned int Sym, SymbolTable_ProcedureKind kind);
2745 : :
2746 : : /*
2747 : : PutOptArgInit - makes symbol, Sym, the initializer value to
2748 : : procedure, ProcSym.
2749 : : */
2750 : :
2751 : : extern "C" void SymbolTable_PutOptArgInit (unsigned int ProcSym, unsigned int Sym);
2752 : :
2753 : : /*
2754 : : GetOptArgInit - returns the initializer value to the optional parameter in
2755 : : procedure, ProcSym.
2756 : : */
2757 : :
2758 : : extern "C" unsigned int SymbolTable_GetOptArgInit (unsigned int ProcSym);
2759 : :
2760 : : /*
2761 : : MakePointer - returns a pointer symbol with PointerName.
2762 : : */
2763 : :
2764 : : extern "C" unsigned int SymbolTable_MakePointer (unsigned int tok, NameKey_Name PointerName);
2765 : :
2766 : : /*
2767 : : PutPointer - gives a pointer symbol a type, PointerType.
2768 : : */
2769 : :
2770 : : extern "C" void SymbolTable_PutPointer (unsigned int Sym, unsigned int PointerType);
2771 : :
2772 : : /*
2773 : : IsPointer - returns true is Sym is a pointer type symbol.
2774 : : */
2775 : :
2776 : : extern "C" bool SymbolTable_IsPointer (unsigned int Sym);
2777 : :
2778 : : /*
2779 : : IsRecord - returns true is Sym is a record type symbol.
2780 : : */
2781 : :
2782 : : extern "C" bool SymbolTable_IsRecord (unsigned int Sym);
2783 : :
2784 : : /*
2785 : : IsVarient - returns true if the symbol, Sym, is a
2786 : : varient symbol.
2787 : : */
2788 : :
2789 : : extern "C" bool SymbolTable_IsVarient (unsigned int Sym);
2790 : :
2791 : : /*
2792 : : IsFieldVarient - returns true if the symbol, Sym, is a
2793 : : varient field.
2794 : : */
2795 : :
2796 : : extern "C" bool SymbolTable_IsFieldVarient (unsigned int Sym);
2797 : :
2798 : : /*
2799 : : IsFieldEnumeration - returns true if the symbol, Sym, is an
2800 : : enumeration field.
2801 : : */
2802 : :
2803 : : extern "C" bool SymbolTable_IsFieldEnumeration (unsigned int Sym);
2804 : :
2805 : : /*
2806 : : IsArray - returns true is Sym is an array type symbol.
2807 : : */
2808 : :
2809 : : extern "C" bool SymbolTable_IsArray (unsigned int Sym);
2810 : :
2811 : : /*
2812 : : IsEnumeration - returns true if Sym is an enumeration symbol.
2813 : : */
2814 : :
2815 : : extern "C" bool SymbolTable_IsEnumeration (unsigned int Sym);
2816 : :
2817 : : /*
2818 : : IsSet - returns TRUE if Sym is a set symbol.
2819 : : */
2820 : :
2821 : : extern "C" bool SymbolTable_IsSet (unsigned int Sym);
2822 : :
2823 : : /*
2824 : : IsHiddenType - returns TRUE if, Sym, is a Type and is also declared as a hidden type.
2825 : : */
2826 : :
2827 : : extern "C" bool SymbolTable_IsHiddenType (unsigned int Sym);
2828 : :
2829 : : /*
2830 : : IsOAFamily - returns TRUE if, Sym, is an OAFamily symbol.
2831 : : */
2832 : :
2833 : : extern "C" bool SymbolTable_IsOAFamily (unsigned int Sym);
2834 : :
2835 : : /*
2836 : : GetDimension - return the number of dimensions associated with
2837 : : this unbounded ARRAY parameter.
2838 : : */
2839 : :
2840 : : extern "C" unsigned int SymbolTable_GetDimension (unsigned int sym);
2841 : :
2842 : : /*
2843 : : MakeOAFamily - makes an OAFamily symbol based on SimpleType.
2844 : : It returns the OAFamily symbol. A new symbol
2845 : : is created if one does not already exist for
2846 : : SimpleType.
2847 : : */
2848 : :
2849 : : extern "C" unsigned int SymbolTable_MakeOAFamily (unsigned int SimpleType);
2850 : :
2851 : : /*
2852 : : GetOAFamily - returns the oafamily symbol associated with
2853 : : SimpleType.
2854 : : */
2855 : :
2856 : : extern "C" unsigned int SymbolTable_GetOAFamily (unsigned int SimpleType);
2857 : :
2858 : : /*
2859 : : ForeachOAFamily - call, p[oaf, ndim, symbol] for every unbounded symbol,
2860 : : sym, in the oaf.
2861 : : */
2862 : :
2863 : : extern "C" void SymbolTable_ForeachOAFamily (unsigned int sym, SymbolTable_FamilyOperation p);
2864 : :
2865 : : /*
2866 : : IsUnbounded - returns true if Sym is an unbounded symbol.
2867 : : */
2868 : :
2869 : : extern "C" bool SymbolTable_IsUnbounded (unsigned int Sym);
2870 : :
2871 : : /*
2872 : : GetUnbounded - returns the unbounded symbol associated with
2873 : : the OAFamily symbol, oaf, and the number of
2874 : : dimensions, ndim, of the open array.
2875 : : */
2876 : :
2877 : : extern "C" unsigned int SymbolTable_GetUnbounded (unsigned int oaf, unsigned int ndim);
2878 : :
2879 : : /*
2880 : : GetUnboundedRecordType - returns the record type used to
2881 : : implement the unbounded array.
2882 : : */
2883 : :
2884 : : extern "C" unsigned int SymbolTable_GetUnboundedRecordType (unsigned int Sym);
2885 : :
2886 : : /*
2887 : : GetUnboundedAddressOffset - returns the offset of the address field
2888 : : inside the record used to implement the
2889 : : unbounded type.
2890 : : */
2891 : :
2892 : : extern "C" unsigned int SymbolTable_GetUnboundedAddressOffset (unsigned int sym);
2893 : :
2894 : : /*
2895 : : GetUnboundedHighOffset - returns the offset of the high field
2896 : : inside the record used to implement the
2897 : : unbounded type.
2898 : : */
2899 : :
2900 : : extern "C" unsigned int SymbolTable_GetUnboundedHighOffset (unsigned int sym, unsigned int ndim);
2901 : :
2902 : : /*
2903 : : MakeSubscript - makes a subscript Symbol.
2904 : : No name is required.
2905 : : */
2906 : :
2907 : : extern "C" unsigned int SymbolTable_MakeSubscript (void);
2908 : :
2909 : : /*
2910 : : PutSubscript - gives a subscript symbol a type, SimpleType.
2911 : : */
2912 : :
2913 : : extern "C" void SymbolTable_PutSubscript (unsigned int Sym, unsigned int SimpleType);
2914 : :
2915 : : /*
2916 : : MakeUnbounded - makes an unbounded array Symbol.
2917 : : ndim is the number of dimensions required.
2918 : : No name is required.
2919 : : */
2920 : :
2921 : : extern "C" unsigned int SymbolTable_MakeUnbounded (unsigned int tok, unsigned int SimpleType, unsigned int ndim);
2922 : :
2923 : : /*
2924 : : NoOfElements - Returns the number of elements in array Sym,
2925 : : or the number of elements in an enumeration Sym or
2926 : : the number of interface symbols in an Interface list.
2927 : : */
2928 : :
2929 : : extern "C" unsigned int SymbolTable_NoOfElements (unsigned int Sym);
2930 : :
2931 : : /*
2932 : : PutArray - places a type symbol into an arraysym.
2933 : : */
2934 : :
2935 : : extern "C" void SymbolTable_PutArray (unsigned int arraysym, unsigned int typesym);
2936 : :
2937 : : /*
2938 : : ResolveImports - it examines the import list of all inner modules
2939 : : and resolves all relative imports.
2940 : : */
2941 : :
2942 : : extern "C" void SymbolTable_ResolveImports (void);
2943 : :
2944 : : /*
2945 : : ResolveConstructorTypes - to be called at the end of pass three. Its
2946 : : purpose is to fix up all constructors whose
2947 : : types are unknown.
2948 : : */
2949 : :
2950 : : extern "C" void SymbolTable_ResolveConstructorTypes (void);
2951 : :
2952 : : /*
2953 : : AddNameToScope - adds a Name, n, to the list of objects declared at the
2954 : : current scope.
2955 : : */
2956 : :
2957 : : extern "C" void SymbolTable_AddNameToScope (NameKey_Name n);
2958 : :
2959 : : /*
2960 : : AddNameToImportList - adds a Name, n, to the import list of the current
2961 : : module.
2962 : : */
2963 : :
2964 : : extern "C" void SymbolTable_AddNameToImportList (NameKey_Name n);
2965 : :
2966 : : /*
2967 : : GetScope - returns the declaration scope of the symbol.
2968 : : */
2969 : :
2970 : : extern "C" unsigned int SymbolTable_GetScope (unsigned int Sym);
2971 : :
2972 : : /*
2973 : : GetModuleScope - returns the module scope of symbol, sym.
2974 : : If sym was declared within a nested procedure
2975 : : then return the module which defines the
2976 : : procedure.
2977 : : */
2978 : :
2979 : : extern "C" unsigned int SymbolTable_GetModuleScope (unsigned int sym);
2980 : :
2981 : : /*
2982 : : GetProcedureScope - returns the innermost procedure (if any)
2983 : : in which the symbol, sym, resides.
2984 : : A module inside the procedure is skipped
2985 : : over.
2986 : : */
2987 : :
2988 : : extern "C" unsigned int SymbolTable_GetProcedureScope (unsigned int sym);
2989 : :
2990 : : /*
2991 : : IsModuleWithinProcedure - returns TRUE if module, sym, is
2992 : : inside a procedure.
2993 : : */
2994 : :
2995 : : extern "C" bool SymbolTable_IsModuleWithinProcedure (unsigned int sym);
2996 : :
2997 : : /*
2998 : : GetParent - returns the parent of symbol, Sym.
2999 : : */
3000 : :
3001 : : extern "C" unsigned int SymbolTable_GetParent (unsigned int Sym);
3002 : :
3003 : : /*
3004 : : IsRecordField - returns true if Sym is a record field.
3005 : : */
3006 : :
3007 : : extern "C" bool SymbolTable_IsRecordField (unsigned int Sym);
3008 : :
3009 : : /*
3010 : : MakeProcType - returns a procedure type symbol with ProcTypeName.
3011 : : */
3012 : :
3013 : : extern "C" unsigned int SymbolTable_MakeProcType (unsigned int tok, NameKey_Name ProcTypeName);
3014 : :
3015 : : /*
3016 : : PutProcTypeParam - Places a Non VAR parameter ParamName with type
3017 : : ParamType into ProcType Sym.
3018 : : */
3019 : :
3020 : : extern "C" void SymbolTable_PutProcTypeParam (unsigned int Sym, unsigned int ParamType, bool isUnbounded);
3021 : :
3022 : : /*
3023 : : PutProcTypeVarParam - Places a Non VAR parameter ParamName with type
3024 : : ParamType into ProcType Sym.
3025 : : */
3026 : :
3027 : : extern "C" void SymbolTable_PutProcTypeVarParam (unsigned int Sym, unsigned int ParamType, bool isUnbounded);
3028 : :
3029 : : /*
3030 : : IsProcType - returns true if Sym is a ProcType Symbol.
3031 : : */
3032 : :
3033 : : extern "C" bool SymbolTable_IsProcType (unsigned int Sym);
3034 : :
3035 : : /*
3036 : : IsVar - returns true if Sym is a Var Symbol.
3037 : : */
3038 : :
3039 : : extern "C" bool SymbolTable_IsVar (unsigned int Sym);
3040 : :
3041 : : /*
3042 : : IsVarConst - returns the IsConst field indicating the variable is read only.
3043 : : */
3044 : :
3045 : : extern "C" bool SymbolTable_IsVarConst (unsigned int sym);
3046 : :
3047 : : /*
3048 : : IsConst - returns true if Sym contains a constant value.
3049 : : */
3050 : :
3051 : : extern "C" bool SymbolTable_IsConst (unsigned int Sym);
3052 : :
3053 : : /*
3054 : : IsConstString - returns whether sym is a conststring of any variant.
3055 : : */
3056 : :
3057 : : extern "C" bool SymbolTable_IsConstString (unsigned int sym);
3058 : :
3059 : : /*
3060 : : IsConstStringNulTerminated - returns TRUE if the constant string, sym,
3061 : : should be created with a nul terminator.
3062 : : */
3063 : :
3064 : : extern "C" bool SymbolTable_IsConstStringNulTerminated (unsigned int sym);
3065 : :
3066 : : /*
3067 : : IsConstLit - returns true if Sym is a literal constant.
3068 : : */
3069 : :
3070 : : extern "C" bool SymbolTable_IsConstLit (unsigned int Sym);
3071 : :
3072 : : /*
3073 : : IsConstructor - returns TRUE if the constant is declared as a
3074 : : constant set, array or record.
3075 : : */
3076 : :
3077 : : extern "C" bool SymbolTable_IsConstructor (unsigned int Sym);
3078 : :
3079 : : /*
3080 : : IsDummy - returns true if Sym is a Dummy symbol.
3081 : : */
3082 : :
3083 : : extern "C" bool SymbolTable_IsDummy (unsigned int Sym);
3084 : :
3085 : : /*
3086 : : IsTemporary - returns true if Sym is a Temporary symbol.
3087 : : */
3088 : :
3089 : : extern "C" bool SymbolTable_IsTemporary (unsigned int Sym);
3090 : :
3091 : : /*
3092 : : IsVarAParam - returns true if Sym is a variable declared as a parameter.
3093 : : */
3094 : :
3095 : : extern "C" bool SymbolTable_IsVarAParam (unsigned int Sym);
3096 : :
3097 : : /*
3098 : : IsSubscript - returns true if Sym is a subscript symbol.
3099 : : */
3100 : :
3101 : : extern "C" bool SymbolTable_IsSubscript (unsigned int Sym);
3102 : :
3103 : : /*
3104 : : IsSubrange - returns true if Sym is a subrange symbol.
3105 : : */
3106 : :
3107 : : extern "C" bool SymbolTable_IsSubrange (unsigned int Sym);
3108 : :
3109 : : /*
3110 : : IsProcedureVariable - returns true if a Sym is a variable and
3111 : : it was declared within a procedure.
3112 : : */
3113 : :
3114 : : extern "C" bool SymbolTable_IsProcedureVariable (unsigned int Sym);
3115 : :
3116 : : /*
3117 : : IsProcedureNested - returns TRUE if procedure, Sym, was
3118 : : declared as a nested procedure.
3119 : : */
3120 : :
3121 : : extern "C" bool SymbolTable_IsProcedureNested (unsigned int Sym);
3122 : :
3123 : : /*
3124 : : IsAModula2Type - returns true if Sym, is a:
3125 : : IsType, IsPointer, IsRecord, IsEnumeration,
3126 : : IsSubrange, IsArray, IsUnbounded, IsProcType.
3127 : : NOTE that it different from IsType.
3128 : : */
3129 : :
3130 : : extern "C" bool SymbolTable_IsAModula2Type (unsigned int Sym);
3131 : :
3132 : : /*
3133 : : IsGnuAsmVolatile - returns TRUE if a GnuAsm symbol was defined as VOLATILE.
3134 : : */
3135 : :
3136 : : extern "C" bool SymbolTable_IsGnuAsmVolatile (unsigned int Sym);
3137 : :
3138 : : /*
3139 : : IsGnuAsmSimple - returns TRUE if a GnuAsm symbol is a simple kind.
3140 : : */
3141 : :
3142 : : extern "C" bool SymbolTable_IsGnuAsmSimple (unsigned int Sym);
3143 : :
3144 : : /*
3145 : : IsGnuAsm - returns TRUE if Sym is a GnuAsm symbol.
3146 : : */
3147 : :
3148 : : extern "C" bool SymbolTable_IsGnuAsm (unsigned int Sym);
3149 : :
3150 : : /*
3151 : : IsRegInterface - returns TRUE if Sym is a RegInterface symbol.
3152 : : */
3153 : :
3154 : : extern "C" bool SymbolTable_IsRegInterface (unsigned int Sym);
3155 : :
3156 : : /*
3157 : : IsSizeSolved - returns true if the size of Sym is solved.
3158 : : */
3159 : :
3160 : : extern "C" bool SymbolTable_IsSizeSolved (unsigned int Sym);
3161 : :
3162 : : /*
3163 : : IsOffsetSolved - returns true if the Offset of Sym is solved.
3164 : : */
3165 : :
3166 : : extern "C" bool SymbolTable_IsOffsetSolved (unsigned int Sym);
3167 : :
3168 : : /*
3169 : : IsValueSolved - returns true if the value of Sym is solved.
3170 : : */
3171 : :
3172 : : extern "C" bool SymbolTable_IsValueSolved (unsigned int Sym);
3173 : :
3174 : : /*
3175 : : IsConstructorConstant - returns TRUE if constructor, Sym, is
3176 : : defined by only constants.
3177 : : */
3178 : :
3179 : : extern "C" bool SymbolTable_IsConstructorConstant (unsigned int Sym);
3180 : :
3181 : : /*
3182 : : IsComposite - returns TRUE if symbol, sym, is a composite
3183 : : type: ie an ARRAY or RECORD.
3184 : : */
3185 : :
3186 : : extern "C" bool SymbolTable_IsComposite (unsigned int sym);
3187 : :
3188 : : /*
3189 : : IsSumOfParamSizeSolved - has the sum of parameters been solved yet?
3190 : : */
3191 : :
3192 : : extern "C" bool SymbolTable_IsSumOfParamSizeSolved (unsigned int Sym);
3193 : :
3194 : : /*
3195 : : PutAlignment - assigns the alignment constant associated with,
3196 : : type, with, align.
3197 : : */
3198 : :
3199 : : extern "C" void SymbolTable_PutAlignment (unsigned int type, unsigned int align);
3200 : :
3201 : : /*
3202 : : GetAlignment - returns the alignment constant associated with,
3203 : : type.
3204 : : */
3205 : :
3206 : : extern "C" unsigned int SymbolTable_GetAlignment (unsigned int type);
3207 : :
3208 : : /*
3209 : : GetDefaultRecordFieldAlignment - assigns, align, as the default alignment
3210 : : to record, sym.
3211 : : */
3212 : :
3213 : : extern "C" unsigned int SymbolTable_GetDefaultRecordFieldAlignment (unsigned int sym);
3214 : :
3215 : : /*
3216 : : PutDefaultRecordFieldAlignment - assigns, align, as the default alignment
3217 : : to record, sym.
3218 : : */
3219 : :
3220 : : extern "C" void SymbolTable_PutDefaultRecordFieldAlignment (unsigned int sym, unsigned int align);
3221 : :
3222 : : /*
3223 : : PutUnused - sets, sym, as unused. This is a gm2 pragma.
3224 : : */
3225 : :
3226 : : extern "C" void SymbolTable_PutUnused (unsigned int sym);
3227 : :
3228 : : /*
3229 : : IsUnused - returns TRUE if the symbol was declared as unused with a
3230 : : gm2 pragma.
3231 : : */
3232 : :
3233 : : extern "C" bool SymbolTable_IsUnused (unsigned int sym);
3234 : :
3235 : : /*
3236 : : PutDeclaredPacked - sets the Packed field of the record or record field symbol.
3237 : : */
3238 : :
3239 : : extern "C" void SymbolTable_PutDeclaredPacked (unsigned int sym, bool b);
3240 : :
3241 : : /*
3242 : : IsDeclaredPacked - was the record symbol or record field, sym,
3243 : : declared as packed?
3244 : : */
3245 : :
3246 : : extern "C" bool SymbolTable_IsDeclaredPacked (unsigned int sym);
3247 : :
3248 : : /*
3249 : : IsDeclaredPackedResolved - do we know if the record symbol or record
3250 : : field, sym, declared as packed or not packed?
3251 : : */
3252 : :
3253 : : extern "C" bool SymbolTable_IsDeclaredPackedResolved (unsigned int sym);
3254 : :
3255 : : /*
3256 : : GetPackedEquivalent - returns the packed equivalent of type, sym.
3257 : : sym must be a type, subrange or enumerated type.
3258 : : */
3259 : :
3260 : : extern "C" unsigned int SymbolTable_GetPackedEquivalent (unsigned int sym);
3261 : :
3262 : : /*
3263 : : GetNonPackedEquivalent - returns the equivalent non packed symbol associated with, sym.
3264 : : */
3265 : :
3266 : : extern "C" unsigned int SymbolTable_GetNonPackedEquivalent (unsigned int sym);
3267 : :
3268 : : /*
3269 : : IsEquivalent - returns TRUE if, sym, is an equivalent symbol.
3270 : : */
3271 : :
3272 : : extern "C" bool SymbolTable_IsEquivalent (unsigned int sym);
3273 : :
3274 : : /*
3275 : : PushSize - pushes the size of Sym.
3276 : : */
3277 : :
3278 : : extern "C" void SymbolTable_PushSize (unsigned int Sym);
3279 : :
3280 : : /*
3281 : : PopSize - pops the ALU stack into Size of Sym.
3282 : : */
3283 : :
3284 : : extern "C" void SymbolTable_PopSize (unsigned int Sym);
3285 : :
3286 : : /*
3287 : : PushValue - pushes the Value of Sym onto the ALU stack.
3288 : : */
3289 : :
3290 : : extern "C" void SymbolTable_PushValue (unsigned int Sym);
3291 : :
3292 : : /*
3293 : : PushVarSize - pushes the size of a variable, Sym.
3294 : : The runtime size of Sym will depend upon its addressing mode,
3295 : : RightValue has size PushSize(GetType(Sym)) and
3296 : : LeftValue has size PushSize(Address) since it points to a
3297 : : variable.
3298 : : */
3299 : :
3300 : : extern "C" void SymbolTable_PushVarSize (unsigned int Sym);
3301 : :
3302 : : /*
3303 : : PopValue - pops the ALU stack into Value of Sym.
3304 : : */
3305 : :
3306 : : extern "C" void SymbolTable_PopValue (unsigned int Sym);
3307 : :
3308 : : /*
3309 : : IsObject - returns TRUE if the symbol is an object symbol.
3310 : : */
3311 : :
3312 : : extern "C" bool SymbolTable_IsObject (unsigned int Sym);
3313 : :
3314 : : /*
3315 : : IsTuple - returns TRUE if the symbol is a tuple symbol.
3316 : : */
3317 : :
3318 : : extern "C" bool SymbolTable_IsTuple (unsigned int Sym);
3319 : :
3320 : : /*
3321 : : Make2Tuple - creates and returns a 2 tuple from, a, and, b.
3322 : : */
3323 : :
3324 : : extern "C" unsigned int SymbolTable_Make2Tuple (unsigned int a, unsigned int b);
3325 : :
3326 : : /*
3327 : : MakeError - creates an error node, which can be used in MetaError messages.
3328 : : It will be removed from ExportUndeclared and Unknown trees.
3329 : : */
3330 : :
3331 : : extern "C" unsigned int SymbolTable_MakeError (unsigned int tok, NameKey_Name name);
3332 : :
3333 : : /*
3334 : : MakeErrorS - creates an error node from a string, which can be used
3335 : : in MetaError messages.
3336 : : It will be removed from ExportUndeclared and Unknown trees.
3337 : : */
3338 : :
3339 : : extern "C" unsigned int SymbolTable_MakeErrorS (unsigned int tok, DynamicStrings_String name);
3340 : :
3341 : : /*
3342 : : IsError - returns TRUE if the symbol is an error symbol.
3343 : : */
3344 : :
3345 : : extern "C" bool SymbolTable_IsError (unsigned int Sym);
3346 : :
3347 : : /*
3348 : : IsLegal - returns TRUE if, sym, is a legal symbol.
3349 : : */
3350 : :
3351 : : extern "C" bool SymbolTable_IsLegal (unsigned int sym);
3352 : :
3353 : : /*
3354 : : PutModuleContainsBuiltin - sets a flag in the current compiled module which
3355 : : indicates that a builtin procedure is being declared.
3356 : : This is only expected to be called when we are
3357 : : parsing the definition module.
3358 : : */
3359 : :
3360 : : extern "C" void SymbolTable_PutModuleContainsBuiltin (void);
3361 : :
3362 : : /*
3363 : : IsBuiltinInModule - returns true if a module, Sym, has declared a builtin procedure.
3364 : : */
3365 : :
3366 : : extern "C" bool SymbolTable_IsBuiltinInModule (unsigned int Sym);
3367 : :
3368 : : /*
3369 : : PutHiddenTypeDeclared - sets a flag in the current compiled module which
3370 : : indicates that a Hidden Type is declared within
3371 : : the implementation part of the module.
3372 : : This procedure is expected to be called while
3373 : : compiling the associated definition module.
3374 : : */
3375 : :
3376 : : extern "C" void SymbolTable_PutHiddenTypeDeclared (void);
3377 : :
3378 : : /*
3379 : : IsHiddenTypeDeclared - returns true if a Hidden Type was declared in
3380 : : the module, Sym.
3381 : : */
3382 : :
3383 : : extern "C" bool SymbolTable_IsHiddenTypeDeclared (unsigned int Sym);
3384 : :
3385 : : /*
3386 : : IsHiddenReallyPointer - returns TRUE is sym is a pointer, address or a
3387 : : type declared as a pointer or address.
3388 : : */
3389 : :
3390 : : extern "C" bool SymbolTable_IsHiddenReallyPointer (unsigned int Sym);
3391 : :
3392 : : /*
3393 : : DisplayTrees - displays the SymbolTrees for Module symbol, ModSym.
3394 : : */
3395 : :
3396 : : extern "C" void SymbolTable_DisplayTrees (unsigned int ModSym);
3397 : :
3398 : : /*
3399 : : DebugLineNumbers - internal debugging, emit all procedure names in this module
3400 : : together with the line numbers for the corresponding begin/end
3401 : : tokens.
3402 : : */
3403 : :
3404 : : extern "C" void SymbolTable_DebugLineNumbers (unsigned int sym);
3405 : :
3406 : : /*
3407 : : GetErrorScope - returns the error scope for a symbol.
3408 : : The error scope is the title scope which is used to
3409 : : announce the symbol in the GCC error message.
3410 : : */
3411 : :
3412 : : extern "C" M2Error_ErrorScope SymbolTable_GetErrorScope (unsigned int sym);
3413 : :
3414 : : /*
3415 : : MakeImport - create and return an import symbol.
3416 : : moduleSym is the symbol being imported.
3417 : : isqualified is FALSE if it were IMPORT modulename and
3418 : : TRUE for the qualified FROM modulename IMPORT etc.
3419 : : listno is the import list count for this module.
3420 : : tok should match this modulename position.
3421 : : */
3422 : :
3423 : : extern "C" unsigned int SymbolTable_MakeImport (unsigned int tok, unsigned int moduleSym, unsigned int listno, bool isqualified);
3424 : :
3425 : : /*
3426 : : MakeImportStatement - return a dependent symbol which represents an import statement
3427 : : or a qualified import statement. The tok should either match
3428 : : the FROM token or the IMPORT token. listno is the import list
3429 : : count for the module.
3430 : : */
3431 : :
3432 : : extern "C" unsigned int SymbolTable_MakeImportStatement (unsigned int tok, unsigned int listno);
3433 : :
3434 : : /*
3435 : : IsImport - returns TRUE if sym is an import symbol.
3436 : : */
3437 : :
3438 : : extern "C" bool SymbolTable_IsImport (unsigned int sym);
3439 : :
3440 : : /*
3441 : : IsImportStatement - returns TRUE if sym is a dependent symbol.
3442 : : */
3443 : :
3444 : : extern "C" bool SymbolTable_IsImportStatement (unsigned int sym);
3445 : :
3446 : : /*
3447 : : GetImportModule - returns the module associated with the import symbol.
3448 : : */
3449 : :
3450 : : extern "C" unsigned int SymbolTable_GetImportModule (unsigned int sym);
3451 : :
3452 : : /*
3453 : : GetImportDeclared - returns the token associated with the import symbol.
3454 : : */
3455 : :
3456 : : extern "C" unsigned int SymbolTable_GetImportDeclared (unsigned int sym);
3457 : :
3458 : : /*
3459 : : GetImportStatementList - returns the list of imports for this dependent.
3460 : : Each import symbol corresponds to a module.
3461 : : */
3462 : :
3463 : : extern "C" Lists_List SymbolTable_GetImportStatementList (unsigned int sym);
3464 : :
3465 : : /*
3466 : : GetModuleDefImportStatementList - returns the list of dependents associated with
3467 : : the definition module.
3468 : : */
3469 : :
3470 : : extern "C" Lists_List SymbolTable_GetModuleDefImportStatementList (unsigned int sym);
3471 : :
3472 : : /*
3473 : : GetModuleModImportStatementList - returns the list of dependents associated with
3474 : : the implementation or program module.
3475 : : */
3476 : :
3477 : : extern "C" Lists_List SymbolTable_GetModuleModImportStatementList (unsigned int sym);
3478 : :
3479 : : /*
3480 : : AppendModuleImportStatement - appends the ImportStatement symbol onto the
3481 : : module import list.
3482 : :
3483 : : For example:
3484 : :
3485 : : FROM x IMPORT y, z ;
3486 : : ^^^^
3487 : :
3488 : : also:
3489 : :
3490 : : IMPORT p, q, r;
3491 : : ^^^^^^
3492 : : will result in a new ImportStatement symbol added
3493 : : to the current module import list.
3494 : : The statement symbol is expected to be created
3495 : : by MakeImportStatement using the token positions
3496 : : outlined above.
3497 : : */
3498 : :
3499 : : extern "C" void SymbolTable_AppendModuleImportStatement (unsigned int module, unsigned int statement);
3500 : :
3501 : : /*
3502 : : AppendModuleOnImportStatement - appends the import symbol onto the
3503 : : dependent list (chain).
3504 : :
3505 : : For example each:
3506 : :
3507 : : FROM x IMPORT y, z ;
3508 : : ^
3509 : : x are added to the dependent list.
3510 : :
3511 : : also:
3512 : :
3513 : : IMPORT p, q, r;
3514 : : ^ ^ ^
3515 : : will result in p, q and r added to
3516 : : to the dependent list.
3517 : :
3518 : : The import symbol is created by MakeImport
3519 : : and the token is expected to match the module
3520 : : name position outlined above.
3521 : : */
3522 : :
3523 : : extern "C" void SymbolTable_AppendModuleOnImportStatement (unsigned int module, unsigned int import);
3524 : :
3525 : : /*
3526 : : PutModLink - assigns link to module sym.
3527 : : */
3528 : :
3529 : : extern "C" void SymbolTable_PutModLink (unsigned int sym, bool link);
3530 : :
3531 : : /*
3532 : : IsModLink - returns the ModLink value associated with the module symbol.
3533 : : */
3534 : :
3535 : : extern "C" bool SymbolTable_IsModLink (unsigned int sym);
3536 : :
3537 : : /*
3538 : : PutDefLink - assigns link to the definition module sym.
3539 : : */
3540 : :
3541 : : extern "C" void SymbolTable_PutDefLink (unsigned int sym, bool link);
3542 : :
3543 : : /*
3544 : : IsDefLink - returns the DefLink value associated with the definition module symbol.
3545 : : */
3546 : :
3547 : : extern "C" bool SymbolTable_IsDefLink (unsigned int sym);
3548 : :
3549 : : /*
3550 : : IsModuleBuiltin - returns TRUE if the module is a builtin module.
3551 : : (For example _BaseTypes).
3552 : : */
3553 : :
3554 : : extern "C" bool SymbolTable_IsModuleBuiltin (unsigned int sym);
3555 : :
3556 : : /*
3557 : : PutModuleBuiltin - sets the Builtin flag to value.
3558 : : Currently the procedure expects sym to be a DefImp
3559 : : module only.
3560 : : */
3561 : :
3562 : : extern "C" void SymbolTable_PutModuleBuiltin (unsigned int sym, bool value);
3563 : :
3564 : : /*
3565 : : PutVarArrayRef - assigns ArrayRef field with value.
3566 : : */
3567 : :
3568 : : extern "C" void SymbolTable_PutVarArrayRef (unsigned int sym, bool value);
3569 : :
3570 : : /*
3571 : : IsVarArrayRef - returns ArrayRef field value.
3572 : : */
3573 : :
3574 : : extern "C" bool SymbolTable_IsVarArrayRef (unsigned int sym);
3575 : :
3576 : : /*
3577 : : VarCheckReadInit - returns TRUE if sym has been initialized.
3578 : : */
3579 : :
3580 : : extern "C" bool SymbolTable_VarCheckReadInit (unsigned int sym, SymbolTable_ModeOfAddr mode);
3581 : :
3582 : : /*
3583 : : VarInitState - initializes the init state for variable sym.
3584 : : */
3585 : :
3586 : : extern "C" void SymbolTable_VarInitState (unsigned int sym);
3587 : :
3588 : : /*
3589 : : PutVarInitialized - set sym as initialized.
3590 : : */
3591 : :
3592 : : extern "C" void SymbolTable_PutVarInitialized (unsigned int sym, SymbolTable_ModeOfAddr mode);
3593 : :
3594 : : /*
3595 : : PutVarFieldInitialized - records that field has been initialized with
3596 : : variable sym. TRUE is returned if the field
3597 : : is detected and changed to initialized.
3598 : : */
3599 : :
3600 : : extern "C" bool SymbolTable_PutVarFieldInitialized (unsigned int sym, SymbolTable_ModeOfAddr mode, Lists_List fieldlist);
3601 : :
3602 : : /*
3603 : : GetVarFieldInitialized - return TRUE if fieldlist has been initialized
3604 : : within variable sym.
3605 : : */
3606 : :
3607 : : extern "C" bool SymbolTable_GetVarFieldInitialized (unsigned int sym, SymbolTable_ModeOfAddr mode, Lists_List fieldlist);
3608 : :
3609 : : /*
3610 : : PrintInitialized - display variable sym initialization state.
3611 : : */
3612 : :
3613 : : extern "C" void SymbolTable_PrintInitialized (unsigned int sym);
3614 : :
3615 : : /*
3616 : : GetParameterHeapVar - return the heap variable associated with the
3617 : : parameter or NulSym.
3618 : : */
3619 : :
3620 : : extern "C" unsigned int SymbolTable_GetParameterHeapVar (unsigned int ParSym);
3621 : :
3622 : : /*
3623 : : PutProcedureParameterHeapVars - creates heap variables for parameter sym.
3624 : : */
3625 : :
3626 : : extern "C" void SymbolTable_PutProcedureParameterHeapVars (unsigned int sym);
3627 : :
3628 : : /*
3629 : : IsProcedureBuiltinAvailable - return TRUE if procedure is available as a builtin
3630 : : for the target architecture.
3631 : : */
3632 : :
3633 : : extern "C" bool SymbolTable_IsProcedureBuiltinAvailable (unsigned int procedure);
3634 : :
3635 : : /*
3636 : : PutConstLitInternal - marks the sym as being an internal constant.
3637 : : Currently this is used when generating a default
3638 : : BY constant expression during a FOR loop.
3639 : : A constant marked as internal will always pass
3640 : : an expression type check.
3641 : : */
3642 : :
3643 : : extern "C" void SymbolTable_PutConstLitInternal (unsigned int sym, bool value);
3644 : :
3645 : : /*
3646 : : IsConstLitInternal - returns the value of the IsInternal field within
3647 : : a constant expression.
3648 : : */
3649 : :
3650 : : extern "C" bool SymbolTable_IsConstLitInternal (unsigned int sym);
3651 : :
3652 : : /*
3653 : : GetVarDeclTypeTok - returns the TypeTok field associate with variable sym.
3654 : : */
3655 : :
3656 : : extern "C" unsigned int SymbolTable_GetVarDeclTypeTok (unsigned int sym);
3657 : :
3658 : : /*
3659 : : PutVarDeclTypeTok - assigns the TypeTok field to typetok.
3660 : : sym can be a variable or parameter.
3661 : : */
3662 : :
3663 : : extern "C" void SymbolTable_PutVarDeclTypeTok (unsigned int sym, unsigned int typetok);
3664 : :
3665 : : /*
3666 : : GetVarDeclTok - returns the TypeTok field associate with variable sym.
3667 : : */
3668 : :
3669 : : extern "C" unsigned int SymbolTable_GetVarDeclTok (unsigned int sym);
3670 : :
3671 : : /*
3672 : : PutVarDeclTok - assigns the VarTok field to typetok.
3673 : : sym can be a variable or parameter.
3674 : : */
3675 : :
3676 : : extern "C" void SymbolTable_PutVarDeclTok (unsigned int sym, unsigned int vartok);
3677 : :
3678 : : /*
3679 : : GetVarDeclFullTok - returns the full virtual token containing var: type.
3680 : : */
3681 : :
3682 : : extern "C" unsigned int SymbolTable_GetVarDeclFullTok (unsigned int sym);
3683 : :
3684 : : /*
3685 : : IsProcedureAnyNoReturn - return TRUE if any of the defined kinds
3686 : : of procedure sym is declared no return.
3687 : : */
3688 : :
3689 : : extern "C" bool SymbolTable_IsProcedureAnyNoReturn (unsigned int sym);
3690 : :
3691 : : /*
3692 : : GetNthParamAny - returns the nth parameter from the order
3693 : : proper procedure, forward declaration
3694 : : or definition module procedure.
3695 : : */
3696 : :
3697 : : extern "C" unsigned int SymbolTable_GetNthParamAny (unsigned int sym, unsigned int ParamNo);
3698 : :
3699 : : /*
3700 : : NoOfParamAny - return the number of parameters for sym.
3701 : : */
3702 : :
3703 : : extern "C" unsigned int SymbolTable_NoOfParamAny (unsigned int sym);
3704 : :
3705 : : /*
3706 : : SetReturnOptional - sets the ReturnOptional field in the Procedure:kind or
3707 : : ProcType symboltable entry.
3708 : : */
3709 : :
3710 : : extern "C" void SymbolTable_SetReturnOptional (unsigned int sym, SymbolTable_ProcedureKind kind, bool isopt);
3711 : :
3712 : : /*
3713 : : UsesOptArgAny - returns TRUE if procedure Sym:kind uses an optional argument.
3714 : : */
3715 : :
3716 : : extern "C" bool SymbolTable_UsesOptArgAny (unsigned int Sym);
3717 : :
3718 : : /*
3719 : : GetProcedureKindDesc - return a string describing kind.
3720 : : */
3721 : :
3722 : : extern "C" DynamicStrings_String SymbolTable_GetProcedureKindDesc (SymbolTable_ProcedureKind kind);
3723 : : static void InitWhereDeclaredTok (unsigned int tok, SymbolTable_Where *at);
3724 : :
3725 : : /*
3726 : : InitWhereDeclared - sets the Declared and FirstUsed fields of record, at.
3727 : : */
3728 : :
3729 : : static void InitWhereDeclared (SymbolTable_Where *at);
3730 : :
3731 : : /*
3732 : : InitWhereFirstUsed - sets the FirstUsed field of record, at.
3733 : : */
3734 : :
3735 : : static void InitWhereFirstUsed (SymbolTable_Where *at);
3736 : :
3737 : : /*
3738 : : InitWhereFirstUsedTok - sets the FirstUsed field of record, at.
3739 : : */
3740 : :
3741 : : static void InitWhereFirstUsedTok (unsigned int tok, SymbolTable_Where *at);
3742 : :
3743 : : /*
3744 : : stop - a debugger convenience hook.
3745 : : */
3746 : :
3747 : : static void stop (void);
3748 : :
3749 : : /*
3750 : : NewSym - Sets Sym to a new symbol index.
3751 : : */
3752 : :
3753 : : static void NewSym (unsigned int *sym);
3754 : :
3755 : : /*
3756 : : GetPsym - returns the pointer to, sym.
3757 : : */
3758 : :
3759 : : static SymbolTable_PtrToSymbol GetPsym (unsigned int sym);
3760 : :
3761 : : /*
3762 : : GetPcall - returns the pointer to the CallFrame.
3763 : : */
3764 : :
3765 : : static SymbolTable_PtrToCallFrame GetPcall (unsigned int call);
3766 : :
3767 : : /*
3768 : : DebugProcedureLineNumber -
3769 : : */
3770 : :
3771 : : static void DebugProcedureLineNumber (unsigned int sym);
3772 : :
3773 : : /*
3774 : : PutPartialUnbounded -
3775 : : */
3776 : :
3777 : : static void PutPartialUnbounded (unsigned int sym, unsigned int type, unsigned int ndim);
3778 : :
3779 : : /*
3780 : : AlreadyDeclaredError - generate an error message, a, and two areas of code showing
3781 : : the places where the symbols were declared.
3782 : : */
3783 : :
3784 : : static void AlreadyDeclaredError (DynamicStrings_String s, NameKey_Name name, unsigned int OtherOccurance);
3785 : :
3786 : : /*
3787 : : MakeObject - creates an object node.
3788 : : */
3789 : :
3790 : : static unsigned int MakeObject (NameKey_Name name);
3791 : :
3792 : : /*
3793 : : DeclareSym - returns a symbol which was either in the unknown tree or
3794 : : a New symbol, since name is about to be declared.
3795 : : */
3796 : :
3797 : : static unsigned int DeclareSym (unsigned int tok, NameKey_Name name);
3798 : :
3799 : : /*
3800 : : Init - Initializes the data structures and variables in this module.
3801 : : Initialize the trees.
3802 : : */
3803 : :
3804 : : static void Init (void);
3805 : :
3806 : : /*
3807 : : AddSymToUnknown -
3808 : : */
3809 : :
3810 : : static void AddSymToUnknown (unsigned int scope, NameKey_Name name, unsigned int Sym);
3811 : :
3812 : : /*
3813 : : AddSymToUnknownTree - adds a symbol with name, name, and Sym to the
3814 : : unknown tree.
3815 : : */
3816 : :
3817 : : static void AddSymToUnknownTree (int ScopeId, NameKey_Name name, unsigned int Sym);
3818 : :
3819 : : /*
3820 : : SubSymFromUnknownTree - removes a symbol with name, name, from the
3821 : : unknown tree.
3822 : : */
3823 : :
3824 : : static void SubSymFromUnknownTree (NameKey_Name name);
3825 : :
3826 : : /*
3827 : : GetSymFromUnknownTree - returns a symbol with name, name, from the
3828 : : unknown tree.
3829 : : If no symbol with name is found then NulSym
3830 : : is returned.
3831 : : */
3832 : :
3833 : : static unsigned int GetSymFromUnknownTree (NameKey_Name name);
3834 : :
3835 : : /*
3836 : : ExamineUnresolvedTree - returns a symbol with name, name, from the
3837 : : unresolved tree of module, ModSym.
3838 : : If no symbol with name is found then NulSym
3839 : : is returned.
3840 : : */
3841 : :
3842 : : static unsigned int ExamineUnresolvedTree (unsigned int ScopeSym, NameKey_Name name);
3843 : :
3844 : : /*
3845 : : RemoveFromUnresolvedTree - removes a symbol with name, name, from the
3846 : : unresolved tree of symbol, ScopeSym.
3847 : : */
3848 : :
3849 : : static bool RemoveFromUnresolvedTree (unsigned int ScopeSym, NameKey_Name name);
3850 : :
3851 : : /*
3852 : : FetchUnknownSym - returns a symbol from the unknown tree if one is
3853 : : available. It also updates the unknown tree.
3854 : : */
3855 : :
3856 : : static unsigned int FetchUnknownSym (NameKey_Name name);
3857 : :
3858 : : /*
3859 : : TransparentScope - returns true is the scope symbol Sym is allowed
3860 : : to look to an outer level for a symbol.
3861 : : ie is the symbol allowed to look to the parent
3862 : : scope for a symbol.
3863 : : */
3864 : :
3865 : : static bool TransparentScope (unsigned int Sym);
3866 : :
3867 : : /*
3868 : : GetLastModuleOrProcedureScope - returns the last module or procedure scope encountered,
3869 : : the scope before the current module scope.
3870 : : */
3871 : :
3872 : : static unsigned int GetLastModuleOrProcedureScope (void);
3873 : :
3874 : : /*
3875 : : AddSymToScope - adds a symbol Sym with name name to
3876 : : the current scope symbol tree.
3877 : : */
3878 : :
3879 : : static void AddSymToScope (unsigned int Sym, NameKey_Name name);
3880 : :
3881 : : /*
3882 : : PlaceMajorScopesEnumerationListOntoStack - places the DefImp, Module and
3883 : : Procedure symbols enumeration
3884 : : list onto the scope stack.
3885 : : */
3886 : :
3887 : : static void PlaceMajorScopesEnumerationListOntoStack (unsigned int Sym);
3888 : :
3889 : : /*
3890 : : PlaceEnumerationListOntoScope - places an enumeration list, l, onto the
3891 : : scope stack. This list will automatically
3892 : : removed via one call to EndScope which
3893 : : matches the StartScope by which this
3894 : : procedure is invoked.
3895 : : */
3896 : :
3897 : : static void PlaceEnumerationListOntoScope (Lists_List l);
3898 : :
3899 : : /*
3900 : : SetFirstUsed - assigns the FirstUsed field in at to tok providing
3901 : : it has not already been set.
3902 : : */
3903 : :
3904 : : static void SetFirstUsed (unsigned int tok, SymbolTable_Where *at);
3905 : :
3906 : : /*
3907 : : PutFirstUsed - sets tok to the first used providing it has not already been set.
3908 : : It also includes the read and write quad into the usage list
3909 : : providing the quad numbers are not 0.
3910 : : */
3911 : :
3912 : : static void PutFirstUsed (unsigned int object, unsigned int tok, unsigned int read_, unsigned int write_);
3913 : :
3914 : : /*
3915 : : CanLookThroughScope - by default this procedure returns TRUE. It only returns
3916 : : FALSE if, throughProcedure, is FALSE and the ScopeSym is
3917 : : a procedure.
3918 : : */
3919 : :
3920 : : static bool CanLookThroughScope (unsigned int ScopeSym, bool throughProcedure);
3921 : :
3922 : : /*
3923 : : GetScopeSym - searches the current scope and below, providing that the
3924 : : scopes are transparent, for a symbol with name, name.
3925 : : It only passes over procedure scopes if, throughProcedure,
3926 : : is TRUE.
3927 : : */
3928 : :
3929 : : static unsigned int GetScopeSym (NameKey_Name name, bool throughProcedure);
3930 : :
3931 : : /*
3932 : : CheckScopeForSym - checks the scope, ScopeSym, for an identifier
3933 : : of name, name. CheckScopeForSym checks for
3934 : : the symbol by the GetLocalSym and also
3935 : : ExamineUnresolvedTree.
3936 : : */
3937 : :
3938 : : static unsigned int CheckScopeForSym (unsigned int ScopeSym, NameKey_Name name);
3939 : :
3940 : : /*
3941 : : GetModuleScopeId - returns the scope index to the next module starting
3942 : : at index, Id.
3943 : : Id will either point to a null scope (NulSym) or
3944 : : alternatively point to a Module or DefImp symbol.
3945 : : */
3946 : :
3947 : : static unsigned int GetModuleScopeId (unsigned int Id);
3948 : :
3949 : : /*
3950 : : GetVisibleSym -
3951 : : */
3952 : :
3953 : : static unsigned int GetVisibleSym (NameKey_Name name);
3954 : :
3955 : : /*
3956 : : IsAlreadyDeclaredSym - returns true if Sym has already been declared
3957 : : in the current main scope.
3958 : : */
3959 : :
3960 : : static bool IsAlreadyDeclaredSym (NameKey_Name name);
3961 : :
3962 : : /*
3963 : : GenName - returns a new name consisting of pre, name, post concatenation.
3964 : : */
3965 : :
3966 : : static NameKey_Name GenName (NameKey_Name libname, const char *pre_, unsigned int _pre_high, NameKey_Name name, const char *post_, unsigned int _post_high);
3967 : :
3968 : : /*
3969 : : InitCtor - initialize the ModuleCtor fields to NulSym.
3970 : : */
3971 : :
3972 : : static void InitCtor (SymbolTable_ModuleCtor *ctor);
3973 : :
3974 : : /*
3975 : : InitCtorFields - initialize the ModuleCtor fields. An inner module has no
3976 : : ctor procedure.
3977 : : */
3978 : :
3979 : : static void InitCtorFields (unsigned int moduleTok, unsigned int beginTok, unsigned int finallyTok, unsigned int moduleSym, SymbolTable_ModuleCtor *ctor, NameKey_Name name, bool inner, bool pub);
3980 : :
3981 : : /*
3982 : : CheckTok - checks to see that tok is at a known location. If not
3983 : : it uses GetTokenNo as a fall back.
3984 : : */
3985 : :
3986 : : static unsigned int CheckTok (unsigned int tok, const char *name_, unsigned int _name_high);
3987 : :
3988 : : /*
3989 : : GetLink - returns TRUE if the current module is only used for linkage.
3990 : : */
3991 : :
3992 : : static bool GetLink (void);
3993 : :
3994 : : /*
3995 : : AddModuleToParent - adds symbol, Sym, to module, Parent.
3996 : : */
3997 : :
3998 : : static void AddModuleToParent (unsigned int Sym, unsigned int Parent);
3999 : :
4000 : : /*
4001 : : PutProcedureExternPublic - if procedure is not NulSym set extern
4002 : : and public booleans.
4003 : : */
4004 : :
4005 : : static void PutProcedureExternPublic (unsigned int procedure, bool extern_, bool pub);
4006 : :
4007 : : /*
4008 : : PutCtorExtern -
4009 : : */
4010 : :
4011 : : static void PutCtorExtern (unsigned int tok, unsigned int sym, SymbolTable_ModuleCtor *ctor, bool extern_);
4012 : :
4013 : : /*
4014 : : InitProcedureDeclaration - initialize all the ProcedureDeclaration
4015 : : fields.
4016 : : */
4017 : :
4018 : : static void InitProcedureDeclaration (SymbolTable_ProcedureDeclaration *decl);
4019 : :
4020 : : /*
4021 : : AddProcedureToList - adds a procedure, Proc, to the list of procedures
4022 : : in module, Mod.
4023 : : */
4024 : :
4025 : : static void AddProcedureToList (unsigned int Mod, unsigned int Proc);
4026 : :
4027 : : /*
4028 : : AddVarToScopeList - adds symbol, sym, to, scope.
4029 : : */
4030 : :
4031 : : static void AddVarToScopeList (unsigned int scope, unsigned int sym);
4032 : :
4033 : : /*
4034 : : AddVarToList - add a variable symbol to the list of variables maintained
4035 : : by the inner most scope. (Procedure or Module).
4036 : : */
4037 : :
4038 : : static void AddVarToList (unsigned int Sym);
4039 : :
4040 : : /*
4041 : : InitVarDecl - initialize the variable and type token location positions.
4042 : : */
4043 : :
4044 : : static void InitVarDecl (SymbolTable_VarDecl *decl, unsigned int vartok);
4045 : :
4046 : : /*
4047 : : doPutVarDeclTypeTok - places typetok into decl.TypeTok.
4048 : : sym must be a variable.
4049 : : */
4050 : :
4051 : : static void doPutVarDeclTypeTok (unsigned int sym, unsigned int typetok);
4052 : :
4053 : : /*
4054 : : doPutVarDeclTok - places vartok into decl.VarTok.
4055 : : sym must be a variable.
4056 : : */
4057 : :
4058 : : static void doPutVarDeclTok (unsigned int sym, unsigned int vartok);
4059 : :
4060 : : /*
4061 : : doGetVarDeclTok - return decl.VarTok for a variable.
4062 : : */
4063 : :
4064 : : static unsigned int doGetVarDeclTok (unsigned int sym);
4065 : :
4066 : : /*
4067 : : doGetVarDeclTypeTok - return decl.TypeTok for a variable.
4068 : : */
4069 : :
4070 : : static unsigned int doGetVarDeclTypeTok (unsigned int sym);
4071 : :
4072 : : /*
4073 : : doGetVarDeclFullTok - return the full declaration of var: type.
4074 : : */
4075 : :
4076 : : static unsigned int doGetVarDeclFullTok (unsigned int sym);
4077 : :
4078 : : /*
4079 : : FillInRecordFields - given a new symbol, sym, make it a record symbol
4080 : : and initialize its fields.
4081 : : */
4082 : :
4083 : : static void FillInRecordFields (unsigned int tok, unsigned int sym, NameKey_Name RecordName, unsigned int scope, unsigned int oaf);
4084 : :
4085 : : /*
4086 : : HandleHiddenOrDeclare -
4087 : : */
4088 : :
4089 : : static unsigned int HandleHiddenOrDeclare (unsigned int tok, NameKey_Name name, unsigned int *oaf);
4090 : :
4091 : : /*
4092 : : CreateConstLit -
4093 : : */
4094 : :
4095 : : static unsigned int CreateConstLit (unsigned int tok, NameKey_Name constName, unsigned int constType);
4096 : :
4097 : : /*
4098 : : LookupConstLitPoolEntry - return a ConstLit symbol from the constant pool which
4099 : : matches tok, constName and constType.
4100 : : */
4101 : :
4102 : : static unsigned int LookupConstLitPoolEntry (unsigned int tok, NameKey_Name constName, unsigned int constType);
4103 : :
4104 : : /*
4105 : : AddConstLitPoolEntry - adds sym to the constlit pool.
4106 : : */
4107 : :
4108 : : static void AddConstLitPoolEntry (unsigned int sym, unsigned int tok, NameKey_Name constName, unsigned int constType);
4109 : :
4110 : : /*
4111 : : InitConstString - initialize the constant string.
4112 : : */
4113 : :
4114 : : static void InitConstString (unsigned int tok, unsigned int sym, NameKey_Name name, NameKey_Name contents, SymbolTable_ConstStringVariant kind, bool escape, bool known);
4115 : :
4116 : : /*
4117 : : GetConstStringKind - return the StringVariant field associated with sym.
4118 : : */
4119 : :
4120 : : static SymbolTable_ConstStringVariant GetConstStringKind (unsigned int sym);
4121 : :
4122 : : /*
4123 : : CanUseBuiltin - returns TRUE if the procedure, Sym, can be
4124 : : inlined via a builtin function.
4125 : : */
4126 : :
4127 : : static bool CanUseBuiltin (unsigned int Sym);
4128 : :
4129 : : /*
4130 : : InitPacked - initialise packedInfo to FALSE and NulSym.
4131 : : */
4132 : :
4133 : : static void InitPacked (SymbolTable_PackedInfo *packedInfo);
4134 : :
4135 : : /*
4136 : : doEquivalent - create a packed equivalent symbol for, sym, and return the
4137 : : new symbol. It sets both fields in packedInfo to FALSE
4138 : : and the new symbol.
4139 : : */
4140 : :
4141 : : static unsigned int doEquivalent (SymbolTable_PackedInfo *packedInfo, unsigned int sym);
4142 : :
4143 : : /*
4144 : : MakeEquivalent - return the equivalent packed symbol for, sym.
4145 : : */
4146 : :
4147 : : static unsigned int MakeEquivalent (unsigned int sym);
4148 : :
4149 : : /*
4150 : : GetEquivalent -
4151 : : */
4152 : :
4153 : : static unsigned int GetEquivalent (SymbolTable_PackedInfo *packedInfo, unsigned int sym);
4154 : :
4155 : : /*
4156 : : doGetType - subsiduary helper procedure function of GetDType, GetSType and GetLType.
4157 : : */
4158 : :
4159 : : static unsigned int doGetType (unsigned int sym, bool skipEquiv, bool skipAlign, bool skipHidden, bool skipBase);
4160 : :
4161 : : /*
4162 : : GetTypeOfVar - returns the type of symbol, var.
4163 : : */
4164 : :
4165 : : static unsigned int GetTypeOfVar (unsigned int var);
4166 : :
4167 : : /*
4168 : : GetConstLitType - returns the type of the constant of, name.
4169 : : All floating point constants have type LONGREAL.
4170 : : Character constants are type CHAR.
4171 : : Integer values are INTEGER, LONGINT or LONGCARD
4172 : : depending upon their value.
4173 : : */
4174 : :
4175 : : static unsigned int GetConstLitType (unsigned int tok, NameKey_Name name, bool *overflow, bool issueError);
4176 : :
4177 : : /*
4178 : : GetNthFromComponent -
4179 : : */
4180 : :
4181 : : static unsigned int GetNthFromComponent (unsigned int Sym, unsigned int n);
4182 : :
4183 : : /*
4184 : : EnsureOrder - providing that both symbols, a, and, b, exist in
4185 : : list, l. Ensure that, b, is placed after a.
4186 : : */
4187 : :
4188 : : static void EnsureOrder (Lists_List l, unsigned int a, unsigned int b);
4189 : :
4190 : : /*
4191 : : DumpSons -
4192 : : */
4193 : :
4194 : : static void DumpSons (unsigned int sym);
4195 : :
4196 : : /*
4197 : : CheckListOfSons - checks to see that sym, is present in, recordConsist, ListOfSons.
4198 : : */
4199 : :
4200 : : static void CheckListOfSons (unsigned int sym);
4201 : :
4202 : : /*
4203 : : CheckRecordConsistency -
4204 : : */
4205 : :
4206 : : static void CheckRecordConsistency (unsigned int sym);
4207 : :
4208 : : /*
4209 : : PutConstVarTemporary - indicates that constant, sym, is a temporary.
4210 : : */
4211 : :
4212 : : static void PutConstVarTemporary (unsigned int sym);
4213 : :
4214 : : /*
4215 : : buildTemporary - builds the temporary filling in componentRef, record and sets mode.
4216 : : */
4217 : :
4218 : : static unsigned int buildTemporary (unsigned int tok, SymbolTable_ModeOfAddr Mode, bool componentRef, unsigned int record);
4219 : :
4220 : : /*
4221 : : AssertInRange - determines whether the Sym is a legal symbol.
4222 : : */
4223 : :
4224 : : static void AssertInRange (unsigned int Sym);
4225 : :
4226 : : /*
4227 : : CheckForHiddenType - scans the NeedToBeImplemented tree providing
4228 : : that we are currently compiling an implementation
4229 : : module. If a symbol is found with TypeName
4230 : : then its Sym is returned.
4231 : : Otherwise NulSym is returned.
4232 : : CheckForHiddenType is called before any type is
4233 : : created, therefore the compiler allows hidden
4234 : : types to be implemented using any type.
4235 : : */
4236 : :
4237 : : static unsigned int CheckForHiddenType (NameKey_Name TypeName);
4238 : :
4239 : : /*
4240 : : RequestFromModule - returns a symbol from module ModSym with name, SymName.
4241 : : */
4242 : :
4243 : : static unsigned int RequestFromModule (unsigned int tok, unsigned int ModSym, NameKey_Name SymName);
4244 : :
4245 : : /*
4246 : : RequestFromDefinition - returns a symbol from module ModSym with name,
4247 : : SymName.
4248 : : */
4249 : :
4250 : : static unsigned int RequestFromDefinition (unsigned int tok, unsigned int ModSym, NameKey_Name SymName);
4251 : :
4252 : : /*
4253 : : GetWhereImported - returns the token number where this symbol
4254 : : was imported into the current module.
4255 : : */
4256 : :
4257 : : static unsigned int GetWhereImported (unsigned int Sym);
4258 : :
4259 : : /*
4260 : : DisplayName - displays the name.
4261 : : */
4262 : :
4263 : : static void DisplayName (unsigned int sym);
4264 : :
4265 : : /*
4266 : : DisplaySymbol - displays the name of a symbol
4267 : : */
4268 : :
4269 : : static void DisplaySymbol (unsigned int sym);
4270 : :
4271 : : /*
4272 : : FetchUnknownFromModule - returns an Unknown symbol from module, ModSym.
4273 : : */
4274 : :
4275 : : static unsigned int FetchUnknownFromModule (unsigned int tok, unsigned int ModSym, NameKey_Name SymName);
4276 : :
4277 : : /*
4278 : : FetchUnknownFromDefImp - returns an Unknown symbol from module, ModSym.
4279 : : */
4280 : :
4281 : : static unsigned int FetchUnknownFromDefImp (unsigned int tok, unsigned int ModSym, NameKey_Name SymName);
4282 : :
4283 : : /*
4284 : : FetchUnknownFromDefImp - returns an Unknown symbol from module, ModSym.
4285 : : */
4286 : :
4287 : : static unsigned int FetchUnknownFrom (unsigned int tok, unsigned int scope, NameKey_Name SymName);
4288 : :
4289 : : /*
4290 : : UnknownSymbolError - displays symbol name for symbol, sym.
4291 : : */
4292 : :
4293 : : static void UnknownSymbolError (unsigned int sym);
4294 : :
4295 : : /*
4296 : : IsUnreportedUnknown - returns TRUE if symbol, sym, has not been
4297 : : reported and is an unknown symbol.
4298 : : */
4299 : :
4300 : : static bool IsUnreportedUnknown (unsigned int sym);
4301 : :
4302 : : /*
4303 : : AddListify -
4304 : : */
4305 : :
4306 : : static void AddListify (unsigned int sym);
4307 : :
4308 : : /*
4309 : : Listify - convert tree into a string list and return the result.
4310 : : */
4311 : :
4312 : : static DynamicStrings_String Listify (SymbolKey_SymbolTree tree, SymbolKey_IsSymbol isCondition);
4313 : :
4314 : : /*
4315 : : CheckForUnknowns - checks a binary tree, Tree, to see whether it contains
4316 : : an unknown symbol. All unknown symbols are displayed
4317 : : together with an error message.
4318 : : */
4319 : :
4320 : : static void CheckForUnknowns (NameKey_Name name, SymbolKey_SymbolTree Tree, const char *a_, unsigned int _a_high);
4321 : :
4322 : : /*
4323 : : SymbolError - displays symbol name for symbol, Sym.
4324 : : */
4325 : :
4326 : : static void SymbolError (unsigned int Sym);
4327 : :
4328 : : /*
4329 : : CheckForSymbols - checks a binary tree, Tree, to see whether it contains
4330 : : any symbol. The tree is expected to be empty, if not
4331 : : then an error has occurred.
4332 : : */
4333 : :
4334 : : static void CheckForSymbols (SymbolKey_SymbolTree Tree, const char *a_, unsigned int _a_high);
4335 : :
4336 : : /*
4337 : : PutExportUndeclared - places a symbol, Sym, into module, ModSym,
4338 : : ExportUndeclared list provided that Sym
4339 : : is unknown.
4340 : : */
4341 : :
4342 : : static void PutExportUndeclared (unsigned int ModSym, unsigned int Sym);
4343 : :
4344 : : /*
4345 : : GetExportUndeclared - returns a symbol which has, name, from module, ModSym,
4346 : : which is in the ExportUndeclared list.
4347 : : */
4348 : :
4349 : : static unsigned int GetExportUndeclared (unsigned int ModSym, NameKey_Name name);
4350 : :
4351 : : /*
4352 : : RemoveExportUndeclared - removes a symbol, Sym, from the module, ModSym,
4353 : : ExportUndeclaredTree.
4354 : : */
4355 : :
4356 : : static void RemoveExportUndeclared (unsigned int ModSym, unsigned int Sym);
4357 : :
4358 : : /*
4359 : : CheckForExportedDeclaration - checks to see whether a definition module
4360 : : is currently being compiled, if so,
4361 : : symbol, Sym, is removed from the
4362 : : ExportUndeclared list.
4363 : : This procedure is called whenever a symbol
4364 : : is declared, thus attempting to reduce
4365 : : the ExportUndeclared list.
4366 : : */
4367 : :
4368 : : static void CheckForExportedDeclaration (unsigned int Sym);
4369 : :
4370 : : /*
4371 : : UndeclaredSymbolError - displays symbol name for symbol, Sym.
4372 : : */
4373 : :
4374 : : static void UndeclaredSymbolError (unsigned int Sym);
4375 : :
4376 : : /*
4377 : : RemoveExportUnImplemented - removes a symbol, Sym, from the module, ModSym,
4378 : : NeedToBeImplemented list.
4379 : : */
4380 : :
4381 : : static void RemoveExportUnImplemented (unsigned int ModSym, unsigned int Sym);
4382 : :
4383 : : /*
4384 : : RemoveFromExportRequest -
4385 : : */
4386 : :
4387 : : static void RemoveFromExportRequest (unsigned int Sym);
4388 : :
4389 : : /*
4390 : : RemoveEnumerationFromExportRequest - removes enumeration symbol, sym,
4391 : : (and its fields) from the ExportRequest tree.
4392 : : */
4393 : :
4394 : : static void RemoveEnumerationFromExportRequest (unsigned int ModSym, unsigned int Sym);
4395 : :
4396 : : /*
4397 : : UnImplementedSymbolError - displays symbol name for symbol, Sym.
4398 : : */
4399 : :
4400 : : static void UnImplementedSymbolError (unsigned int Sym);
4401 : :
4402 : : /*
4403 : : CheckEnumerationInList - places symbol, Sym, in the list, l,
4404 : : providing it does not already exist.
4405 : : PseudoScope(Sym) is called if Sym needs to
4406 : : be added to the enumeration list, l.
4407 : : */
4408 : :
4409 : : static void CheckEnumerationInList (Lists_List l, unsigned int Sym);
4410 : :
4411 : : /*
4412 : : CheckIfEnumerationExported - An outer module may use an enumeration that
4413 : : is declared inside an inner module. The usage
4414 : : may occur before definition. The first pass
4415 : : exports a symbol, later the symbol is declared
4416 : : as an emumeration type. At this stage the
4417 : : CheckIfEnumerationExported procedure should be
4418 : : called. This procedure ripples from the current
4419 : : (inner) module to outer module and every time
4420 : : it is exported it must be added to the outer
4421 : : module EnumerationScopeList.
4422 : : */
4423 : :
4424 : : static void CheckIfEnumerationExported (unsigned int Sym, unsigned int ScopeId);
4425 : :
4426 : : /*
4427 : : CheckForEnumerationInOuterModule - checks to see whether the enumeration
4428 : : type symbol, Sym, has been entered into
4429 : : the outer module, OuterModule, scope list.
4430 : : OuterModule may be internal to the
4431 : : program module.
4432 : : */
4433 : :
4434 : : static void CheckForEnumerationInOuterModule (unsigned int Sym, unsigned int OuterModule);
4435 : :
4436 : : /*
4437 : : MakeVariableForParam -
4438 : : */
4439 : :
4440 : : static unsigned int MakeVariableForParam (unsigned int tok, NameKey_Name ParamName, unsigned int ProcSym, SymbolTable_ProcedureKind kind, unsigned int no, unsigned int ParmType, unsigned int typetok);
4441 : :
4442 : : /*
4443 : : AddParameter - adds a parameter ParSym to a procedure Sym.
4444 : : */
4445 : :
4446 : : static void AddParameter (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParSym);
4447 : :
4448 : : /*
4449 : : AddProcedureProcTypeParam - adds ParamType to the parameter ProcType
4450 : : associated with procedure Sym.
4451 : : */
4452 : :
4453 : : static void AddProcedureProcTypeParam (unsigned int Sym, unsigned int ParamType, bool isUnbounded, bool isVarParam);
4454 : :
4455 : : /*
4456 : : IsNthParamVar - returns true if the n th parameter of the parameter list,
4457 : : List, is a VAR parameter.
4458 : : */
4459 : :
4460 : : static bool IsNthParamVar (Lists_List Head, unsigned int n);
4461 : :
4462 : : /*
4463 : : MakeParameterHeapVar - create a heap variable if sym is a pointer.
4464 : : */
4465 : :
4466 : : static unsigned int MakeParameterHeapVar (unsigned int tok, unsigned int type, SymbolTable_ModeOfAddr mode);
4467 : :
4468 : : /*
4469 : : PutParameterHeapVar - creates a heap variable associated with parameter sym.
4470 : : */
4471 : :
4472 : : static void PutParameterHeapVar (unsigned int sym);
4473 : :
4474 : : /*
4475 : : IsProcedureAnyBoolean - returns the boolean result from p
4476 : : for any of procedure kind which is defined.
4477 : : */
4478 : :
4479 : : static bool IsProcedureAnyBoolean (unsigned int sym, SymbolTable_ProcAnyBoolean p);
4480 : :
4481 : : /*
4482 : : IsProcedureAnyDefaultBoolean - returns the boolean result from p
4483 : : for any of procedure kind which is defined.
4484 : : */
4485 : :
4486 : : static bool IsProcedureAnyDefaultBoolean (unsigned int sym, bool default_, SymbolTable_ProcAnyBoolean p);
4487 : :
4488 : : /*
4489 : : FillInUnknownFields -
4490 : : */
4491 : :
4492 : : static void FillInUnknownFields (unsigned int tok, unsigned int sym, NameKey_Name SymName);
4493 : :
4494 : : /*
4495 : : FillInPointerFields - given a new symbol, sym, make it a pointer symbol
4496 : : and initialize its fields.
4497 : : */
4498 : :
4499 : : static void FillInPointerFields (unsigned int Sym, NameKey_Name PointerName, unsigned int scope, unsigned int oaf);
4500 : :
4501 : : /*
4502 : : ForeachParameterDo -
4503 : : */
4504 : :
4505 : : static void ForeachParameterDo (SymbolTable_CheckProcedure p);
4506 : :
4507 : : /*
4508 : : CheckUnbounded - checks to see if parameter, Sym, is now an unbounded parameter.
4509 : : */
4510 : :
4511 : : static void CheckUnbounded (unsigned int Sym);
4512 : :
4513 : : /*
4514 : : PutOAFamily - places the, oaf, into, SimpleType, oafamily field.
4515 : : */
4516 : :
4517 : : static void PutOAFamily (unsigned int SimpleType, unsigned int oaf);
4518 : :
4519 : : /*
4520 : : doFillInOAFamily -
4521 : : */
4522 : :
4523 : : static void doFillInOAFamily (unsigned int oaf, unsigned int i, unsigned int unbounded);
4524 : :
4525 : : /*
4526 : : FillInUnboundedFields -
4527 : : */
4528 : :
4529 : : static void FillInUnboundedFields (unsigned int tok, unsigned int sym, unsigned int SimpleType, unsigned int ndim);
4530 : :
4531 : : /*
4532 : : PutUnbounded - associates the unbounded symbol, open, with
4533 : : SimpleType.
4534 : : */
4535 : :
4536 : : static void PutUnbounded (unsigned int oaf, unsigned int sym, unsigned int ndim);
4537 : :
4538 : : /*
4539 : : GetArrayDimension - returns the number of dimensions defined.
4540 : : */
4541 : :
4542 : : static unsigned int GetArrayDimension (unsigned int sym);
4543 : :
4544 : : /*
4545 : : ResolveConstructorType - if, sym, has an unresolved constructor type
4546 : : then attempt to resolve it by examining the
4547 : : from, type.
4548 : : */
4549 : :
4550 : : static void ResolveConstructorType (unsigned int sym, unsigned int *type, unsigned int *from, bool *unres);
4551 : :
4552 : : /*
4553 : : IsConstructorResolved - returns TRUE if the constructor does not
4554 : : have an unresolved type.
4555 : : */
4556 : :
4557 : : static bool IsConstructorResolved (unsigned int sym);
4558 : :
4559 : : /*
4560 : : CanResolveConstructor - returns TRUE if the type of the constructor,
4561 : : sym, is known.
4562 : : */
4563 : :
4564 : : static bool CanResolveConstructor (unsigned int sym);
4565 : :
4566 : : /*
4567 : : CheckAllConstructorsResolved - checks to see that the
4568 : : UnresolvedConstructorType list is
4569 : : empty and if it is not then it
4570 : : generates error messages.
4571 : : */
4572 : :
4573 : : static void CheckAllConstructorsResolved (void);
4574 : :
4575 : : /*
4576 : : SanityCheckParameters -
4577 : : */
4578 : :
4579 : : static void SanityCheckParameters (unsigned int sym);
4580 : :
4581 : : /*
4582 : : SanityCheckArray - checks to see that an array has a correct subrange type.
4583 : : */
4584 : :
4585 : : static void SanityCheckArray (unsigned int sym);
4586 : :
4587 : : /*
4588 : : ForeachSymbolDo - foreach symbol, call, P(sym).
4589 : : */
4590 : :
4591 : : static void ForeachSymbolDo (SymbolKey_PerformOperation P);
4592 : :
4593 : : /*
4594 : : SanityCheckProcedure - check to see that procedure parameters do not use constants
4595 : : instead of types in their formal parameter section.
4596 : : */
4597 : :
4598 : : static void SanityCheckProcedure (unsigned int sym);
4599 : :
4600 : : /*
4601 : : SanityCheckModule -
4602 : : */
4603 : :
4604 : : static void SanityCheckModule (unsigned int sym);
4605 : :
4606 : : /*
4607 : : AddNameTo - adds Name, n, to tree, s.
4608 : : */
4609 : :
4610 : : static void AddNameTo (SymbolKey_SymbolTree s, unsigned int o);
4611 : :
4612 : : /*
4613 : : CollectSymbolFrom -
4614 : : */
4615 : :
4616 : : static unsigned int CollectSymbolFrom (unsigned int tok, unsigned int scope, NameKey_Name n);
4617 : :
4618 : : /*
4619 : : CollectUnknown -
4620 : : */
4621 : :
4622 : : static unsigned int CollectUnknown (unsigned int tok, unsigned int sym, NameKey_Name n);
4623 : :
4624 : : /*
4625 : : ResolveImport -
4626 : : */
4627 : :
4628 : : static void ResolveImport (unsigned int o);
4629 : :
4630 : : /*
4631 : : ResolveRelativeImport -
4632 : : */
4633 : :
4634 : : static void ResolveRelativeImport (unsigned int sym);
4635 : :
4636 : : /*
4637 : : Max -
4638 : : */
4639 : :
4640 : : static unsigned int Max (unsigned int a, unsigned int b);
4641 : :
4642 : : /*
4643 : : Min -
4644 : : */
4645 : :
4646 : : static unsigned int Min (unsigned int a, unsigned int b);
4647 : :
4648 : : /*
4649 : : DoFindLimits - assigns, Start, and, End, to the start and end
4650 : : limits contained in the list, l. It ensures that
4651 : : Start and End are within StartLimit..EndLimit.
4652 : : If StartLimit or EndLimit are 0 then Start is
4653 : : is set to the first value and End to the last.
4654 : : */
4655 : :
4656 : : static void DoFindLimits (unsigned int StartLimit, unsigned int EndLimit, unsigned int *Start, unsigned int *End, Lists_List l);
4657 : :
4658 : : /*
4659 : : PutDeclaredDefinition - associates the current tokenno with
4660 : : the symbols declaration in the definition
4661 : : module.
4662 : : */
4663 : :
4664 : : static void PutDeclaredDefinition (unsigned int tok, unsigned int Sym);
4665 : :
4666 : : /*
4667 : : PutDeclaredModule - returns the token where this symbol was declared
4668 : : in an implementation or program module.
4669 : : */
4670 : :
4671 : : static void PutDeclaredModule (unsigned int tok, unsigned int Sym);
4672 : :
4673 : : /*
4674 : : DoIsConst - returns TRUE if Sym is defined as a constant
4675 : : or is an enumeration field or string.
4676 : : */
4677 : :
4678 : : static bool DoIsConst (unsigned int Sym);
4679 : :
4680 : : /*
4681 : : GetFromIndex - return a value from list, i, at position, n.
4682 : : */
4683 : :
4684 : : static unsigned int GetFromIndex (Indexing_Index i, unsigned int n);
4685 : :
4686 : : /*
4687 : : PutIntoIndex - places value, v, into list, i, at position, n.
4688 : : */
4689 : :
4690 : : static void PutIntoIndex (Indexing_Index *i, unsigned int n, unsigned int v);
4691 : :
4692 : : /*
4693 : : PushConstString - pushes the character string onto the ALU stack.
4694 : : It assumes that the character string is only
4695 : : one character long.
4696 : : */
4697 : :
4698 : : static void PushConstString (unsigned int Sym);
4699 : :
4700 : 36626831 : static void InitWhereDeclaredTok (unsigned int tok, SymbolTable_Where *at)
4701 : : {
4702 : : /*
4703 : : InitWhereDeclared - sets the Declared and FirstUsed fields of record, at.
4704 : : */
4705 : 36626831 : if (M2Comp_CompilingDefinitionModule ())
4706 : : {
4707 : 21407474 : (*at).DefDeclared = tok;
4708 : 21407474 : (*at).ModDeclared = M2LexBuf_UnknownTokenNo;
4709 : : }
4710 : : else
4711 : : {
4712 : 15219357 : (*at).DefDeclared = M2LexBuf_UnknownTokenNo;
4713 : 15219357 : (*at).ModDeclared = tok;
4714 : : }
4715 : 36626831 : (*at).FirstUsed = tok; /* we assign this field to something legal */
4716 : 36626831 : }
4717 : :
4718 : :
4719 : : /*
4720 : : InitWhereDeclared - sets the Declared and FirstUsed fields of record, at.
4721 : : */
4722 : :
4723 : 10863322 : static void InitWhereDeclared (SymbolTable_Where *at)
4724 : : {
4725 : 10863322 : InitWhereDeclaredTok (M2LexBuf_GetTokenNo (), at);
4726 : 10863322 : }
4727 : :
4728 : :
4729 : : /*
4730 : : InitWhereFirstUsed - sets the FirstUsed field of record, at.
4731 : : */
4732 : :
4733 : 4674799 : static void InitWhereFirstUsed (SymbolTable_Where *at)
4734 : : {
4735 : 0 : InitWhereFirstUsedTok (M2LexBuf_GetTokenNo (), at);
4736 : 0 : }
4737 : :
4738 : :
4739 : : /*
4740 : : InitWhereFirstUsedTok - sets the FirstUsed field of record, at.
4741 : : */
4742 : :
4743 : 20124111 : static void InitWhereFirstUsedTok (unsigned int tok, SymbolTable_Where *at)
4744 : : {
4745 : 20124111 : (*at).FirstUsed = tok;
4746 : 933169 : }
4747 : :
4748 : :
4749 : : /*
4750 : : stop - a debugger convenience hook.
4751 : : */
4752 : :
4753 : 0 : static void stop (void)
4754 : : {
4755 : 0 : }
4756 : :
4757 : :
4758 : : /*
4759 : : NewSym - Sets Sym to a new symbol index.
4760 : : */
4761 : :
4762 : 39476640 : static void NewSym (unsigned int *sym)
4763 : : {
4764 : 39476640 : SymbolTable_PtrToSymbol pSym;
4765 : :
4766 : 39476640 : (*sym) = FreeSymbol;
4767 : 39476640 : Storage_ALLOCATE ((void **) &pSym, sizeof (SymbolTable_Symbol));
4768 : 39476640 : pSym->SymbolType = SymbolTable_DummySym;
4769 : 39476640 : Indexing_PutIndice (Symbols, (*sym), reinterpret_cast <void *> (pSym));
4770 : 39476640 : if ((*sym) == BreakSym)
4771 : : {
4772 : 39476640 : stop ();
4773 : : }
4774 : 39476640 : FreeSymbol += 1;
4775 : 39476640 : }
4776 : :
4777 : :
4778 : : /*
4779 : : GetPsym - returns the pointer to, sym.
4780 : : */
4781 : :
4782 : 5571874582 : static SymbolTable_PtrToSymbol GetPsym (unsigned int sym)
4783 : : {
4784 : 5571874582 : SymbolTable_PtrToSymbol pSym;
4785 : :
4786 : 5571874582 : if (Indexing_InBounds (Symbols, sym))
4787 : : {
4788 : 5571874570 : pSym = static_cast<SymbolTable_PtrToSymbol> (Indexing_GetIndice (Symbols, sym));
4789 : 5571874570 : return pSym;
4790 : : }
4791 : : else
4792 : : {
4793 : 12 : M2Error_InternalError ((const char *) "symbol out of bounds", 20);
4794 : : }
4795 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
4796 : : __builtin_unreachable ();
4797 : : }
4798 : :
4799 : :
4800 : : /*
4801 : : GetPcall - returns the pointer to the CallFrame.
4802 : : */
4803 : :
4804 : 247112708 : static SymbolTable_PtrToCallFrame GetPcall (unsigned int call)
4805 : : {
4806 : 247112708 : SymbolTable_PtrToCallFrame pCall;
4807 : :
4808 : 247112708 : if (Indexing_InBounds (ScopeCallFrame, call))
4809 : : {
4810 : 247112708 : pCall = static_cast<SymbolTable_PtrToCallFrame> (Indexing_GetIndice (ScopeCallFrame, call));
4811 : 247112708 : return pCall;
4812 : : }
4813 : : else
4814 : : {
4815 : 0 : M2Error_InternalError ((const char *) "symbol out of bounds", 20);
4816 : : }
4817 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
4818 : : __builtin_unreachable ();
4819 : : }
4820 : :
4821 : :
4822 : : /*
4823 : : DebugProcedureLineNumber -
4824 : : */
4825 : :
4826 : 0 : static void DebugProcedureLineNumber (unsigned int sym)
4827 : : {
4828 : 0 : unsigned int begin;
4829 : 0 : unsigned int end;
4830 : 0 : NameKey_Name n;
4831 : 0 : DynamicStrings_String f;
4832 : 0 : unsigned int l;
4833 : :
4834 : 0 : SymbolTable_GetProcedureBeginEnd (sym, &begin, &end);
4835 : 0 : n = SymbolTable_GetSymName (sym);
4836 : 0 : if (begin != 0)
4837 : : {
4838 : 0 : f = M2LexBuf_FindFileNameFromToken (begin, 0);
4839 : 0 : l = M2LexBuf_TokenToLineNo (begin, 0);
4840 : 0 : M2Printf_printf3 ((const char *) "%s:%d:%a:begin\\n", 16, (const unsigned char *) &f, (sizeof (f)-1), (const unsigned char *) &l, (sizeof (l)-1), (const unsigned char *) &n, (sizeof (n)-1));
4841 : : }
4842 : 0 : if (end != 0)
4843 : : {
4844 : 0 : f = M2LexBuf_FindFileNameFromToken (end, 0);
4845 : 0 : l = M2LexBuf_TokenToLineNo (end, 0);
4846 : 0 : M2Printf_printf3 ((const char *) "%s:%d:%a:end\\n", 14, (const unsigned char *) &f, (sizeof (f)-1), (const unsigned char *) &l, (sizeof (l)-1), (const unsigned char *) &n, (sizeof (n)-1));
4847 : : }
4848 : 0 : }
4849 : :
4850 : :
4851 : : /*
4852 : : PutPartialUnbounded -
4853 : : */
4854 : :
4855 : 0 : static void PutPartialUnbounded (unsigned int sym, unsigned int type, unsigned int ndim)
4856 : : {
4857 : 0 : SymbolTable_PtrToSymbol pSym;
4858 : :
4859 : 0 : pSym = GetPsym (sym);
4860 : 0 : if (SymbolTable_IsDummy (sym))
4861 : : {
4862 : 0 : pSym->SymbolType = SymbolTable_PartialUnboundedSym;
4863 : : }
4864 : 0 : switch (pSym->SymbolType)
4865 : : {
4866 : 0 : case SymbolTable_PartialUnboundedSym:
4867 : 0 : pSym->PartialUnbounded.Type = type;
4868 : 0 : pSym->PartialUnbounded.NDim = ndim;
4869 : 0 : break;
4870 : :
4871 : :
4872 : 0 : default:
4873 : 0 : M2Error_InternalError ((const char *) "not expecting this type", 23);
4874 : 0 : break;
4875 : : }
4876 : 0 : }
4877 : :
4878 : :
4879 : : /*
4880 : : AlreadyDeclaredError - generate an error message, a, and two areas of code showing
4881 : : the places where the symbols were declared.
4882 : : */
4883 : :
4884 : 0 : static void AlreadyDeclaredError (DynamicStrings_String s, NameKey_Name name, unsigned int OtherOccurance)
4885 : : {
4886 : 0 : M2Error_Error e;
4887 : :
4888 : 0 : if ((OtherOccurance == 0) || (OtherOccurance == (M2LexBuf_GetTokenNo ())))
4889 : : {
4890 : 0 : e = M2Error_NewError (M2LexBuf_GetTokenNo ());
4891 : 0 : M2Error_ErrorString (e, s);
4892 : : }
4893 : : else
4894 : : {
4895 : 0 : e = M2Error_NewError (M2LexBuf_GetTokenNo ());
4896 : 0 : M2Error_ErrorString (e, s);
4897 : 0 : e = M2Error_ChainError (OtherOccurance, e);
4898 : 0 : M2Error_ErrorFormat1 (e, (const char *) "and symbol (%a) is also declared here", 37, (const unsigned char *) &name, (sizeof (name)-1));
4899 : : }
4900 : 0 : }
4901 : :
4902 : :
4903 : : /*
4904 : : MakeObject - creates an object node.
4905 : : */
4906 : :
4907 : 4672319 : static unsigned int MakeObject (NameKey_Name name)
4908 : : {
4909 : 4672319 : SymbolTable_PtrToSymbol pSym;
4910 : 4672319 : unsigned int Sym;
4911 : :
4912 : 4672319 : NewSym (&Sym);
4913 : 4672319 : pSym = GetPsym (Sym);
4914 : 4672319 : pSym->SymbolType = SymbolTable_ObjectSym;
4915 : 4672319 : pSym->Object.name = name;
4916 : 4672319 : InitWhereDeclared (&pSym->Object.At);
4917 : 4672319 : InitWhereFirstUsed (&pSym->Object.At);
4918 : 4672319 : return Sym;
4919 : : /* static analysis guarentees a RETURN statement will be used before here. */
4920 : : __builtin_unreachable ();
4921 : : }
4922 : :
4923 : :
4924 : : /*
4925 : : DeclareSym - returns a symbol which was either in the unknown tree or
4926 : : a New symbol, since name is about to be declared.
4927 : : */
4928 : :
4929 : 16385723 : static unsigned int DeclareSym (unsigned int tok, NameKey_Name name)
4930 : : {
4931 : 16385723 : unsigned int Sym;
4932 : :
4933 : 16385723 : if (name == NameKey_NulName)
4934 : : {
4935 : 3511771 : NewSym (&Sym);
4936 : : }
4937 : 12873952 : else if (IsAlreadyDeclaredSym (name))
4938 : : {
4939 : : /* avoid dangling else. */
4940 : 36 : Sym = SymbolTable_GetSym (name);
4941 : 36 : if (SymbolTable_IsImported (SymbolTable_GetCurrentModuleScope (), Sym))
4942 : : {
4943 : : /* avoid dangling else. */
4944 : 6 : M2MetaError_MetaErrorT1 (GetWhereImported (Sym), (const char *) "symbol {%1Rad} is already present in this scope, check both definition and implementation modules, use a different name or remove the import", 140, Sym);
4945 : 6 : M2MetaError_MetaErrorT1 (tok, (const char *) "symbol {%1Cad} also declared in this module", 43, Sym);
4946 : 6 : if (Sym != (GetVisibleSym (name)))
4947 : : {
4948 : 0 : M2MetaError_MetaErrorT1 (tok, (const char *) "symbol {%1CMad} also declared in this module", 44, GetVisibleSym (name));
4949 : : }
4950 : : }
4951 : : else
4952 : : {
4953 : 30 : M2MetaError_MetaErrorT1 (tok, (const char *) "symbol {%1RMad} is already declared in this scope, use a different name or remove the declaration", 97, Sym);
4954 : 30 : M2MetaError_MetaErrorT1 (tok, (const char *) "symbol {%1Cad} also declared in this module", 43, Sym);
4955 : 30 : if (Sym != (GetVisibleSym (name)))
4956 : : {
4957 : 0 : M2MetaError_MetaErrorT1 (tok, (const char *) "symbol {%1CMad} also declared in this module", 44, GetVisibleSym (name));
4958 : : }
4959 : : }
4960 : 36 : Sym = SymbolTable_MakeError (tok, name);
4961 : : }
4962 : : else
4963 : : {
4964 : : /* avoid dangling else. */
4965 : 12873916 : Sym = FetchUnknownSym (name);
4966 : 12873916 : if (Sym == SymbolTable_NulSym)
4967 : : {
4968 : 9942853 : NewSym (&Sym);
4969 : : }
4970 : 12873916 : CheckForExportedDeclaration (Sym);
4971 : : }
4972 : 16385723 : return Sym;
4973 : : /* static analysis guarentees a RETURN statement will be used before here. */
4974 : : __builtin_unreachable ();
4975 : : }
4976 : :
4977 : :
4978 : : /*
4979 : : Init - Initializes the data structures and variables in this module.
4980 : : Initialize the trees.
4981 : : */
4982 : :
4983 : 14232 : static void Init (void)
4984 : : {
4985 : 14232 : SymbolTable_PtrToCallFrame pCall;
4986 : :
4987 : 14232 : AnonymousName = 0;
4988 : 14232 : CurrentError = static_cast<M2Error_Error> (NULL);
4989 : 14232 : SymbolKey_InitTree (&ConstLitPoolTree);
4990 : 14232 : SymbolKey_InitTree (&DefModuleTree);
4991 : 14232 : SymbolKey_InitTree (&ModuleTree);
4992 : 14232 : Symbols = Indexing_InitIndexTuned (1, (1024*1024) / 16, 16);
4993 : 14232 : ConstLitArray = Indexing_InitIndex (1);
4994 : 14232 : FreeSymbol = 1;
4995 : 14232 : ScopePtr = 1;
4996 : 14232 : ScopeCallFrame = Indexing_InitIndex (1);
4997 : 14232 : Storage_ALLOCATE ((void **) &pCall, sizeof (SymbolTable_CallFrame));
4998 : 14232 : pCall->Main = SymbolTable_NulSym;
4999 : 14232 : pCall->Search = SymbolTable_NulSym;
5000 : 14232 : Indexing_PutIndice (ScopeCallFrame, ScopePtr, reinterpret_cast <void *> (pCall));
5001 : 14232 : CurrentModule = SymbolTable_NulSym;
5002 : 14232 : MainModule = SymbolTable_NulSym;
5003 : 14232 : FileModule = SymbolTable_NulSym;
5004 : 14232 : TemporaryNo = 0;
5005 : : /*
5006 : : InitList(FreeFVarientList) ; Lists used to maintain GC of field
5007 : : InitList(UsedFVarientList) ; varients.
5008 : : */
5009 : 14232 : Lists_InitList (&UnresolvedConstructorType);
5010 : 14232 : M2Base_InitBase (m2linemap_BuiltinsLocation (), &BaseModule);
5011 : 14232 : SymbolTable_StartScope (BaseModule); /* BaseModule scope placed at the bottom of the stack */
5012 : 14232 : BaseScopePtr = ScopePtr; /* BaseScopePtr points to the top of the BaseModule scope */
5013 : 14232 : Lists_InitList (&AddressTypes); /* BaseScopePtr points to the top of the BaseModule scope */
5014 : 14232 : ReportedUnknowns = Sets_InitSet (1);
5015 : 14232 : }
5016 : :
5017 : :
5018 : : /*
5019 : : AddSymToUnknown -
5020 : : */
5021 : :
5022 : 6271639 : static void AddSymToUnknown (unsigned int scope, NameKey_Name name, unsigned int Sym)
5023 : : {
5024 : 6271639 : SymbolTable_PtrToSymbol pSym;
5025 : 6271639 : NameKey_Name n;
5026 : :
5027 : 6271639 : if (DebugUnknowns)
5028 : : {
5029 : : n = SymbolTable_GetSymName (scope);
5030 : : M2Printf_printf3 ((const char *) "adding unknown %a (%d) to scope %a\\n", 36, (const unsigned char *) &name, (sizeof (name)-1), (const unsigned char *) &Sym, (sizeof (Sym)-1), (const unsigned char *) &n, (sizeof (n)-1));
5031 : : }
5032 : : /* Add symbol to unknown tree */
5033 : 6271639 : pSym = GetPsym (scope);
5034 : 6271639 : switch (pSym->SymbolType)
5035 : : {
5036 : 6262309 : case SymbolTable_DefImpSym:
5037 : 6262309 : SymbolKey_PutSymKey (pSym->DefImp.Unresolved, name, Sym);
5038 : 6262309 : break;
5039 : :
5040 : 9330 : case SymbolTable_ModuleSym:
5041 : 9330 : SymbolKey_PutSymKey (pSym->Module.Unresolved, name, Sym);
5042 : 9330 : break;
5043 : :
5044 : 0 : case SymbolTable_ProcedureSym:
5045 : 0 : SymbolKey_PutSymKey (pSym->Procedure.Unresolved, name, Sym);
5046 : 0 : break;
5047 : :
5048 : :
5049 : 0 : default:
5050 : 0 : M2Error_InternalError ((const char *) "expecting DefImp, Module or Procedure symbol", 44);
5051 : 6271639 : break;
5052 : : }
5053 : 6271639 : }
5054 : :
5055 : :
5056 : : /*
5057 : : AddSymToUnknownTree - adds a symbol with name, name, and Sym to the
5058 : : unknown tree.
5059 : : */
5060 : :
5061 : 6271621 : static void AddSymToUnknownTree (int ScopeId, NameKey_Name name, unsigned int Sym)
5062 : : {
5063 : 6271621 : SymbolTable_PtrToCallFrame pCall;
5064 : 6271621 : unsigned int ScopeSym;
5065 : :
5066 : 6271621 : if (ScopeId > 0)
5067 : : {
5068 : : /* choose to place the unknown symbol in the first module scope
5069 : : outside the current scope */
5070 : 6272311 : do {
5071 : 6272311 : pCall = GetPcall (static_cast<unsigned int> (ScopeId));
5072 : 6272311 : ScopeSym = pCall->Main;
5073 : 6272311 : if ((ScopeSym > 0) && ((SymbolTable_IsDefImp (ScopeSym)) || (SymbolTable_IsModule (ScopeSym))))
5074 : : {
5075 : 6271621 : AddSymToUnknown (ScopeSym, name, Sym);
5076 : 6271621 : return;
5077 : : }
5078 : 690 : ScopeId -= 1;
5079 : 690 : } while (! (ScopeId == 0));
5080 : : }
5081 : 0 : AddSymToUnknown (CurrentModule, name, Sym);
5082 : : }
5083 : :
5084 : :
5085 : : /*
5086 : : SubSymFromUnknownTree - removes a symbol with name, name, from the
5087 : : unknown tree.
5088 : : */
5089 : :
5090 : 2931069 : static void SubSymFromUnknownTree (NameKey_Name name)
5091 : : {
5092 : 2931069 : SymbolTable_PtrToCallFrame pCall;
5093 : 2931069 : unsigned int ScopeSym;
5094 : 2931069 : unsigned int ScopeId;
5095 : :
5096 : 2931069 : if (ScopePtr > 0)
5097 : : {
5098 : : ScopeId = ScopePtr;
5099 : 3987013 : do {
5100 : 3987013 : pCall = GetPcall (ScopeId);
5101 : 3987013 : ScopeSym = pCall->Search;
5102 : 3987013 : if (((SymbolTable_IsModule (ScopeSym)) || (SymbolTable_IsDefImp (ScopeSym))) || (SymbolTable_IsProcedure (ScopeSym)))
5103 : : {
5104 : 2931687 : if (RemoveFromUnresolvedTree (ScopeSym, name))
5105 : : {
5106 : : return;
5107 : : }
5108 : : }
5109 : 1055944 : ScopeId -= 1;
5110 : 2111888 : } while (! ((ScopeId > 0) && ((SymbolTable_IsModule (ScopeSym)) || (SymbolTable_IsDefImp (ScopeSym)))));
5111 : : }
5112 : 0 : if (RemoveFromUnresolvedTree (CurrentModule, name))
5113 : : {} /* empty. */
5114 : : }
5115 : :
5116 : :
5117 : : /*
5118 : : GetSymFromUnknownTree - returns a symbol with name, name, from the
5119 : : unknown tree.
5120 : : If no symbol with name is found then NulSym
5121 : : is returned.
5122 : : */
5123 : :
5124 : 19145729 : static unsigned int GetSymFromUnknownTree (NameKey_Name name)
5125 : : {
5126 : 19145729 : SymbolTable_PtrToCallFrame pCall;
5127 : 19145729 : unsigned int ScopeSym;
5128 : 19145729 : unsigned int ScopeId;
5129 : 19145729 : unsigned int Sym;
5130 : :
5131 : 19145729 : if (ScopePtr > 0)
5132 : : {
5133 : : ScopeId = ScopePtr;
5134 : 31759585 : do {
5135 : 31759585 : pCall = GetPcall (ScopeId);
5136 : 31759585 : ScopeSym = pCall->Search;
5137 : 31759585 : if (((SymbolTable_IsModule (ScopeSym)) || (SymbolTable_IsDefImp (ScopeSym))) || (SymbolTable_IsProcedure (ScopeSym)))
5138 : : {
5139 : 26360680 : Sym = ExamineUnresolvedTree (ScopeSym, name);
5140 : 26360680 : if (Sym != SymbolTable_NulSym)
5141 : : {
5142 : : return Sym;
5143 : : }
5144 : : }
5145 : 28828516 : ScopeId -= 1;
5146 : 57657032 : } while (! ((ScopeId > 0) && ((SymbolTable_IsModule (ScopeSym)) || (SymbolTable_IsDefImp (ScopeSym)))));
5147 : : }
5148 : : /* Get symbol from unknown tree */
5149 : 16214660 : return ExamineUnresolvedTree (CurrentModule, name);
5150 : : /* static analysis guarentees a RETURN statement will be used before here. */
5151 : : __builtin_unreachable ();
5152 : : }
5153 : :
5154 : :
5155 : : /*
5156 : : ExamineUnresolvedTree - returns a symbol with name, name, from the
5157 : : unresolved tree of module, ModSym.
5158 : : If no symbol with name is found then NulSym
5159 : : is returned.
5160 : : */
5161 : :
5162 : 83081556 : static unsigned int ExamineUnresolvedTree (unsigned int ScopeSym, NameKey_Name name)
5163 : : {
5164 : 83081556 : SymbolTable_PtrToSymbol pSym;
5165 : 83081556 : unsigned int Sym;
5166 : :
5167 : : /* Get symbol from unknown tree */
5168 : 83081556 : pSym = GetPsym (ScopeSym);
5169 : 83081556 : switch (pSym->SymbolType)
5170 : : {
5171 : 49571272 : case SymbolTable_DefImpSym:
5172 : 49571272 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.Unresolved, name));
5173 : 49571272 : break;
5174 : :
5175 : 9954077 : case SymbolTable_ModuleSym:
5176 : 9954077 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.Unresolved, name));
5177 : 9954077 : break;
5178 : :
5179 : 23556207 : case SymbolTable_ProcedureSym:
5180 : 23556207 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Procedure.Unresolved, name));
5181 : 23556207 : break;
5182 : :
5183 : :
5184 : 0 : default:
5185 : 0 : M2Error_InternalError ((const char *) "expecting DefImp, Module or Procedure symbol", 44);
5186 : 83081556 : break;
5187 : : }
5188 : 83081556 : return Sym;
5189 : : /* static analysis guarentees a RETURN statement will be used before here. */
5190 : : __builtin_unreachable ();
5191 : : }
5192 : :
5193 : :
5194 : : /*
5195 : : RemoveFromUnresolvedTree - removes a symbol with name, name, from the
5196 : : unresolved tree of symbol, ScopeSym.
5197 : : */
5198 : :
5199 : 2931687 : static bool RemoveFromUnresolvedTree (unsigned int ScopeSym, NameKey_Name name)
5200 : : {
5201 : 2931687 : SymbolTable_PtrToSymbol pSym;
5202 : :
5203 : : /* Get symbol from unknown tree */
5204 : 2931687 : pSym = GetPsym (ScopeSym);
5205 : 2931687 : switch (pSym->SymbolType)
5206 : : {
5207 : 2921811 : case SymbolTable_DefImpSym:
5208 : 2921811 : if ((SymbolKey_GetSymKey (pSym->DefImp.Unresolved, name)) != SymbolKey_NulKey)
5209 : : {
5210 : 2921811 : SymbolKey_DelSymKey (pSym->DefImp.Unresolved, name);
5211 : 2921811 : return true;
5212 : : }
5213 : : break;
5214 : :
5215 : 9240 : case SymbolTable_ModuleSym:
5216 : 9240 : if ((SymbolKey_GetSymKey (pSym->Module.Unresolved, name)) != SymbolKey_NulKey)
5217 : : {
5218 : 9240 : SymbolKey_DelSymKey (pSym->Module.Unresolved, name);
5219 : 9240 : return true;
5220 : : }
5221 : : break;
5222 : :
5223 : 636 : case SymbolTable_ProcedureSym:
5224 : 636 : if ((SymbolKey_GetSymKey (pSym->Procedure.Unresolved, name)) != SymbolKey_NulKey)
5225 : : {
5226 : 18 : SymbolKey_DelSymKey (pSym->Procedure.Unresolved, name);
5227 : 18 : return true;
5228 : : }
5229 : : break;
5230 : :
5231 : :
5232 : 0 : default:
5233 : 0 : M2Error_InternalError ((const char *) "expecting DefImp, Module or Procedure symbol", 44);
5234 : : break;
5235 : : }
5236 : : return false;
5237 : : /* static analysis guarentees a RETURN statement will be used before here. */
5238 : : __builtin_unreachable ();
5239 : : }
5240 : :
5241 : :
5242 : : /*
5243 : : FetchUnknownSym - returns a symbol from the unknown tree if one is
5244 : : available. It also updates the unknown tree.
5245 : : */
5246 : :
5247 : 12874108 : static unsigned int FetchUnknownSym (NameKey_Name name)
5248 : : {
5249 : 12874108 : unsigned int Sym;
5250 : :
5251 : 12874108 : Sym = GetSymFromUnknownTree (name);
5252 : 12874108 : if (Sym != SymbolTable_NulSym)
5253 : : {
5254 : 2931069 : SubSymFromUnknownTree (name);
5255 : : }
5256 : 12874108 : return Sym;
5257 : : /* static analysis guarentees a RETURN statement will be used before here. */
5258 : : __builtin_unreachable ();
5259 : : }
5260 : :
5261 : :
5262 : : /*
5263 : : TransparentScope - returns true is the scope symbol Sym is allowed
5264 : : to look to an outer level for a symbol.
5265 : : ie is the symbol allowed to look to the parent
5266 : : scope for a symbol.
5267 : : */
5268 : :
5269 : 64804243 : static bool TransparentScope (unsigned int Sym)
5270 : : {
5271 : 64804243 : SymbolTable_PtrToSymbol pSym;
5272 : :
5273 : 64804243 : pSym = GetPsym (Sym);
5274 : 64804243 : return (pSym->SymbolType != SymbolTable_DefImpSym) && (pSym->SymbolType != SymbolTable_ModuleSym);
5275 : : /* static analysis guarentees a RETURN statement will be used before here. */
5276 : : __builtin_unreachable ();
5277 : : }
5278 : :
5279 : :
5280 : : /*
5281 : : GetLastModuleOrProcedureScope - returns the last module or procedure scope encountered,
5282 : : the scope before the current module scope.
5283 : : */
5284 : :
5285 : 276 : static unsigned int GetLastModuleOrProcedureScope (void)
5286 : : {
5287 : 276 : SymbolTable_PtrToCallFrame pCall;
5288 : 276 : unsigned int i;
5289 : :
5290 : : /* find current inner module */
5291 : 276 : i = ScopePtr;
5292 : 276 : pCall = GetPcall (i);
5293 : 552 : while ((! (SymbolTable_IsModule (pCall->Search))) && (! (SymbolTable_IsDefImp (pCall->Search))))
5294 : : {
5295 : 0 : M2Debug_Assert (i > 0);
5296 : 0 : i -= 1;
5297 : 0 : pCall = GetPcall (i);
5298 : : }
5299 : : /* found module at position, i. */
5300 : 276 : i -= 1; /* Move to an outer level module or procedure scope */
5301 : 276 : pCall = GetPcall (i); /* Move to an outer level module or procedure scope */
5302 : 552 : while (((! (SymbolTable_IsModule (pCall->Search))) && (! (SymbolTable_IsDefImp (pCall->Search)))) && (! (SymbolTable_IsProcedure (pCall->Search))))
5303 : : {
5304 : 0 : M2Debug_Assert (i > 0);
5305 : 0 : i -= 1;
5306 : 0 : pCall = GetPcall (i);
5307 : : }
5308 : : /* Found module at position, i. */
5309 : 276 : return pCall->Search;
5310 : : /* static analysis guarentees a RETURN statement will be used before here. */
5311 : : __builtin_unreachable ();
5312 : : }
5313 : :
5314 : :
5315 : : /*
5316 : : AddSymToScope - adds a symbol Sym with name name to
5317 : : the current scope symbol tree.
5318 : : */
5319 : :
5320 : 15944595 : static void AddSymToScope (unsigned int Sym, NameKey_Name name)
5321 : : {
5322 : 15944595 : SymbolTable_PtrToSymbol pSym;
5323 : 15944595 : SymbolTable_PtrToCallFrame pCall;
5324 : 15944595 : unsigned int ScopeId;
5325 : :
5326 : 15944595 : pCall = GetPcall (ScopePtr);
5327 : 15944595 : ScopeId = pCall->Main;
5328 : : /*
5329 : : WriteString('Adding ') ; WriteKey(name) ; WriteString(' :') ; WriteCard(Sym, 4) ; WriteString(' to scope: ') ;
5330 : : WriteKey(GetSymName(ScopeId)) ; WriteLn ;
5331 : : */
5332 : 15944595 : pSym = GetPsym (ScopeId);
5333 : 15944595 : switch (pSym->SymbolType)
5334 : : {
5335 : 6655031 : case SymbolTable_DefImpSym:
5336 : 6655031 : if (name != NameKey_NulName)
5337 : : {
5338 : 3929123 : SymbolKey_PutSymKey (pSym->DefImp.LocalSymbols, name, Sym);
5339 : : }
5340 : 6655031 : if (SymbolTable_IsEnumeration (Sym))
5341 : : {
5342 : 21792 : CheckEnumerationInList (pSym->DefImp.EnumerationScopeList, Sym);
5343 : : }
5344 : : break;
5345 : :
5346 : 1949860 : case SymbolTable_ModuleSym:
5347 : 1949860 : if (name != NameKey_NulName)
5348 : : {
5349 : 1331977 : SymbolKey_PutSymKey (pSym->Module.LocalSymbols, name, Sym);
5350 : : }
5351 : 1949860 : if (SymbolTable_IsEnumeration (Sym))
5352 : : {
5353 : 15168 : CheckEnumerationInList (pSym->Module.EnumerationScopeList, Sym);
5354 : : }
5355 : : break;
5356 : :
5357 : 7339704 : case SymbolTable_ProcedureSym:
5358 : 7339704 : if (name != NameKey_NulName)
5359 : : {
5360 : 7171724 : SymbolKey_PutSymKey (pSym->Procedure.LocalSymbols, name, Sym);
5361 : : }
5362 : 7339704 : if (SymbolTable_IsEnumeration (Sym))
5363 : : {
5364 : 0 : CheckEnumerationInList (pSym->Procedure.EnumerationScopeList, Sym);
5365 : : }
5366 : : break;
5367 : :
5368 : :
5369 : 0 : default:
5370 : 0 : M2Error_InternalError ((const char *) "should never get here", 21);
5371 : 15944595 : break;
5372 : : }
5373 : 15944595 : }
5374 : :
5375 : :
5376 : : /*
5377 : : PlaceMajorScopesEnumerationListOntoStack - places the DefImp, Module and
5378 : : Procedure symbols enumeration
5379 : : list onto the scope stack.
5380 : : */
5381 : :
5382 : 17772784 : static void PlaceMajorScopesEnumerationListOntoStack (unsigned int Sym)
5383 : : {
5384 : 17772784 : SymbolTable_PtrToSymbol pSym;
5385 : :
5386 : 17772784 : pSym = GetPsym (Sym);
5387 : 17772784 : switch (pSym->SymbolType)
5388 : : {
5389 : 5974540 : case SymbolTable_DefImpSym:
5390 : 5974540 : PlaceEnumerationListOntoScope (pSym->DefImp.EnumerationScopeList);
5391 : 5974540 : break;
5392 : :
5393 : 74476 : case SymbolTable_ModuleSym:
5394 : 74476 : PlaceEnumerationListOntoScope (pSym->Module.EnumerationScopeList);
5395 : 74476 : break;
5396 : :
5397 : 11723768 : case SymbolTable_ProcedureSym:
5398 : 11723768 : PlaceEnumerationListOntoScope (pSym->Procedure.EnumerationScopeList);
5399 : 11723768 : break;
5400 : :
5401 : :
5402 : 0 : default:
5403 : 0 : M2Error_InternalError ((const char *) "expecting - DefImp, Module or Procedure symbol", 46);
5404 : 17772784 : break;
5405 : : }
5406 : 17772784 : }
5407 : :
5408 : :
5409 : : /*
5410 : : PlaceEnumerationListOntoScope - places an enumeration list, l, onto the
5411 : : scope stack. This list will automatically
5412 : : removed via one call to EndScope which
5413 : : matches the StartScope by which this
5414 : : procedure is invoked.
5415 : : */
5416 : :
5417 : 17772784 : static void PlaceEnumerationListOntoScope (Lists_List l)
5418 : : {
5419 : 17772784 : unsigned int i;
5420 : 17772784 : unsigned int n;
5421 : :
5422 : 17772784 : n = Lists_NoOfItemsInList (l);
5423 : 17772784 : i = 1;
5424 : 35946128 : while (i <= n)
5425 : : {
5426 : 400560 : SymbolTable_PseudoScope (Lists_GetItemFromList (l, i));
5427 : 400560 : i += 1;
5428 : : }
5429 : 17772784 : }
5430 : :
5431 : :
5432 : : /*
5433 : : SetFirstUsed - assigns the FirstUsed field in at to tok providing
5434 : : it has not already been set.
5435 : : */
5436 : :
5437 : 24 : static void SetFirstUsed (unsigned int tok, SymbolTable_Where *at)
5438 : : {
5439 : 0 : if ((*at).FirstUsed == M2LexBuf_UnknownTokenNo)
5440 : : {
5441 : 0 : (*at).FirstUsed = tok;
5442 : : }
5443 : 0 : }
5444 : :
5445 : :
5446 : : /*
5447 : : PutFirstUsed - sets tok to the first used providing it has not already been set.
5448 : : It also includes the read and write quad into the usage list
5449 : : providing the quad numbers are not 0.
5450 : : */
5451 : :
5452 : 24 : static void PutFirstUsed (unsigned int object, unsigned int tok, unsigned int read_, unsigned int write_)
5453 : : {
5454 : 24 : SymbolTable_PtrToSymbol pSym;
5455 : :
5456 : 24 : if (SymbolTable_IsVar (object))
5457 : : {
5458 : 24 : pSym = GetPsym (object);
5459 : 24 : SetFirstUsed (tok, &pSym->Var.At);
5460 : 24 : if (read_ != 0)
5461 : : {
5462 : 12 : SymbolTable_PutReadQuad (object, SymbolTable_GetMode (object), read_);
5463 : : }
5464 : 24 : if (write_ != 0)
5465 : : {
5466 : 12 : SymbolTable_PutWriteQuad (object, SymbolTable_GetMode (object), write_);
5467 : : }
5468 : : }
5469 : 24 : }
5470 : :
5471 : :
5472 : : /*
5473 : : CanLookThroughScope - by default this procedure returns TRUE. It only returns
5474 : : FALSE if, throughProcedure, is FALSE and the ScopeSym is
5475 : : a procedure.
5476 : : */
5477 : :
5478 : 42701098 : static bool CanLookThroughScope (unsigned int ScopeSym, bool throughProcedure)
5479 : : {
5480 : 42701098 : if (SymbolTable_IsProcedure (ScopeSym))
5481 : : {
5482 : : return throughProcedure;
5483 : : }
5484 : : else
5485 : : {
5486 : 0 : return true;
5487 : : }
5488 : : /* static analysis guarentees a RETURN statement will be used before here. */
5489 : : __builtin_unreachable ();
5490 : : }
5491 : :
5492 : :
5493 : : /*
5494 : : GetScopeSym - searches the current scope and below, providing that the
5495 : : scopes are transparent, for a symbol with name, name.
5496 : : It only passes over procedure scopes if, throughProcedure,
5497 : : is TRUE.
5498 : : */
5499 : :
5500 : 59128957 : static unsigned int GetScopeSym (NameKey_Name name, bool throughProcedure)
5501 : : {
5502 : 59128957 : SymbolTable_PtrToCallFrame pCall;
5503 : 59128957 : unsigned int ScopeSym;
5504 : 59128957 : unsigned int ScopeId;
5505 : 59128957 : unsigned int Sym;
5506 : :
5507 : : /* DisplayScopes ; */
5508 : 59128957 : ScopeId = ScopePtr;
5509 : 59128957 : pCall = GetPcall (ScopeId);
5510 : 59128957 : ScopeSym = pCall->Search;
5511 : : /* WriteString(' scope: ') ; WriteKey(GetSymName(ScopeSym)) ; */
5512 : 59128957 : Sym = CheckScopeForSym (ScopeSym, name);
5513 : 242104271 : while ((((ScopeId > 0) && (Sym == SymbolTable_NulSym)) && (TransparentScope (ScopeSym))) && (CanLookThroughScope (ScopeSym, throughProcedure)))
5514 : : {
5515 : 42701098 : ScopeId -= 1;
5516 : 42701098 : pCall = GetPcall (ScopeId);
5517 : 42701098 : ScopeSym = pCall->Search;
5518 : 42701098 : Sym = CheckScopeForSym (ScopeSym, name);
5519 : : }
5520 : : /* WriteString(' scope: ') ; WriteKey(GetSymName(ScopeSym)) */
5521 : : /* IF Sym#NulSym THEN WriteKey(GetSymName(Sym)) END ; WriteLn ; */
5522 : 59128957 : return Sym;
5523 : : /* static analysis guarentees a RETURN statement will be used before here. */
5524 : : __builtin_unreachable ();
5525 : : }
5526 : :
5527 : :
5528 : : /*
5529 : : CheckScopeForSym - checks the scope, ScopeSym, for an identifier
5530 : : of name, name. CheckScopeForSym checks for
5531 : : the symbol by the GetLocalSym and also
5532 : : ExamineUnresolvedTree.
5533 : : */
5534 : :
5535 : 101830295 : static unsigned int CheckScopeForSym (unsigned int ScopeSym, NameKey_Name name)
5536 : : {
5537 : 101830295 : unsigned int Sym;
5538 : :
5539 : 101830295 : Sym = SymbolTable_GetLocalSym (ScopeSym, name);
5540 : 101830295 : if ((Sym == SymbolTable_NulSym) && (((SymbolTable_IsModule (ScopeSym)) || (SymbolTable_IsDefImp (ScopeSym))) || (SymbolTable_IsProcedure (ScopeSym))))
5541 : : {
5542 : 40506084 : Sym = ExamineUnresolvedTree (ScopeSym, name);
5543 : : }
5544 : 101830295 : return Sym;
5545 : : /* static analysis guarentees a RETURN statement will be used before here. */
5546 : : __builtin_unreachable ();
5547 : : }
5548 : :
5549 : :
5550 : : /*
5551 : : GetModuleScopeId - returns the scope index to the next module starting
5552 : : at index, Id.
5553 : : Id will either point to a null scope (NulSym) or
5554 : : alternatively point to a Module or DefImp symbol.
5555 : : */
5556 : :
5557 : 99972 : static unsigned int GetModuleScopeId (unsigned int Id)
5558 : : {
5559 : 99972 : SymbolTable_PtrToCallFrame pCall;
5560 : 99972 : unsigned int s;
5561 : :
5562 : 99972 : pCall = GetPcall (Id);
5563 : 99972 : s = pCall->Search;
5564 : 165730 : while (((Id > 0) && (s != SymbolTable_NulSym)) && ((! (SymbolTable_IsModule (s))) && (! (SymbolTable_IsDefImp (s)))))
5565 : : {
5566 : 65758 : Id -= 1;
5567 : 65758 : pCall = GetPcall (Id);
5568 : 65758 : s = pCall->Search;
5569 : : }
5570 : 99972 : return Id;
5571 : : /* static analysis guarentees a RETURN statement will be used before here. */
5572 : : __builtin_unreachable ();
5573 : : }
5574 : :
5575 : :
5576 : : /*
5577 : : GetVisibleSym -
5578 : : */
5579 : :
5580 : 36 : static unsigned int GetVisibleSym (NameKey_Name name)
5581 : : {
5582 : 36 : SymbolTable_PtrToCallFrame pCall;
5583 : 36 : unsigned int Sym;
5584 : 36 : unsigned int i;
5585 : :
5586 : 36 : i = ScopePtr;
5587 : 42 : while (i >= 1)
5588 : : {
5589 : 42 : pCall = GetPcall (i);
5590 : 42 : if (pCall->Search == pCall->Main)
5591 : : {
5592 : 30 : return SymbolTable_GetLocalSym (pCall->Main, name);
5593 : : }
5594 : : else
5595 : : {
5596 : 12 : if (SymbolTable_IsEnumeration (pCall->Search))
5597 : : {
5598 : 12 : Sym = SymbolTable_GetLocalSym (pCall->Search, name);
5599 : 12 : if (Sym != SymbolTable_NulSym)
5600 : : {
5601 : : return Sym;
5602 : : }
5603 : : }
5604 : : }
5605 : 6 : i -= 1;
5606 : : }
5607 : : return SymbolTable_NulSym;
5608 : : /* static analysis guarentees a RETURN statement will be used before here. */
5609 : : __builtin_unreachable ();
5610 : : }
5611 : :
5612 : :
5613 : : /*
5614 : : IsAlreadyDeclaredSym - returns true if Sym has already been declared
5615 : : in the current main scope.
5616 : : */
5617 : :
5618 : 12873952 : static bool IsAlreadyDeclaredSym (NameKey_Name name)
5619 : : {
5620 : 12873952 : SymbolTable_PtrToCallFrame pCall;
5621 : 12873952 : unsigned int i;
5622 : :
5623 : 12873952 : i = ScopePtr;
5624 : 15232997 : while (i >= 1)
5625 : : {
5626 : 15232997 : pCall = GetPcall (i);
5627 : 15232997 : if (pCall->Search == pCall->Main)
5628 : : {
5629 : 12873946 : return (SymbolTable_GetLocalSym (pCall->Main, name)) != SymbolTable_NulSym;
5630 : : }
5631 : : else
5632 : : {
5633 : 2359051 : if ((SymbolTable_IsEnumeration (pCall->Search)) && ((SymbolTable_GetLocalSym (pCall->Search, name)) != SymbolTable_NulSym))
5634 : : {
5635 : : return true;
5636 : : }
5637 : : }
5638 : 2359045 : i -= 1;
5639 : : }
5640 : : return false;
5641 : : /* static analysis guarentees a RETURN statement will be used before here. */
5642 : : __builtin_unreachable ();
5643 : : }
5644 : :
5645 : :
5646 : : /*
5647 : : GenName - returns a new name consisting of pre, name, post concatenation.
5648 : : */
5649 : :
5650 : 297976 : static NameKey_Name GenName (NameKey_Name libname, const char *pre_, unsigned int _pre_high, NameKey_Name name, const char *post_, unsigned int _post_high)
5651 : : {
5652 : 297976 : DynamicStrings_String str;
5653 : 297976 : NameKey_Name result;
5654 : 297976 : char pre[_pre_high+1];
5655 : 297976 : char post[_post_high+1];
5656 : :
5657 : : /* make a local copy of each unbounded array. */
5658 : 297976 : memcpy (pre, pre_, _pre_high+1);
5659 : 297976 : memcpy (post, post_, _post_high+1);
5660 : :
5661 : 297976 : str = DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (libname));
5662 : 297976 : str = DynamicStrings_ConCat (str, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) pre, _pre_high)));
5663 : 297976 : str = DynamicStrings_ConCat (str, DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (name))));
5664 : 297976 : str = DynamicStrings_ConCat (str, DynamicStrings_InitString ((const char *) post, _post_high));
5665 : 297976 : result = NameKey_makekey (DynamicStrings_string (str));
5666 : 297976 : str = DynamicStrings_KillString (str);
5667 : 297976 : return result;
5668 : : /* static analysis guarentees a RETURN statement will be used before here. */
5669 : : __builtin_unreachable ();
5670 : 297976 : }
5671 : :
5672 : :
5673 : : /*
5674 : : InitCtor - initialize the ModuleCtor fields to NulSym.
5675 : : */
5676 : :
5677 : 154514 : static void InitCtor (SymbolTable_ModuleCtor *ctor)
5678 : : {
5679 : 154514 : (*ctor).ctor = SymbolTable_NulSym;
5680 : 154514 : (*ctor).dep = SymbolTable_NulSym;
5681 : 154514 : (*ctor).init = SymbolTable_NulSym;
5682 : 154514 : (*ctor).fini = SymbolTable_NulSym;
5683 : 0 : }
5684 : :
5685 : :
5686 : : /*
5687 : : InitCtorFields - initialize the ModuleCtor fields. An inner module has no
5688 : : ctor procedure.
5689 : : */
5690 : :
5691 : 63689 : static void InitCtorFields (unsigned int moduleTok, unsigned int beginTok, unsigned int finallyTok, unsigned int moduleSym, SymbolTable_ModuleCtor *ctor, NameKey_Name name, bool inner, bool pub)
5692 : : {
5693 : 63689 : if (M2Options_ScaffoldDynamic && ! inner)
5694 : : {
5695 : : /* The ctor procedure must be public. */
5696 : 63035 : (*ctor).ctor = SymbolTable_MakeProcedure (moduleTok, GenName (SymbolTable_GetLibName (moduleSym), (const char *) "_M2_", 4, name, (const char *) "_ctor", 5));
5697 : 63035 : SymbolTable_PutCtor ((*ctor).ctor, true);
5698 : 63035 : M2Debug_Assert (pub);
5699 : 63035 : SymbolTable_PutPublic ((*ctor).ctor, pub);
5700 : 63035 : SymbolTable_PutExtern ((*ctor).ctor, ! pub);
5701 : 63035 : SymbolTable_PutMonoName ((*ctor).ctor, true);
5702 : : /* The dep procedure is local to the module. */
5703 : 63035 : (*ctor).dep = SymbolTable_MakeProcedure (moduleTok, GenName (SymbolTable_GetLibName (moduleSym), (const char *) "_M2_", 4, name, (const char *) "_dep", 4));
5704 : 63035 : SymbolTable_PutMonoName ((*ctor).dep, true);
5705 : : }
5706 : : else
5707 : : {
5708 : 654 : (*ctor).ctor = SymbolTable_NulSym;
5709 : 654 : (*ctor).dep = SymbolTable_NulSym;
5710 : : }
5711 : : /* The init/fini procedures must be public. */
5712 : 63689 : (*ctor).init = SymbolTable_MakeProcedure (beginTok, GenName (SymbolTable_GetLibName (moduleSym), (const char *) "_M2_", 4, name, (const char *) "_init", 5));
5713 : 63689 : SymbolTable_PutPublic ((*ctor).init, pub);
5714 : 63689 : SymbolTable_PutExtern ((*ctor).init, ! pub);
5715 : 63689 : SymbolTable_PutMonoName ((*ctor).init, ! inner);
5716 : 63689 : M2Scaffold_DeclareArgEnvParams (beginTok, (*ctor).init);
5717 : 63689 : (*ctor).fini = SymbolTable_MakeProcedure (finallyTok, GenName (SymbolTable_GetLibName (moduleSym), (const char *) "_M2_", 4, name, (const char *) "_fini", 5));
5718 : 63689 : SymbolTable_PutPublic ((*ctor).fini, pub);
5719 : 63689 : SymbolTable_PutExtern ((*ctor).fini, ! pub);
5720 : 63689 : SymbolTable_PutMonoName ((*ctor).fini, ! inner);
5721 : 63689 : M2Scaffold_DeclareArgEnvParams (beginTok, (*ctor).fini);
5722 : 63689 : }
5723 : :
5724 : :
5725 : : /*
5726 : : CheckTok - checks to see that tok is at a known location. If not
5727 : : it uses GetTokenNo as a fall back.
5728 : : */
5729 : :
5730 : 15734417 : static unsigned int CheckTok (unsigned int tok, const char *name_, unsigned int _name_high)
5731 : : {
5732 : 15734417 : DynamicStrings_String s;
5733 : 15734417 : char name[_name_high+1];
5734 : :
5735 : : /* make a local copy of each unbounded array. */
5736 : 15734417 : memcpy (name, name_, _name_high+1);
5737 : :
5738 : 15734417 : if (tok == M2LexBuf_UnknownTokenNo)
5739 : : {
5740 : 169682 : tok = M2LexBuf_GetTokenNo ();
5741 : 169682 : if (DebugUnknownToken)
5742 : : {
5743 : : s = DynamicStrings_InitString ((const char *) name, _name_high);
5744 : : s = DynamicStrings_ConCat (s, DynamicStrings_InitString ((const char *) " symbol {%W} has been created with an unknown token location", 60));
5745 : : M2MetaError_MetaErrorStringT0 (M2LexBuf_GetTokenNo (), s);
5746 : : }
5747 : : }
5748 : 15734417 : return tok;
5749 : : /* static analysis guarentees a RETURN statement will be used before here. */
5750 : : __builtin_unreachable ();
5751 : 0 : }
5752 : :
5753 : :
5754 : : /*
5755 : : GetLink - returns TRUE if the current module is only used for linkage.
5756 : : */
5757 : :
5758 : 283140 : static bool GetLink (void)
5759 : : {
5760 : 283140 : unsigned int OuterModule;
5761 : :
5762 : 283140 : OuterModule = SymbolTable_GetCurrentModule ();
5763 : 283140 : if (OuterModule != SymbolTable_NulSym)
5764 : : {
5765 : : /* avoid gcc warning by using compound statement even if not strictly necessary. */
5766 : 268908 : if (M2Comp_CompilingDefinitionModule ())
5767 : : {
5768 : 3372 : return SymbolTable_IsDefLink (OuterModule);
5769 : : }
5770 : : else
5771 : : {
5772 : 265536 : return SymbolTable_IsModLink (OuterModule);
5773 : : }
5774 : : }
5775 : : /* Default is that the module is for compiling. */
5776 : : return false;
5777 : : /* static analysis guarentees a RETURN statement will be used before here. */
5778 : : __builtin_unreachable ();
5779 : : }
5780 : :
5781 : :
5782 : : /*
5783 : : AddModuleToParent - adds symbol, Sym, to module, Parent.
5784 : : */
5785 : :
5786 : 420 : static void AddModuleToParent (unsigned int Sym, unsigned int Parent)
5787 : : {
5788 : 420 : SymbolTable_PtrToSymbol pSym;
5789 : :
5790 : 420 : pSym = GetPsym (Parent);
5791 : 420 : switch (pSym->SymbolType)
5792 : : {
5793 : 18 : case SymbolTable_DefImpSym:
5794 : 18 : Lists_PutItemIntoList (pSym->DefImp.ListOfModules, Sym);
5795 : 18 : break;
5796 : :
5797 : 246 : case SymbolTable_ModuleSym:
5798 : 246 : Lists_PutItemIntoList (pSym->Module.ListOfModules, Sym);
5799 : 246 : break;
5800 : :
5801 : 156 : case SymbolTable_ProcedureSym:
5802 : 156 : Lists_PutItemIntoList (pSym->Procedure.ListOfModules, Sym);
5803 : 156 : break;
5804 : :
5805 : :
5806 : 0 : default:
5807 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
5808 : 420 : break;
5809 : : }
5810 : 420 : }
5811 : :
5812 : :
5813 : : /*
5814 : : PutProcedureExternPublic - if procedure is not NulSym set extern
5815 : : and public booleans.
5816 : : */
5817 : :
5818 : 322576 : static void PutProcedureExternPublic (unsigned int procedure, bool extern_, bool pub)
5819 : : {
5820 : 322576 : if (procedure != SymbolTable_NulSym)
5821 : : {
5822 : 322576 : SymbolTable_PutExtern (procedure, extern_);
5823 : 322576 : SymbolTable_PutPublic (procedure, pub);
5824 : : }
5825 : 322576 : }
5826 : :
5827 : :
5828 : : /*
5829 : : PutCtorExtern -
5830 : : */
5831 : :
5832 : 80644 : static void PutCtorExtern (unsigned int tok, unsigned int sym, SymbolTable_ModuleCtor *ctor, bool extern_)
5833 : : {
5834 : : /* If the ctor does not exist then make it extern/ (~extern) public. */
5835 : 80644 : if ((*ctor).ctor == SymbolTable_NulSym)
5836 : : {
5837 : 11228 : (*ctor).ctor = SymbolTable_MakeProcedure (tok, GenName (SymbolTable_GetLibName (sym), (const char *) "_M2_", 4, SymbolTable_GetSymName (sym), (const char *) "_ctor", 5));
5838 : 11228 : SymbolTable_PutMonoName ((*ctor).ctor, true);
5839 : : }
5840 : 80644 : PutProcedureExternPublic ((*ctor).ctor, extern_, ! extern_);
5841 : 80644 : SymbolTable_PutCtor ((*ctor).ctor, true);
5842 : : /* If the ctor does not exist then make it extern/ (~extern) public. */
5843 : 80644 : if ((*ctor).dep == SymbolTable_NulSym)
5844 : : {
5845 : 11228 : (*ctor).dep = SymbolTable_MakeProcedure (tok, GenName (SymbolTable_GetLibName (sym), (const char *) "_M2_", 4, SymbolTable_GetSymName (sym), (const char *) "_dep", 4));
5846 : 11228 : SymbolTable_PutMonoName ((*ctor).dep, true);
5847 : : }
5848 : 80644 : PutProcedureExternPublic ((*ctor).dep, extern_, ! extern_);
5849 : : /* If init/fini do not exist then create them. */
5850 : 80644 : if ((*ctor).init == SymbolTable_NulSym)
5851 : : {
5852 : 11036 : (*ctor).init = SymbolTable_MakeProcedure (tok, GenName (SymbolTable_GetLibName (sym), (const char *) "_M2_", 4, SymbolTable_GetSymName (sym), (const char *) "_init", 5));
5853 : 11036 : M2Scaffold_DeclareArgEnvParams (tok, (*ctor).init);
5854 : 11036 : SymbolTable_PutMonoName ((*ctor).init, ! (SymbolTable_IsInnerModule (sym)));
5855 : : }
5856 : 80644 : PutProcedureExternPublic ((*ctor).init, extern_, ! extern_);
5857 : 80644 : if ((*ctor).fini == SymbolTable_NulSym)
5858 : : {
5859 : 11036 : (*ctor).fini = SymbolTable_MakeProcedure (tok, GenName (SymbolTable_GetLibName (sym), (const char *) "_M2_", 4, SymbolTable_GetSymName (sym), (const char *) "_fini", 5));
5860 : 11036 : M2Scaffold_DeclareArgEnvParams (tok, (*ctor).fini);
5861 : 11036 : SymbolTable_PutMonoName ((*ctor).fini, ! (SymbolTable_IsInnerModule (sym)));
5862 : : }
5863 : 80644 : PutProcedureExternPublic ((*ctor).fini, extern_, ! extern_);
5864 : 80644 : }
5865 : :
5866 : :
5867 : : /*
5868 : : InitProcedureDeclaration - initialize all the ProcedureDeclaration
5869 : : fields.
5870 : : */
5871 : :
5872 : 9771429 : static void InitProcedureDeclaration (SymbolTable_ProcedureDeclaration *decl)
5873 : : {
5874 : 9771429 : (*decl).Defined = false; /* Has the procedure been */
5875 : : /* declared yet? */
5876 : 9771429 : (*decl).ParamDefined = false; /* Have the parameters been */
5877 : : /* defined yet? */
5878 : 9771429 : (*decl).HasVarArgs = false; /* Does the procedure use ... ? */
5879 : 9771429 : (*decl).HasOptArg = false; /* Does this procedure use [ ] ? */
5880 : 9771429 : (*decl).IsNoReturn = false; /* Declared attribute noreturn ? */
5881 : 9771429 : (*decl).ReturnOptional = false; /* Is the return value optional? */
5882 : 0 : }
5883 : :
5884 : :
5885 : : /*
5886 : : AddProcedureToList - adds a procedure, Proc, to the list of procedures
5887 : : in module, Mod.
5888 : : */
5889 : :
5890 : 3257143 : static void AddProcedureToList (unsigned int Mod, unsigned int Proc)
5891 : : {
5892 : 3257143 : SymbolTable_PtrToSymbol pSym;
5893 : :
5894 : 3257143 : pSym = GetPsym (Mod);
5895 : 3257143 : switch (pSym->SymbolType)
5896 : : {
5897 : 2650776 : case SymbolTable_DefImpSym:
5898 : 2650776 : Lists_PutItemIntoList (pSym->DefImp.ListOfProcs, Proc);
5899 : 2650776 : break;
5900 : :
5901 : 605935 : case SymbolTable_ModuleSym:
5902 : 605935 : Lists_PutItemIntoList (pSym->Module.ListOfProcs, Proc);
5903 : 605935 : break;
5904 : :
5905 : 432 : case SymbolTable_ProcedureSym:
5906 : 432 : Lists_PutItemIntoList (pSym->Procedure.ListOfProcs, Proc);
5907 : 432 : break;
5908 : :
5909 : :
5910 : 0 : default:
5911 : 0 : M2Error_InternalError ((const char *) "expecting ModuleSym, DefImpSym or ProcedureSym symbol", 53);
5912 : 3257143 : break;
5913 : : }
5914 : 3257143 : }
5915 : :
5916 : :
5917 : : /*
5918 : : AddVarToScopeList - adds symbol, sym, to, scope.
5919 : : */
5920 : :
5921 : 7300139 : static void AddVarToScopeList (unsigned int scope, unsigned int sym)
5922 : : {
5923 : 7300139 : SymbolTable_PtrToSymbol pSym;
5924 : :
5925 : 7300139 : pSym = GetPsym (scope);
5926 : 7300139 : switch (pSym->SymbolType)
5927 : : {
5928 : 7090991 : case SymbolTable_ProcedureSym:
5929 : 7090991 : Lists_PutItemIntoList (pSym->Procedure.ListOfVars, sym);
5930 : 7090991 : break;
5931 : :
5932 : 98930 : case SymbolTable_ModuleSym:
5933 : 98930 : Lists_PutItemIntoList (pSym->Module.ListOfVars, sym);
5934 : 98930 : break;
5935 : :
5936 : 110218 : case SymbolTable_DefImpSym:
5937 : 110218 : Lists_PutItemIntoList (pSym->DefImp.ListOfVars, sym);
5938 : 110218 : break;
5939 : :
5940 : :
5941 : 0 : default:
5942 : 0 : M2Error_InternalError ((const char *) "expecting Procedure or Module symbol", 36);
5943 : 7300139 : break;
5944 : : }
5945 : 7300139 : }
5946 : :
5947 : :
5948 : : /*
5949 : : AddVarToList - add a variable symbol to the list of variables maintained
5950 : : by the inner most scope. (Procedure or Module).
5951 : : */
5952 : :
5953 : 7300121 : static void AddVarToList (unsigned int Sym)
5954 : : {
5955 : 7300121 : SymbolTable_PtrToCallFrame pCall;
5956 : :
5957 : 7300121 : pCall = GetPcall (ScopePtr);
5958 : 7300121 : AddVarToScopeList (pCall->Main, Sym);
5959 : 7300121 : }
5960 : :
5961 : :
5962 : : /*
5963 : : InitVarDecl - initialize the variable and type token location positions.
5964 : : */
5965 : :
5966 : 7300121 : static void InitVarDecl (SymbolTable_VarDecl *decl, unsigned int vartok)
5967 : : {
5968 : 7300121 : (*decl).FullTok = M2LexBuf_UnknownTokenNo;
5969 : 7300121 : (*decl).VarTok = vartok;
5970 : 7300121 : (*decl).TypeTok = M2LexBuf_UnknownTokenNo;
5971 : 0 : }
5972 : :
5973 : :
5974 : : /*
5975 : : doPutVarDeclTypeTok - places typetok into decl.TypeTok.
5976 : : sym must be a variable.
5977 : : */
5978 : :
5979 : 0 : static void doPutVarDeclTypeTok (unsigned int sym, unsigned int typetok)
5980 : : {
5981 : 0 : SymbolTable_PtrToSymbol pSym;
5982 : :
5983 : 0 : M2Debug_Assert (SymbolTable_IsVar (sym));
5984 : 0 : pSym = GetPsym (sym);
5985 : 0 : pSym->Var.Declared.TypeTok = typetok;
5986 : 0 : }
5987 : :
5988 : :
5989 : : /*
5990 : : doPutVarDeclTok - places vartok into decl.VarTok.
5991 : : sym must be a variable.
5992 : : */
5993 : :
5994 : 934882 : static void doPutVarDeclTok (unsigned int sym, unsigned int vartok)
5995 : : {
5996 : 934882 : SymbolTable_PtrToSymbol pSym;
5997 : :
5998 : 934882 : M2Debug_Assert (SymbolTable_IsVar (sym));
5999 : 934882 : pSym = GetPsym (sym);
6000 : 934882 : pSym->Var.Declared.VarTok = vartok;
6001 : 934882 : }
6002 : :
6003 : :
6004 : : /*
6005 : : doGetVarDeclTok - return decl.VarTok for a variable.
6006 : : */
6007 : :
6008 : 54 : static unsigned int doGetVarDeclTok (unsigned int sym)
6009 : : {
6010 : 54 : SymbolTable_PtrToSymbol pSym;
6011 : :
6012 : 54 : pSym = GetPsym (sym);
6013 : 54 : M2Debug_Assert (SymbolTable_IsVar (sym));
6014 : 54 : return pSym->Var.Declared.VarTok;
6015 : : /* static analysis guarentees a RETURN statement will be used before here. */
6016 : : __builtin_unreachable ();
6017 : : }
6018 : :
6019 : :
6020 : : /*
6021 : : doGetVarDeclTypeTok - return decl.TypeTok for a variable.
6022 : : */
6023 : :
6024 : 0 : static unsigned int doGetVarDeclTypeTok (unsigned int sym)
6025 : : {
6026 : 0 : SymbolTable_PtrToSymbol pSym;
6027 : :
6028 : 0 : pSym = GetPsym (sym);
6029 : 0 : M2Debug_Assert (SymbolTable_IsVar (sym));
6030 : 0 : return pSym->Var.Declared.TypeTok;
6031 : : /* static analysis guarentees a RETURN statement will be used before here. */
6032 : : __builtin_unreachable ();
6033 : : }
6034 : :
6035 : :
6036 : : /*
6037 : : doGetVarDeclFullTok - return the full declaration of var: type.
6038 : : */
6039 : :
6040 : 492 : static unsigned int doGetVarDeclFullTok (unsigned int sym)
6041 : : {
6042 : 492 : SymbolTable_PtrToSymbol pSym;
6043 : :
6044 : 492 : pSym = GetPsym (sym);
6045 : 492 : M2Debug_Assert (SymbolTable_IsVar (sym));
6046 : 492 : if (pSym->Var.Declared.FullTok == M2LexBuf_UnknownTokenNo)
6047 : : {
6048 : : /* avoid gcc warning by using compound statement even if not strictly necessary. */
6049 : 456 : if (pSym->Var.Declared.TypeTok == M2LexBuf_UnknownTokenNo)
6050 : : {
6051 : 96 : return pSym->Var.Declared.VarTok;
6052 : : }
6053 : : else
6054 : : {
6055 : 360 : pSym->Var.Declared.FullTok = M2LexBuf_MakeVirtual2Tok (pSym->Var.Declared.VarTok, pSym->Var.Declared.TypeTok);
6056 : : }
6057 : : }
6058 : 396 : return pSym->Var.Declared.FullTok;
6059 : : /* static analysis guarentees a RETURN statement will be used before here. */
6060 : : __builtin_unreachable ();
6061 : : }
6062 : :
6063 : :
6064 : : /*
6065 : : FillInRecordFields - given a new symbol, sym, make it a record symbol
6066 : : and initialize its fields.
6067 : : */
6068 : :
6069 : 79936 : static void FillInRecordFields (unsigned int tok, unsigned int sym, NameKey_Name RecordName, unsigned int scope, unsigned int oaf)
6070 : : {
6071 : 79936 : SymbolTable_PtrToSymbol pSym;
6072 : :
6073 : 79936 : if (! (SymbolTable_IsError (sym)))
6074 : : {
6075 : 79930 : pSym = GetPsym (sym);
6076 : 79930 : pSym->SymbolType = SymbolTable_RecordSym;
6077 : 79930 : pSym->Record.name = RecordName;
6078 : 79930 : SymbolKey_InitTree (&pSym->Record.LocalSymbols);
6079 : 79930 : pSym->Record.Size = M2ALU_InitValue ();
6080 : 79930 : Lists_InitList (&pSym->Record.ListOfSons); /* List of RecordFieldSym and VarientSym */
6081 : 79930 : pSym->Record.oafamily = oaf; /* List of RecordFieldSym and VarientSym */
6082 : 79930 : pSym->Record.Parent = SymbolTable_NulSym;
6083 : 79930 : pSym->Record.Align = SymbolTable_NulSym;
6084 : 79930 : pSym->Record.DefaultAlign = SymbolTable_NulSym;
6085 : 79930 : pSym->Record.DeclPacked = false;
6086 : 79930 : pSym->Record.DeclResolved = false;
6087 : 79930 : pSym->Record.Scope = scope;
6088 : 79930 : InitWhereDeclaredTok (tok, &pSym->Record.At);
6089 : : }
6090 : 79936 : }
6091 : :
6092 : :
6093 : : /*
6094 : : HandleHiddenOrDeclare -
6095 : : */
6096 : :
6097 : 4352561 : static unsigned int HandleHiddenOrDeclare (unsigned int tok, NameKey_Name name, unsigned int *oaf)
6098 : : {
6099 : 4352561 : unsigned int sym;
6100 : :
6101 : 4352561 : sym = CheckForHiddenType (name);
6102 : 4352561 : if (sym == SymbolTable_NulSym)
6103 : : {
6104 : 4342657 : sym = DeclareSym (tok, name);
6105 : 4342657 : if (! (SymbolTable_IsError (sym)))
6106 : : {
6107 : : /* Now add this type to the symbol table of the current scope */
6108 : 4342645 : AddSymToScope (sym, name);
6109 : : }
6110 : : }
6111 : 4352561 : (*oaf) = SymbolTable_GetOAFamily (sym);
6112 : 4352561 : return sym;
6113 : : /* static analysis guarentees a RETURN statement will be used before here. */
6114 : : __builtin_unreachable ();
6115 : : }
6116 : :
6117 : :
6118 : : /*
6119 : : CreateConstLit -
6120 : : */
6121 : :
6122 : 515008 : static unsigned int CreateConstLit (unsigned int tok, NameKey_Name constName, unsigned int constType)
6123 : : {
6124 : 515008 : SymbolTable_PtrToSymbol pSym;
6125 : 515008 : unsigned int Sym;
6126 : 515008 : bool overflow;
6127 : :
6128 : 515008 : overflow = false;
6129 : 515008 : if (constType == SymbolTable_NulSym)
6130 : : {
6131 : 390352 : constType = GetConstLitType (tok, constName, &overflow, true);
6132 : : }
6133 : 515008 : NewSym (&Sym);
6134 : 515008 : pSym = GetPsym (Sym);
6135 : 515008 : pSym->SymbolType = SymbolTable_ConstLitSym;
6136 : 515008 : switch (pSym->SymbolType)
6137 : : {
6138 : 515008 : case SymbolTable_ConstLitSym:
6139 : 515008 : pSym->ConstLit.name = constName;
6140 : 515008 : pSym->ConstLit.Value = M2ALU_InitValue ();
6141 : 515008 : M2ALU_PushString (tok, constName, ! overflow);
6142 : 515008 : M2ALU_PopInto (pSym->ConstLit.Value);
6143 : 515008 : pSym->ConstLit.Type = constType;
6144 : 515008 : pSym->ConstLit.IsSet = false;
6145 : 515008 : pSym->ConstLit.IsInternal = false; /* Is it a default BY constant
6146 : : expression? */
6147 : 515008 : pSym->ConstLit.IsConstructor = false; /* Is it a default BY constant
6148 : : expression? */
6149 : 515008 : pSym->ConstLit.FromType = SymbolTable_NulSym; /* type is determined FromType */
6150 : 515008 : pSym->ConstLit.RangeError = overflow; /* type is determined FromType */
6151 : 515008 : pSym->ConstLit.UnresFromType = false; /* is Type resolved? */
6152 : 515008 : pSym->ConstLit.Scope = SymbolTable_GetCurrentScope (); /* is Type resolved? */
6153 : 515008 : InitWhereDeclaredTok (tok, &pSym->ConstLit.At);
6154 : 515008 : InitWhereFirstUsedTok (tok, &pSym->ConstLit.At);
6155 : 515008 : break;
6156 : :
6157 : :
6158 : : default:
6159 : : M2Error_InternalError ((const char *) "expecting ConstLit symbol", 25);
6160 : 515008 : break;
6161 : : }
6162 : 515008 : return Sym;
6163 : : /* static analysis guarentees a RETURN statement will be used before here. */
6164 : : __builtin_unreachable ();
6165 : : }
6166 : :
6167 : :
6168 : : /*
6169 : : LookupConstLitPoolEntry - return a ConstLit symbol from the constant pool which
6170 : : matches tok, constName and constType.
6171 : : */
6172 : :
6173 : 1264494 : static unsigned int LookupConstLitPoolEntry (unsigned int tok, NameKey_Name constName, unsigned int constType)
6174 : : {
6175 : 1264494 : SymbolTable_ConstLitPoolEntry pe;
6176 : 1264494 : unsigned int rootIndex;
6177 : :
6178 : 1264494 : rootIndex = static_cast<unsigned int> (SymbolKey_GetSymKey (ConstLitPoolTree, constName));
6179 : 1264494 : if (rootIndex != 0)
6180 : : {
6181 : 992165 : pe = static_cast<SymbolTable_ConstLitPoolEntry> (Indexing_GetIndice (ConstLitArray, rootIndex));
6182 : 7917493 : while (pe != NULL)
6183 : : {
6184 : 6682649 : if (((pe->tok == tok) && (pe->constName == constName)) && (pe->constType == constType))
6185 : : {
6186 : 749486 : return pe->sym;
6187 : : }
6188 : 5933163 : pe = pe->next;
6189 : : }
6190 : : }
6191 : : return SymbolTable_NulSym;
6192 : : /* static analysis guarentees a RETURN statement will be used before here. */
6193 : : __builtin_unreachable ();
6194 : : }
6195 : :
6196 : :
6197 : : /*
6198 : : AddConstLitPoolEntry - adds sym to the constlit pool.
6199 : : */
6200 : :
6201 : 515008 : static void AddConstLitPoolEntry (unsigned int sym, unsigned int tok, NameKey_Name constName, unsigned int constType)
6202 : : {
6203 : 515008 : SymbolTable_ConstLitPoolEntry pe;
6204 : 515008 : SymbolTable_ConstLitPoolEntry old;
6205 : 515008 : unsigned int rootIndex;
6206 : 515008 : unsigned int high;
6207 : :
6208 : 515008 : rootIndex = static_cast<unsigned int> (SymbolKey_GetSymKey (ConstLitPoolTree, constName));
6209 : 515008 : if (rootIndex == SymbolKey_NulKey)
6210 : : {
6211 : 272329 : high = Indexing_HighIndice (ConstLitArray);
6212 : 272329 : Storage_ALLOCATE ((void **) &pe, sizeof (SymbolTable__T4));
6213 : 272329 : if (pe == NULL)
6214 : : {
6215 : 0 : M2Error_InternalError ((const char *) "out of memory", 13);
6216 : : }
6217 : : else
6218 : : {
6219 : 272329 : pe->sym = sym;
6220 : 272329 : pe->tok = tok;
6221 : 272329 : pe->constName = constName;
6222 : 272329 : pe->constType = constType;
6223 : 272329 : pe->next = NULL;
6224 : 272329 : SymbolKey_PutSymKey (ConstLitPoolTree, constName, high+1);
6225 : 272329 : Indexing_PutIndice (ConstLitArray, high+1, reinterpret_cast <void *> (pe));
6226 : : }
6227 : : }
6228 : : else
6229 : : {
6230 : 242679 : Storage_ALLOCATE ((void **) &pe, sizeof (SymbolTable__T4));
6231 : 242679 : if (pe == NULL)
6232 : : {
6233 : 0 : M2Error_InternalError ((const char *) "out of memory", 13);
6234 : : }
6235 : : else
6236 : : {
6237 : 242679 : old = static_cast<SymbolTable_ConstLitPoolEntry> (Indexing_GetIndice (ConstLitArray, rootIndex));
6238 : 242679 : pe->sym = sym;
6239 : 242679 : pe->tok = tok;
6240 : 242679 : pe->constName = constName;
6241 : 242679 : pe->constType = constType;
6242 : 242679 : pe->next = old;
6243 : 242679 : Indexing_PutIndice (ConstLitArray, rootIndex, reinterpret_cast <void *> (pe));
6244 : : }
6245 : : }
6246 : 515008 : }
6247 : :
6248 : :
6249 : : /*
6250 : : InitConstString - initialize the constant string.
6251 : : */
6252 : :
6253 : 281418 : static void InitConstString (unsigned int tok, unsigned int sym, NameKey_Name name, NameKey_Name contents, SymbolTable_ConstStringVariant kind, bool escape, bool known)
6254 : : {
6255 : 281418 : SymbolTable_PtrToSymbol pSym;
6256 : :
6257 : 281418 : pSym = GetPsym (sym);
6258 : 281418 : pSym->SymbolType = SymbolTable_ConstStringSym;
6259 : 281418 : switch (pSym->SymbolType)
6260 : : {
6261 : 281418 : case SymbolTable_ConstStringSym:
6262 : 281418 : pSym->ConstString.name = name;
6263 : 281418 : pSym->ConstString.StringVariant = kind;
6264 : 281418 : pSym->ConstString.Scope = SymbolTable_GetCurrentScope ();
6265 : 281418 : InitWhereDeclaredTok (tok, &pSym->ConstString.At);
6266 : 281418 : SymbolTable_PutConstStringKnown (tok, sym, contents, escape, known);
6267 : 281418 : break;
6268 : :
6269 : :
6270 : : default:
6271 : : M2Error_InternalError ((const char *) "expecting ConstStringSym", 24);
6272 : 281418 : break;
6273 : : }
6274 : 281418 : }
6275 : :
6276 : :
6277 : : /*
6278 : : GetConstStringKind - return the StringVariant field associated with sym.
6279 : : */
6280 : :
6281 : 262026 : static SymbolTable_ConstStringVariant GetConstStringKind (unsigned int sym)
6282 : : {
6283 : 262026 : SymbolTable_PtrToSymbol pSym;
6284 : :
6285 : 262026 : pSym = GetPsym (sym);
6286 : 262026 : switch (pSym->SymbolType)
6287 : : {
6288 : 262026 : case SymbolTable_ConstStringSym:
6289 : 262026 : return pSym->ConstString.StringVariant;
6290 : 0 : break;
6291 : :
6292 : :
6293 : 0 : default:
6294 : 0 : M2Error_InternalError ((const char *) "expecting ConstString symbol", 28);
6295 : : break;
6296 : : }
6297 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
6298 : : __builtin_unreachable ();
6299 : : }
6300 : :
6301 : :
6302 : : /*
6303 : : CanUseBuiltin - returns TRUE if the procedure, Sym, can be
6304 : : inlined via a builtin function.
6305 : : */
6306 : :
6307 : 15762 : static bool CanUseBuiltin (unsigned int Sym)
6308 : : {
6309 : 15762 : return ! M2Options_DebugBuiltins && ((m2builtins_BuiltinExists (reinterpret_cast <char * > (NameKey_KeyToCharStar (SymbolTable_GetProcedureBuiltin (Sym))))) || (m2builtins_BuiltinExists (reinterpret_cast <char * > (NameKey_KeyToCharStar (SymbolTable_GetSymName (Sym))))));
6310 : : /* static analysis guarentees a RETURN statement will be used before here. */
6311 : : __builtin_unreachable ();
6312 : : }
6313 : :
6314 : :
6315 : : /*
6316 : : InitPacked - initialise packedInfo to FALSE and NulSym.
6317 : : */
6318 : :
6319 : 793728 : static void InitPacked (SymbolTable_PackedInfo *packedInfo)
6320 : : {
6321 : 793728 : (*packedInfo).IsPacked = false;
6322 : 793728 : (*packedInfo).PackedEquiv = SymbolTable_NulSym;
6323 : 0 : }
6324 : :
6325 : :
6326 : : /*
6327 : : doEquivalent - create a packed equivalent symbol for, sym, and return the
6328 : : new symbol. It sets both fields in packedInfo to FALSE
6329 : : and the new symbol.
6330 : : */
6331 : :
6332 : 13441 : static unsigned int doEquivalent (SymbolTable_PackedInfo *packedInfo, unsigned int sym)
6333 : : {
6334 : 13441 : unsigned int nSym;
6335 : 13441 : SymbolTable_PtrToSymbol pSym;
6336 : :
6337 : 13441 : NewSym (&nSym);
6338 : 13441 : pSym = GetPsym (nSym);
6339 : 13441 : pSym->SymbolType = SymbolTable_EquivSym;
6340 : 13441 : pSym->Equiv.nonPacked = sym;
6341 : 13441 : pSym->Equiv.packedInfo.IsPacked = true;
6342 : 13441 : pSym->Equiv.packedInfo.PackedEquiv = SymbolTable_NulSym;
6343 : 13441 : (*packedInfo).IsPacked = false;
6344 : 13441 : (*packedInfo).PackedEquiv = nSym;
6345 : 13441 : return nSym;
6346 : : /* static analysis guarentees a RETURN statement will be used before here. */
6347 : : __builtin_unreachable ();
6348 : : }
6349 : :
6350 : :
6351 : : /*
6352 : : MakeEquivalent - return the equivalent packed symbol for, sym.
6353 : : */
6354 : :
6355 : 13441 : static unsigned int MakeEquivalent (unsigned int sym)
6356 : : {
6357 : 13441 : SymbolTable_PtrToSymbol pSym;
6358 : :
6359 : 13441 : pSym = GetPsym (sym);
6360 : 13441 : switch (pSym->SymbolType)
6361 : : {
6362 : 13381 : case SymbolTable_EnumerationSym:
6363 : 13381 : return doEquivalent (&pSym->Enumeration.packedInfo, sym);
6364 : 60 : break;
6365 : :
6366 : 60 : case SymbolTable_SubrangeSym:
6367 : 60 : return doEquivalent (&pSym->Subrange.packedInfo, sym);
6368 : 0 : break;
6369 : :
6370 : 0 : case SymbolTable_TypeSym:
6371 : 0 : return doEquivalent (&pSym->Type.packedInfo, sym);
6372 : 0 : break;
6373 : :
6374 : 0 : case SymbolTable_SetSym:
6375 : 0 : return doEquivalent (&pSym->Set.packedInfo, sym);
6376 : 0 : break;
6377 : :
6378 : :
6379 : 0 : default:
6380 : 0 : M2Error_InternalError ((const char *) "expecting type, subrange or enumerated type symbol", 50);
6381 : : break;
6382 : : }
6383 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
6384 : : __builtin_unreachable ();
6385 : : }
6386 : :
6387 : :
6388 : : /*
6389 : : GetEquivalent -
6390 : : */
6391 : :
6392 : 13681 : static unsigned int GetEquivalent (SymbolTable_PackedInfo *packedInfo, unsigned int sym)
6393 : : {
6394 : 13681 : if ((*packedInfo).IsPacked)
6395 : : {
6396 : : return sym;
6397 : : }
6398 : 13681 : else if ((*packedInfo).PackedEquiv == SymbolTable_NulSym)
6399 : : {
6400 : : /* avoid dangling else. */
6401 : 13441 : (*packedInfo).PackedEquiv = MakeEquivalent (sym);
6402 : : }
6403 : 13681 : return (*packedInfo).PackedEquiv;
6404 : : /* static analysis guarentees a RETURN statement will be used before here. */
6405 : : __builtin_unreachable ();
6406 : : }
6407 : :
6408 : :
6409 : : /*
6410 : : doGetType - subsiduary helper procedure function of GetDType, GetSType and GetLType.
6411 : : */
6412 : :
6413 : 321077627 : static unsigned int doGetType (unsigned int sym, bool skipEquiv, bool skipAlign, bool skipHidden, bool skipBase)
6414 : : {
6415 : 321077627 : SymbolTable_PtrToSymbol pSym;
6416 : 321077627 : unsigned int type;
6417 : :
6418 : 321077627 : type = SymbolTable_NulSym;
6419 : 321077627 : M2Debug_Assert (sym != SymbolTable_NulSym);
6420 : 321077627 : pSym = GetPsym (sym);
6421 : 321077627 : switch (pSym->SymbolType)
6422 : : {
6423 : 0 : case SymbolTable_OAFamilySym:
6424 : 0 : type = pSym->OAFamily.SimpleType;
6425 : 0 : break;
6426 : :
6427 : 60508357 : case SymbolTable_VarSym:
6428 : 60508357 : type = GetTypeOfVar (sym);
6429 : 60508357 : break;
6430 : :
6431 : 21527412 : case SymbolTable_ConstLitSym:
6432 : 21527412 : type = pSym->ConstLit.Type;
6433 : 21527412 : break;
6434 : :
6435 : 14457501 : case SymbolTable_ConstVarSym:
6436 : 14457501 : type = pSym->ConstVar.Type;
6437 : 14457501 : break;
6438 : :
6439 : 6915796 : case SymbolTable_ConstStringSym:
6440 : 6915796 : if (pSym->ConstString.Length == 1)
6441 : : {
6442 : 1200630 : type = M2Base_Char;
6443 : : }
6444 : : else
6445 : : {
6446 : : type = SymbolTable_NulSym; /* No type for a string */
6447 : : }
6448 : : break;
6449 : :
6450 : 48326576 : case SymbolTable_TypeSym:
6451 : 48326576 : type = pSym->Type.Type;
6452 : 48326576 : break;
6453 : :
6454 : 75225804 : case SymbolTable_RecordFieldSym:
6455 : 75225804 : type = pSym->RecordField.Type;
6456 : 75225804 : break;
6457 : :
6458 : : case SymbolTable_RecordSym:
6459 : : type = SymbolTable_NulSym; /* No type for a record */
6460 : : break;
6461 : :
6462 : : case SymbolTable_VarientSym:
6463 : : type = SymbolTable_NulSym; /* No type for a record */
6464 : : break;
6465 : :
6466 : 27599244 : case SymbolTable_EnumerationFieldSym:
6467 : 27599244 : type = pSym->EnumerationField.Type; /* No type for a record */
6468 : 27599244 : break;
6469 : :
6470 : : case SymbolTable_EnumerationSym:
6471 : : type = SymbolTable_NulSym; /* No type for enumeration */
6472 : : break;
6473 : :
6474 : 21529300 : case SymbolTable_PointerSym:
6475 : 21529300 : type = pSym->Pointer.Type; /* No type for enumeration */
6476 : 21529300 : break;
6477 : :
6478 : 7534191 : case SymbolTable_ProcedureSym:
6479 : 7534191 : type = pSym->Procedure.ReturnType;
6480 : 7534191 : break;
6481 : :
6482 : 5664064 : case SymbolTable_ProcTypeSym:
6483 : 5664064 : type = pSym->ProcType.ReturnType;
6484 : 5664064 : break;
6485 : :
6486 : 12287798 : case SymbolTable_ParamSym:
6487 : 12287798 : type = pSym->Param.Type;
6488 : 12287798 : break;
6489 : :
6490 : 2317358 : case SymbolTable_VarParamSym:
6491 : 2317358 : type = pSym->VarParam.Type;
6492 : 2317358 : break;
6493 : :
6494 : 4736380 : case SymbolTable_SubrangeSym:
6495 : 4736380 : type = pSym->Subrange.Type;
6496 : 4736380 : break;
6497 : :
6498 : 1561214 : case SymbolTable_ArraySym:
6499 : 1561214 : type = pSym->Array.Type;
6500 : 1561214 : break;
6501 : :
6502 : 1453338 : case SymbolTable_SubscriptSym:
6503 : 1453338 : type = pSym->Subscript.Type;
6504 : 1453338 : break;
6505 : :
6506 : 1455106 : case SymbolTable_SetSym:
6507 : 1455106 : type = pSym->Set.Type;
6508 : 1455106 : break;
6509 : :
6510 : 7949250 : case SymbolTable_UnboundedSym:
6511 : 7949250 : type = pSym->Unbounded.Type;
6512 : 7949250 : break;
6513 : :
6514 : : case SymbolTable_UndefinedSym:
6515 : : type = SymbolTable_NulSym;
6516 : : break;
6517 : :
6518 : 0 : case SymbolTable_PartialUnboundedSym:
6519 : 0 : type = pSym->PartialUnbounded.Type;
6520 : 0 : break;
6521 : :
6522 : : case SymbolTable_ObjectSym:
6523 : : type = SymbolTable_NulSym;
6524 : : break;
6525 : :
6526 : :
6527 : 0 : default:
6528 : 0 : M2Error_InternalError ((const char *) "not implemented yet", 19);
6529 : 315333523 : break;
6530 : : }
6531 : 321077627 : if (((type == SymbolTable_NulSym) && (SymbolTable_IsType (sym))) && ! skipBase)
6532 : : {
6533 : : return sym; /* sym is a base type */
6534 : : }
6535 : 312953420 : else if (type != SymbolTable_NulSym)
6536 : : {
6537 : : /* avoid dangling else. */
6538 : 259261589 : if ((SymbolTable_IsType (type)) && skipEquiv)
6539 : : {
6540 : 8582636 : if ((! (SymbolTable_IsHiddenType (type))) || skipHidden)
6541 : : {
6542 : 8472430 : if (((SymbolTable_GetAlignment (type)) == SymbolTable_NulSym) || skipAlign)
6543 : : {
6544 : 8472412 : return doGetType (type, skipEquiv, skipAlign, skipHidden, skipBase);
6545 : : }
6546 : : }
6547 : : }
6548 : : }
6549 : : return type;
6550 : : /* static analysis guarentees a RETURN statement will be used before here. */
6551 : : __builtin_unreachable ();
6552 : : }
6553 : :
6554 : :
6555 : : /*
6556 : : GetTypeOfVar - returns the type of symbol, var.
6557 : : */
6558 : :
6559 : 97500509 : static unsigned int GetTypeOfVar (unsigned int var)
6560 : : {
6561 : 97500509 : SymbolTable_PtrToSymbol pSym;
6562 : 97500509 : unsigned int high;
6563 : :
6564 : 97500509 : pSym = GetPsym (var);
6565 : 97500509 : switch (pSym->SymbolType)
6566 : : {
6567 : 97500509 : case SymbolTable_VarSym:
6568 : 97500509 : if (pSym->Var.IsTemp && pSym->Var.IsComponentRef)
6569 : : {
6570 : 2175658 : high = Indexing_HighIndice (pSym->Var.list);
6571 : 4351316 : return SymbolTable_GetType (GetFromIndex (pSym->Var.list, high));
6572 : : }
6573 : : else
6574 : : {
6575 : 95324851 : return pSym->Var.Type;
6576 : : }
6577 : 0 : break;
6578 : :
6579 : :
6580 : 0 : default:
6581 : 0 : M2Error_InternalError ((const char *) "expecting a var symbol", 22);
6582 : : break;
6583 : : }
6584 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
6585 : : __builtin_unreachable ();
6586 : : }
6587 : :
6588 : :
6589 : : /*
6590 : : GetConstLitType - returns the type of the constant of, name.
6591 : : All floating point constants have type LONGREAL.
6592 : : Character constants are type CHAR.
6593 : : Integer values are INTEGER, LONGINT or LONGCARD
6594 : : depending upon their value.
6595 : : */
6596 : :
6597 : 390352 : static unsigned int GetConstLitType (unsigned int tok, NameKey_Name name, bool *overflow, bool issueError)
6598 : : {
6599 : 390352 : location_t loc;
6600 : 390352 : DynamicStrings_String s;
6601 : :
6602 : 390352 : s = DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (name));
6603 : 390352 : if ((DynamicStrings_char (s, -1)) == 'C')
6604 : : {
6605 : 113350 : s = DynamicStrings_KillString (s);
6606 : 113350 : return M2Base_Char;
6607 : : }
6608 : : else
6609 : : {
6610 : 277002 : if ((DynamicStrings_Index (s, '.', 0)) != -1) /* found a '.' in our constant */
6611 : : {
6612 : 6472 : s = DynamicStrings_KillString (s);
6613 : 6472 : return M2Base_RType;
6614 : : }
6615 : 270530 : loc = M2LexBuf_TokenToLocation (tok);
6616 : 270530 : switch (DynamicStrings_char (s, -1))
6617 : : {
6618 : 690 : case 'H':
6619 : 690 : (*overflow) = m2expr_OverflowZType (loc, const_cast <const char * > (static_cast <char * > (DynamicStrings_string (s))), 16, issueError);
6620 : 690 : break;
6621 : :
6622 : 2578 : case 'B':
6623 : 2578 : (*overflow) = m2expr_OverflowZType (loc, const_cast <const char * > (static_cast <char * > (DynamicStrings_string (s))), 8, issueError);
6624 : 2578 : break;
6625 : :
6626 : 24 : case 'A':
6627 : 24 : (*overflow) = m2expr_OverflowZType (loc, const_cast <const char * > (static_cast <char * > (DynamicStrings_string (s))), 2, issueError);
6628 : 24 : break;
6629 : :
6630 : :
6631 : 267238 : default:
6632 : 267238 : (*overflow) = m2expr_OverflowZType (loc, const_cast <const char * > (static_cast <char * > (DynamicStrings_string (s))), 10, issueError);
6633 : 267238 : break;
6634 : : }
6635 : 270530 : s = DynamicStrings_KillString (s);
6636 : 270530 : return M2Base_ZType;
6637 : : }
6638 : : /* static analysis guarentees a RETURN statement will be used before here. */
6639 : : __builtin_unreachable ();
6640 : : }
6641 : :
6642 : :
6643 : : /*
6644 : : GetNthFromComponent -
6645 : : */
6646 : :
6647 : 569676 : static unsigned int GetNthFromComponent (unsigned int Sym, unsigned int n)
6648 : : {
6649 : 569676 : SymbolTable_PtrToSymbol pSym;
6650 : :
6651 : 569676 : pSym = GetPsym (Sym);
6652 : 569676 : switch (pSym->SymbolType)
6653 : : {
6654 : 569676 : case SymbolTable_VarSym:
6655 : 569676 : if (SymbolTable_IsComponent (Sym))
6656 : : {
6657 : 569676 : if (Indexing_InBounds (pSym->Var.list, n))
6658 : : {
6659 : 760384 : return GetFromIndex (pSym->Var.list, n);
6660 : : }
6661 : : else
6662 : : {
6663 : : return SymbolTable_NulSym;
6664 : : }
6665 : : }
6666 : : else
6667 : : {
6668 : 0 : M2Error_InternalError ((const char *) "cannot GetNth from this symbol", 30);
6669 : : }
6670 : 0 : break;
6671 : :
6672 : :
6673 : 0 : default:
6674 : 0 : M2Error_InternalError ((const char *) "cannot GetNth from this symbol", 30);
6675 : : break;
6676 : : }
6677 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
6678 : : __builtin_unreachable ();
6679 : : }
6680 : :
6681 : :
6682 : : /*
6683 : : EnsureOrder - providing that both symbols, a, and, b, exist in
6684 : : list, l. Ensure that, b, is placed after a.
6685 : : */
6686 : :
6687 : 264 : static void EnsureOrder (Lists_List l, unsigned int a, unsigned int b)
6688 : : {
6689 : 264 : unsigned int n;
6690 : :
6691 : 264 : n = Lists_NoOfItemsInList (l);
6692 : 264 : if ((Lists_IsItemInList (l, a)) && (Lists_IsItemInList (l, b)))
6693 : : {
6694 : 264 : Lists_RemoveItemFromList (l, b);
6695 : 264 : Lists_IncludeItemIntoList (l, b);
6696 : : }
6697 : 264 : M2Debug_Assert (n == (Lists_NoOfItemsInList (l)));
6698 : 264 : }
6699 : :
6700 : :
6701 : : /*
6702 : : DumpSons -
6703 : : */
6704 : :
6705 : 0 : static void DumpSons (unsigned int sym)
6706 : : {
6707 : 0 : SymbolTable_PtrToSymbol pSym;
6708 : 0 : unsigned int f;
6709 : 0 : unsigned int n;
6710 : 0 : unsigned int i;
6711 : :
6712 : 0 : pSym = GetPsym (sym);
6713 : 0 : switch (pSym->SymbolType)
6714 : : {
6715 : 0 : case SymbolTable_RecordSym:
6716 : 0 : n = Lists_NoOfItemsInList (pSym->Record.ListOfSons);
6717 : 0 : i = 1;
6718 : 0 : while (i <= n)
6719 : : {
6720 : 0 : f = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Record.ListOfSons, i));
6721 : 0 : M2Printf_printf3 ((const char *) "record %d field %d is %d\\n", 26, (const unsigned char *) &sym, (sizeof (sym)-1), (const unsigned char *) &i, (sizeof (i)-1), (const unsigned char *) &f, (sizeof (f)-1));
6722 : 0 : i += 1;
6723 : : }
6724 : 0 : break;
6725 : :
6726 : :
6727 : 0 : default:
6728 : 0 : M2Error_InternalError ((const char *) "expecting record symbol", 23);
6729 : 0 : break;
6730 : : }
6731 : 0 : }
6732 : :
6733 : :
6734 : : /*
6735 : : CheckListOfSons - checks to see that sym, is present in, recordConsist, ListOfSons.
6736 : : */
6737 : :
6738 : 0 : static void CheckListOfSons (unsigned int sym)
6739 : : {
6740 : 0 : SymbolTable_PtrToSymbol pSym;
6741 : :
6742 : 0 : pSym = GetPsym (recordConsist);
6743 : 0 : switch (pSym->SymbolType)
6744 : : {
6745 : 0 : case SymbolTable_RecordSym:
6746 : 0 : if (! (Lists_IsItemInList (pSym->Record.ListOfSons, sym)))
6747 : : {
6748 : 0 : DumpSons (recordConsist);
6749 : 0 : M2MetaError_MetaError1 ((const char *) "internal error: expecting {%1ad} to exist in record ListOfSons", 63, sym);
6750 : : }
6751 : 0 : break;
6752 : :
6753 : :
6754 : 0 : default:
6755 : 0 : M2Error_InternalError ((const char *) "expecting record symbol", 23);
6756 : 0 : break;
6757 : : }
6758 : 0 : }
6759 : :
6760 : :
6761 : : /*
6762 : : CheckRecordConsistency -
6763 : : */
6764 : :
6765 : 0 : static void CheckRecordConsistency (unsigned int sym)
6766 : : {
6767 : 0 : SymbolTable_PtrToSymbol pSym;
6768 : :
6769 : 0 : return;
6770 : : pSym = GetPsym (sym);
6771 : : switch (pSym->SymbolType)
6772 : : {
6773 : : case SymbolTable_RecordSym:
6774 : : recordConsist = sym;
6775 : : SymbolKey_ForeachNodeDo (pSym->Record.LocalSymbols, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) CheckListOfSons});
6776 : : break;
6777 : :
6778 : :
6779 : : default:
6780 : : M2Error_InternalError ((const char *) "record symbol expected", 22);
6781 : 0 : break;
6782 : : }
6783 : : }
6784 : :
6785 : :
6786 : : /*
6787 : : PutConstVarTemporary - indicates that constant, sym, is a temporary.
6788 : : */
6789 : :
6790 : 398624 : static void PutConstVarTemporary (unsigned int sym)
6791 : : {
6792 : 398624 : SymbolTable_PtrToSymbol pSym;
6793 : :
6794 : 398624 : pSym = GetPsym (sym);
6795 : 398624 : switch (pSym->SymbolType)
6796 : : {
6797 : 398624 : case SymbolTable_ConstVarSym:
6798 : 398624 : pSym->ConstVar.IsTemp = true;
6799 : 398624 : break;
6800 : :
6801 : :
6802 : 0 : default:
6803 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
6804 : 398624 : break;
6805 : : }
6806 : 398624 : }
6807 : :
6808 : :
6809 : : /*
6810 : : buildTemporary - builds the temporary filling in componentRef, record and sets mode.
6811 : : */
6812 : :
6813 : 984332 : static unsigned int buildTemporary (unsigned int tok, SymbolTable_ModeOfAddr Mode, bool componentRef, unsigned int record)
6814 : : {
6815 : 984332 : SymbolTable_PtrToSymbol pSym;
6816 : 984332 : DynamicStrings_String s;
6817 : 984332 : unsigned int Sym;
6818 : :
6819 : 984332 : TemporaryNo += 1;
6820 : : /* Make the name */
6821 : 984332 : s = FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "_T%d", 4)), (const unsigned char *) &TemporaryNo, (sizeof (TemporaryNo)-1));
6822 : 984332 : if (Mode == SymbolTable_ImmediateValue)
6823 : : {
6824 : 378633 : Sym = SymbolTable_MakeConstVar (tok, NameKey_makekey (DynamicStrings_string (s)));
6825 : 378633 : PutConstVarTemporary (Sym);
6826 : : }
6827 : : else
6828 : : {
6829 : 605699 : Sym = SymbolTable_MakeVar (tok, NameKey_makekey (DynamicStrings_string (s)));
6830 : 605699 : pSym = GetPsym (Sym);
6831 : 605699 : switch (pSym->SymbolType)
6832 : : {
6833 : 605699 : case SymbolTable_VarSym:
6834 : 605699 : pSym->Var.AddrMode = Mode;
6835 : 605699 : pSym->Var.IsComponentRef = componentRef;
6836 : 605699 : pSym->Var.IsTemp = true; /* Variable is a temporary var */
6837 : 605699 : if (componentRef) /* Variable is a temporary var */
6838 : : {
6839 : 120682 : pSym->Var.list = Indexing_InitIndex (1);
6840 : 120682 : PutIntoIndex (&pSym->Var.list, 1, record);
6841 : : }
6842 : 605699 : InitWhereDeclaredTok (tok, &pSym->Var.At); /* Declared here */
6843 : 605699 : InitWhereFirstUsedTok (tok, &pSym->Var.At); /* Where symbol first used. */
6844 : 605699 : break;
6845 : :
6846 : :
6847 : 0 : default:
6848 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22); /* Where symbol first used. */
6849 : 984332 : break;
6850 : : }
6851 : : }
6852 : 984332 : s = DynamicStrings_KillString (s);
6853 : 984332 : return Sym;
6854 : : /* static analysis guarentees a RETURN statement will be used before here. */
6855 : : __builtin_unreachable ();
6856 : : }
6857 : :
6858 : :
6859 : : /*
6860 : : AssertInRange - determines whether the Sym is a legal symbol.
6861 : : */
6862 : :
6863 : 1160475576 : static void AssertInRange (unsigned int Sym)
6864 : : {
6865 : 1160475576 : if ((Sym < 1) || (Sym > (SymbolTable_FinalSymbol ())))
6866 : : {
6867 : 6 : M2Error_InternalError ((const char *) "illegal symbol", 14);
6868 : : }
6869 : 1160475570 : }
6870 : :
6871 : :
6872 : : /*
6873 : : CheckForHiddenType - scans the NeedToBeImplemented tree providing
6874 : : that we are currently compiling an implementation
6875 : : module. If a symbol is found with TypeName
6876 : : then its Sym is returned.
6877 : : Otherwise NulSym is returned.
6878 : : CheckForHiddenType is called before any type is
6879 : : created, therefore the compiler allows hidden
6880 : : types to be implemented using any type.
6881 : : */
6882 : :
6883 : 4830619 : static unsigned int CheckForHiddenType (NameKey_Name TypeName)
6884 : : {
6885 : 4830619 : SymbolTable_PtrToSymbol pSym;
6886 : 4830619 : unsigned int Sym;
6887 : :
6888 : 4830619 : Sym = SymbolTable_NulSym;
6889 : 4830619 : if ((((M2Comp_CompilingImplementationModule ()) && (SymbolTable_IsDefImp (CurrentModule))) && (SymbolTable_IsHiddenTypeDeclared (CurrentModule))) && (TypeName != NameKey_NulName))
6890 : : {
6891 : : /* Check to see whether we are declaring a HiddenType. */
6892 : 46940 : pSym = GetPsym (CurrentModule);
6893 : 46940 : switch (pSym->SymbolType)
6894 : : {
6895 : 46940 : case SymbolTable_DefImpSym:
6896 : 46940 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.NeedToBeImplemented, TypeName));
6897 : 46940 : break;
6898 : :
6899 : :
6900 : 0 : default:
6901 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
6902 : 46940 : break;
6903 : : }
6904 : : }
6905 : 4830619 : return Sym;
6906 : : /* static analysis guarentees a RETURN statement will be used before here. */
6907 : : __builtin_unreachable ();
6908 : : }
6909 : :
6910 : :
6911 : : /*
6912 : : RequestFromModule - returns a symbol from module ModSym with name, SymName.
6913 : : */
6914 : :
6915 : 108 : static unsigned int RequestFromModule (unsigned int tok, unsigned int ModSym, NameKey_Name SymName)
6916 : : {
6917 : 108 : SymbolTable_PtrToSymbol pSym;
6918 : 108 : unsigned int Sym;
6919 : :
6920 : 108 : pSym = GetPsym (ModSym);
6921 : 108 : switch (pSym->SymbolType)
6922 : : {
6923 : 0 : case SymbolTable_DefImpSym:
6924 : 0 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.LocalSymbols, SymName));
6925 : 0 : if (Sym == SymbolTable_NulSym)
6926 : : {
6927 : 0 : Sym = FetchUnknownFromDefImp (tok, ModSym, SymName);
6928 : : }
6929 : : break;
6930 : :
6931 : 108 : case SymbolTable_ModuleSym:
6932 : 108 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.LocalSymbols, SymName));
6933 : 108 : if (Sym == SymbolTable_NulSym)
6934 : : {
6935 : 12 : Sym = FetchUnknownFromModule (tok, ModSym, SymName);
6936 : : }
6937 : : break;
6938 : :
6939 : :
6940 : 0 : default:
6941 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
6942 : 108 : break;
6943 : : }
6944 : 108 : return Sym;
6945 : : /* static analysis guarentees a RETURN statement will be used before here. */
6946 : : __builtin_unreachable ();
6947 : : }
6948 : :
6949 : :
6950 : : /*
6951 : : RequestFromDefinition - returns a symbol from module ModSym with name,
6952 : : SymName.
6953 : : */
6954 : :
6955 : 1972131 : static unsigned int RequestFromDefinition (unsigned int tok, unsigned int ModSym, NameKey_Name SymName)
6956 : : {
6957 : 1972131 : SymbolTable_PtrToSymbol pSym;
6958 : 1972131 : unsigned int Sym;
6959 : 1972131 : unsigned int OldScopePtr;
6960 : :
6961 : 1972131 : pSym = GetPsym (ModSym);
6962 : 1972131 : switch (pSym->SymbolType)
6963 : : {
6964 : 1972131 : case SymbolTable_DefImpSym:
6965 : 1972131 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.ExportQualifiedTree, SymName));
6966 : 1972131 : if (Sym == SymbolTable_NulSym)
6967 : : {
6968 : 635467 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.ExportUnQualifiedTree, SymName));
6969 : 635467 : if (Sym == SymbolTable_NulSym)
6970 : : {
6971 : 306655 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName));
6972 : 306655 : if (Sym == SymbolTable_NulSym)
6973 : : {
6974 : 274653 : OldScopePtr = ScopePtr;
6975 : 274653 : SymbolTable_StartScope (ModSym);
6976 : 274653 : Sym = GetScopeSym (SymName, true);
6977 : 274653 : SymbolTable_EndScope ();
6978 : 274653 : M2Debug_Assert (OldScopePtr == ScopePtr);
6979 : 274653 : if (Sym == SymbolTable_NulSym)
6980 : : {
6981 : 274621 : Sym = FetchUnknownFromDefImp (tok, ModSym, SymName);
6982 : : }
6983 : : else
6984 : : {
6985 : 32 : if (SymbolTable_IsFieldEnumeration (Sym))
6986 : : {
6987 : 6 : if (SymbolTable_IsExported (ModSym, SymbolTable_GetType (Sym)))
6988 : : {
6989 : : return Sym;
6990 : : }
6991 : : }
6992 : : }
6993 : 274647 : SymbolKey_PutSymKey (pSym->DefImp.ExportRequest, SymName, Sym);
6994 : : }
6995 : : }
6996 : : }
6997 : : break;
6998 : :
6999 : :
7000 : 0 : default:
7001 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
7002 : : break;
7003 : : }
7004 : : return Sym;
7005 : : /* static analysis guarentees a RETURN statement will be used before here. */
7006 : : __builtin_unreachable ();
7007 : : }
7008 : :
7009 : :
7010 : : /*
7011 : : GetWhereImported - returns the token number where this symbol
7012 : : was imported into the current module.
7013 : : */
7014 : :
7015 : 6 : static unsigned int GetWhereImported (unsigned int Sym)
7016 : : {
7017 : 6 : SymbolTable_PtrToSymbol pSym;
7018 : :
7019 : 6 : pSym = GetPsym (SymbolTable_GetCurrentModuleScope ());
7020 : 6 : switch (pSym->SymbolType)
7021 : : {
7022 : 6 : case SymbolTable_DefImpSym:
7023 : 6 : return static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.WhereImported, Sym));
7024 : 0 : break;
7025 : :
7026 : 0 : case SymbolTable_ModuleSym:
7027 : 0 : return static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.WhereImported, Sym));
7028 : 0 : break;
7029 : :
7030 : :
7031 : 0 : default:
7032 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
7033 : : break;
7034 : : }
7035 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
7036 : : __builtin_unreachable ();
7037 : : }
7038 : :
7039 : :
7040 : : /*
7041 : : DisplayName - displays the name.
7042 : : */
7043 : :
7044 : 0 : static void DisplayName (unsigned int sym)
7045 : : {
7046 : 0 : M2Printf_printf1 ((const char *) " %a", 5, (const unsigned char *) &sym, (sizeof (sym)-1));
7047 : 0 : }
7048 : :
7049 : :
7050 : : /*
7051 : : DisplaySymbol - displays the name of a symbol
7052 : : */
7053 : :
7054 : 0 : static void DisplaySymbol (unsigned int sym)
7055 : : {
7056 : 0 : DynamicStrings_String s;
7057 : :
7058 : 0 : s = DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (SymbolTable_GetSymName (sym))));
7059 : 0 : M2Printf_printf2 ((const char *) " %s (%d)", 10, (const unsigned char *) &s, (sizeof (s)-1), (const unsigned char *) &sym, (sizeof (sym)-1));
7060 : 0 : }
7061 : :
7062 : :
7063 : : /*
7064 : : FetchUnknownFromModule - returns an Unknown symbol from module, ModSym.
7065 : : */
7066 : :
7067 : 12 : static unsigned int FetchUnknownFromModule (unsigned int tok, unsigned int ModSym, NameKey_Name SymName)
7068 : : {
7069 : 12 : SymbolTable_PtrToSymbol pSym;
7070 : 12 : unsigned int Sym;
7071 : :
7072 : 12 : pSym = GetPsym (ModSym);
7073 : 12 : switch (pSym->SymbolType)
7074 : : {
7075 : 12 : case SymbolTable_ModuleSym:
7076 : 12 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.Unresolved, SymName));
7077 : 12 : if (Sym == SymbolTable_NulSym)
7078 : : {
7079 : 12 : NewSym (&Sym);
7080 : 12 : FillInUnknownFields (tok, Sym, SymName);
7081 : 12 : SymbolKey_PutSymKey (pSym->Module.Unresolved, SymName, Sym);
7082 : : }
7083 : 12 : break;
7084 : :
7085 : :
7086 : 0 : default:
7087 : 0 : M2Error_InternalError ((const char *) "expecting a Module symbol", 25);
7088 : 12 : break;
7089 : : }
7090 : 12 : return Sym;
7091 : : /* static analysis guarentees a RETURN statement will be used before here. */
7092 : : __builtin_unreachable ();
7093 : : }
7094 : :
7095 : :
7096 : : /*
7097 : : FetchUnknownFromDefImp - returns an Unknown symbol from module, ModSym.
7098 : : */
7099 : :
7100 : 274621 : static unsigned int FetchUnknownFromDefImp (unsigned int tok, unsigned int ModSym, NameKey_Name SymName)
7101 : : {
7102 : 274621 : SymbolTable_PtrToSymbol pSym;
7103 : 274621 : unsigned int Sym;
7104 : :
7105 : 274621 : pSym = GetPsym (ModSym);
7106 : 274621 : switch (pSym->SymbolType)
7107 : : {
7108 : 274621 : case SymbolTable_DefImpSym:
7109 : 274621 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.Unresolved, SymName));
7110 : 274621 : if (Sym == SymbolTable_NulSym)
7111 : : {
7112 : 274621 : NewSym (&Sym);
7113 : 274621 : FillInUnknownFields (tok, Sym, SymName);
7114 : 274621 : SymbolKey_PutSymKey (pSym->DefImp.Unresolved, SymName, Sym);
7115 : : }
7116 : 274621 : break;
7117 : :
7118 : :
7119 : 0 : default:
7120 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
7121 : 274621 : break;
7122 : : }
7123 : 274621 : return Sym;
7124 : : /* static analysis guarentees a RETURN statement will be used before here. */
7125 : : __builtin_unreachable ();
7126 : : }
7127 : :
7128 : :
7129 : : /*
7130 : : FetchUnknownFromDefImp - returns an Unknown symbol from module, ModSym.
7131 : : */
7132 : :
7133 : 54 : static unsigned int FetchUnknownFrom (unsigned int tok, unsigned int scope, NameKey_Name SymName)
7134 : : {
7135 : 54 : SymbolTable_PtrToSymbol pSym;
7136 : 54 : unsigned int Sym;
7137 : :
7138 : 54 : pSym = GetPsym (scope);
7139 : 54 : switch (pSym->SymbolType)
7140 : : {
7141 : 0 : case SymbolTable_DefImpSym:
7142 : 0 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.Unresolved, SymName));
7143 : 0 : if (Sym == SymbolTable_NulSym)
7144 : : {
7145 : 0 : NewSym (&Sym);
7146 : 0 : FillInUnknownFields (tok, Sym, SymName);
7147 : 0 : SymbolKey_PutSymKey (pSym->DefImp.Unresolved, SymName, Sym);
7148 : : }
7149 : : break;
7150 : :
7151 : 36 : case SymbolTable_ModuleSym:
7152 : 36 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.Unresolved, SymName));
7153 : 36 : if (Sym == SymbolTable_NulSym)
7154 : : {
7155 : 36 : NewSym (&Sym);
7156 : 36 : FillInUnknownFields (tok, Sym, SymName);
7157 : 36 : SymbolKey_PutSymKey (pSym->Module.Unresolved, SymName, Sym);
7158 : : }
7159 : : break;
7160 : :
7161 : 18 : case SymbolTable_ProcedureSym:
7162 : 18 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Procedure.Unresolved, SymName));
7163 : 18 : if (Sym == SymbolTable_NulSym)
7164 : : {
7165 : 18 : NewSym (&Sym);
7166 : 18 : FillInUnknownFields (tok, Sym, SymName);
7167 : 18 : SymbolKey_PutSymKey (pSym->Procedure.Unresolved, SymName, Sym);
7168 : : }
7169 : : break;
7170 : :
7171 : :
7172 : 0 : default:
7173 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module or Procedure symbol", 48);
7174 : 54 : break;
7175 : : }
7176 : 54 : return Sym;
7177 : : /* static analysis guarentees a RETURN statement will be used before here. */
7178 : : __builtin_unreachable ();
7179 : : }
7180 : :
7181 : :
7182 : : /*
7183 : : UnknownSymbolError - displays symbol name for symbol, sym.
7184 : : */
7185 : :
7186 : 108 : static void UnknownSymbolError (unsigned int sym)
7187 : : {
7188 : 108 : if (IsUnreportedUnknown (sym))
7189 : : {
7190 : 108 : Sets_IncludeElementIntoSet (ReportedUnknowns, sym);
7191 : 108 : M2MetaError_MetaErrorStringT1 (SymbolTable_GetFirstUsed (sym), DynamicStrings_InitString ((const char *) "unknown symbol {%1EUad}", 23), sym);
7192 : : }
7193 : 108 : }
7194 : :
7195 : :
7196 : : /*
7197 : : IsUnreportedUnknown - returns TRUE if symbol, sym, has not been
7198 : : reported and is an unknown symbol.
7199 : : */
7200 : :
7201 : 21566154 : static bool IsUnreportedUnknown (unsigned int sym)
7202 : : {
7203 : 21566154 : return (SymbolTable_IsUnknown (sym)) && (! (Sets_IsElementInSet (ReportedUnknowns, sym)));
7204 : : /* static analysis guarentees a RETURN statement will be used before here. */
7205 : : __builtin_unreachable ();
7206 : : }
7207 : :
7208 : :
7209 : : /*
7210 : : AddListify -
7211 : : */
7212 : :
7213 : 108 : static void AddListify (unsigned int sym)
7214 : : {
7215 : 108 : ListifyWordCount += 1;
7216 : : /* printf ("AddListify: ListifyWordCount = %d, ListifyTotal = %d
7217 : : ",
7218 : : ListifyWordCount, ListifyTotal) ; */
7219 : 108 : if (ListifyWordCount > 1)
7220 : : {
7221 : : /* avoid gcc warning by using compound statement even if not strictly necessary. */
7222 : 18 : if (ListifyWordCount == ListifyTotal)
7223 : : {
7224 : 18 : ListifySentance = DynamicStrings_ConCat (ListifySentance, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " and ", 5)));
7225 : : }
7226 : : else
7227 : : {
7228 : 0 : ListifySentance = DynamicStrings_ConCat (ListifySentance, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ", ", 2)));
7229 : : }
7230 : : }
7231 : 108 : ListifySentance = DynamicStrings_ConCat (ListifySentance, DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (SymbolTable_GetSymName (sym)))));
7232 : 108 : }
7233 : :
7234 : :
7235 : : /*
7236 : : Listify - convert tree into a string list and return the result.
7237 : : */
7238 : :
7239 : 90 : static DynamicStrings_String Listify (SymbolKey_SymbolTree tree, SymbolKey_IsSymbol isCondition)
7240 : : {
7241 : 90 : ListifyTotal = SymbolKey_NoOfNodes (tree, isCondition);
7242 : 90 : ListifyWordCount = 0;
7243 : 90 : ListifySentance = DynamicStrings_InitString ((const char *) "", 0);
7244 : 90 : SymbolKey_ForeachNodeConditionDo (tree, isCondition, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) AddListify});
7245 : 90 : return ListifySentance;
7246 : : /* static analysis guarentees a RETURN statement will be used before here. */
7247 : : __builtin_unreachable ();
7248 : : }
7249 : :
7250 : :
7251 : : /*
7252 : : CheckForUnknowns - checks a binary tree, Tree, to see whether it contains
7253 : : an unknown symbol. All unknown symbols are displayed
7254 : : together with an error message.
7255 : : */
7256 : :
7257 : 1422768 : static void CheckForUnknowns (NameKey_Name name, SymbolKey_SymbolTree Tree, const char *a_, unsigned int _a_high)
7258 : : {
7259 : 1422768 : DynamicStrings_String s;
7260 : 1422768 : char a[_a_high+1];
7261 : :
7262 : : /* make a local copy of each unbounded array. */
7263 : 1422768 : memcpy (a, a_, _a_high+1);
7264 : :
7265 : 1422768 : if (SymbolKey_DoesTreeContainAny (Tree, (SymbolKey_IsSymbol) {(SymbolKey_IsSymbol_t) IsUnreportedUnknown}))
7266 : : {
7267 : 90 : CurrentError = M2Error_NewError (M2LexBuf_GetTokenNo ());
7268 : 90 : s = DynamicStrings_InitString ((const char *) "{%E} the following unknown symbols in module %<", 47);
7269 : 90 : s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (name))));
7270 : 90 : s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "%> were ", 8)));
7271 : 90 : s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) a, _a_high)));
7272 : 90 : s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ": ", 2)));
7273 : 90 : s = DynamicStrings_ConCat (s, DynamicStrings_Mark (Listify (Tree, (SymbolKey_IsSymbol) {(SymbolKey_IsSymbol_t) IsUnreportedUnknown})));
7274 : 90 : M2MetaError_MetaErrorStringT0 (M2LexBuf_GetTokenNo (), s);
7275 : 90 : SymbolKey_ForeachNodeDo (Tree, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) UnknownSymbolError});
7276 : : }
7277 : 1422768 : }
7278 : :
7279 : :
7280 : : /*
7281 : : SymbolError - displays symbol name for symbol, Sym.
7282 : : */
7283 : :
7284 : 0 : static void SymbolError (unsigned int Sym)
7285 : : {
7286 : 0 : M2Error_Error e;
7287 : 0 : NameKey_Name n;
7288 : :
7289 : 0 : n = SymbolTable_GetSymName (Sym);
7290 : 0 : e = M2Error_ChainError (SymbolTable_GetFirstUsed (Sym), CurrentError);
7291 : 0 : M2Error_ErrorFormat1 (e, (const char *) "unknown symbol '%a' found", 25, (const unsigned char *) &n, (sizeof (n)-1));
7292 : 0 : }
7293 : :
7294 : :
7295 : : /*
7296 : : CheckForSymbols - checks a binary tree, Tree, to see whether it contains
7297 : : any symbol. The tree is expected to be empty, if not
7298 : : then an error has occurred.
7299 : : */
7300 : :
7301 : 333022 : static void CheckForSymbols (SymbolKey_SymbolTree Tree, const char *a_, unsigned int _a_high)
7302 : : {
7303 : 333022 : DynamicStrings_String s;
7304 : 333022 : char a[_a_high+1];
7305 : :
7306 : : /* make a local copy of each unbounded array. */
7307 : 333022 : memcpy (a, a_, _a_high+1);
7308 : :
7309 : 333022 : if (! (SymbolKey_IsEmptyTree (Tree)))
7310 : : {
7311 : 0 : s = DynamicStrings_InitString ((const char *) "the symbols are unknown at the end of module {%1Ea} when ", 57);
7312 : 0 : s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) a, _a_high)));
7313 : 0 : M2MetaError_MetaErrorString1 (s, MainModule);
7314 : 0 : SymbolKey_ForeachNodeDo (Tree, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) SymbolError});
7315 : : }
7316 : 333022 : }
7317 : :
7318 : :
7319 : : /*
7320 : : PutExportUndeclared - places a symbol, Sym, into module, ModSym,
7321 : : ExportUndeclared list provided that Sym
7322 : : is unknown.
7323 : : */
7324 : :
7325 : 2993950 : static void PutExportUndeclared (unsigned int ModSym, unsigned int Sym)
7326 : : {
7327 : 2993950 : SymbolTable_PtrToSymbol pSym;
7328 : :
7329 : 2993950 : if (SymbolTable_IsUnknown (Sym))
7330 : : {
7331 : 2509417 : pSym = GetPsym (ModSym);
7332 : 2509417 : switch (pSym->SymbolType)
7333 : : {
7334 : 294 : case SymbolTable_ModuleSym:
7335 : 294 : SymbolKey_PutSymKey (pSym->Module.ExportUndeclared, SymbolTable_GetSymName (Sym), Sym);
7336 : 294 : break;
7337 : :
7338 : 2509123 : case SymbolTable_DefImpSym:
7339 : 2509123 : SymbolKey_PutSymKey (pSym->DefImp.ExportUndeclared, SymbolTable_GetSymName (Sym), Sym);
7340 : 2509123 : break;
7341 : :
7342 : :
7343 : 0 : default:
7344 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
7345 : : break;
7346 : : }
7347 : : }
7348 : 2993950 : }
7349 : :
7350 : :
7351 : : /*
7352 : : GetExportUndeclared - returns a symbol which has, name, from module, ModSym,
7353 : : which is in the ExportUndeclared list.
7354 : : */
7355 : :
7356 : 234 : static unsigned int GetExportUndeclared (unsigned int ModSym, NameKey_Name name)
7357 : : {
7358 : 234 : SymbolTable_PtrToSymbol pSym;
7359 : :
7360 : 234 : pSym = GetPsym (ModSym);
7361 : 234 : switch (pSym->SymbolType)
7362 : : {
7363 : 228 : case SymbolTable_ModuleSym:
7364 : 228 : return static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.ExportUndeclared, name));
7365 : 6 : break;
7366 : :
7367 : 6 : case SymbolTable_DefImpSym:
7368 : 6 : return static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.ExportUndeclared, name));
7369 : 0 : break;
7370 : :
7371 : :
7372 : 0 : default:
7373 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
7374 : : break;
7375 : : }
7376 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
7377 : : __builtin_unreachable ();
7378 : : }
7379 : :
7380 : :
7381 : : /*
7382 : : RemoveExportUndeclared - removes a symbol, Sym, from the module, ModSym,
7383 : : ExportUndeclaredTree.
7384 : : */
7385 : :
7386 : 7144136 : static void RemoveExportUndeclared (unsigned int ModSym, unsigned int Sym)
7387 : : {
7388 : 7144136 : SymbolTable_PtrToSymbol pSym;
7389 : :
7390 : 7144136 : pSym = GetPsym (ModSym);
7391 : 7144136 : switch (pSym->SymbolType)
7392 : : {
7393 : 18 : case SymbolTable_ModuleSym:
7394 : 18 : if ((SymbolKey_GetSymKey (pSym->Module.ExportUndeclared, SymbolTable_GetSymName (Sym))) == Sym)
7395 : : {
7396 : 18 : SymbolKey_DelSymKey (pSym->Module.ExportUndeclared, SymbolTable_GetSymName (Sym));
7397 : : }
7398 : : break;
7399 : :
7400 : 7144118 : case SymbolTable_DefImpSym:
7401 : 7144118 : if ((SymbolKey_GetSymKey (pSym->DefImp.ExportUndeclared, SymbolTable_GetSymName (Sym))) == Sym)
7402 : : {
7403 : 2508763 : SymbolKey_DelSymKey (pSym->DefImp.ExportUndeclared, SymbolTable_GetSymName (Sym));
7404 : : }
7405 : : break;
7406 : :
7407 : :
7408 : 0 : default:
7409 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
7410 : 7144136 : break;
7411 : : }
7412 : 7144136 : }
7413 : :
7414 : :
7415 : : /*
7416 : : CheckForExportedDeclaration - checks to see whether a definition module
7417 : : is currently being compiled, if so,
7418 : : symbol, Sym, is removed from the
7419 : : ExportUndeclared list.
7420 : : This procedure is called whenever a symbol
7421 : : is declared, thus attempting to reduce
7422 : : the ExportUndeclared list.
7423 : : */
7424 : :
7425 : 12873916 : static void CheckForExportedDeclaration (unsigned int Sym)
7426 : : {
7427 : 12873916 : if (M2Comp_CompilingDefinitionModule ())
7428 : : {
7429 : 7144112 : RemoveExportUndeclared (SymbolTable_GetCurrentModule (), Sym);
7430 : : }
7431 : 12873916 : }
7432 : :
7433 : :
7434 : : /*
7435 : : UndeclaredSymbolError - displays symbol name for symbol, Sym.
7436 : : */
7437 : :
7438 : 0 : static void UndeclaredSymbolError (unsigned int Sym)
7439 : : {
7440 : 0 : if (DebugUnknowns)
7441 : : {
7442 : : M2Printf_printf1 ((const char *) "undeclared symbol (%d)\\n", 24, (const unsigned char *) &Sym, (sizeof (Sym)-1));
7443 : : }
7444 : 0 : M2MetaError_MetaError1 ((const char *) "{%1UC} undeclared symbol {%1a}", 30, Sym);
7445 : 0 : }
7446 : :
7447 : :
7448 : : /*
7449 : : RemoveExportUnImplemented - removes a symbol, Sym, from the module, ModSym,
7450 : : NeedToBeImplemented list.
7451 : : */
7452 : :
7453 : 1202095 : static void RemoveExportUnImplemented (unsigned int ModSym, unsigned int Sym)
7454 : : {
7455 : 1202095 : SymbolTable_PtrToSymbol pSym;
7456 : :
7457 : 1202095 : pSym = GetPsym (ModSym);
7458 : 1202095 : switch (pSym->SymbolType)
7459 : : {
7460 : 1202095 : case SymbolTable_DefImpSym:
7461 : 1202095 : if ((SymbolKey_GetSymKey (pSym->DefImp.NeedToBeImplemented, SymbolTable_GetSymName (Sym))) == Sym)
7462 : : {
7463 : 613329 : SymbolKey_DelSymKey (pSym->DefImp.NeedToBeImplemented, SymbolTable_GetSymName (Sym));
7464 : : }
7465 : 1202095 : break;
7466 : :
7467 : :
7468 : 0 : default:
7469 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
7470 : 1202095 : break;
7471 : : }
7472 : 1202095 : }
7473 : :
7474 : :
7475 : : /*
7476 : : RemoveFromExportRequest -
7477 : : */
7478 : :
7479 : 373002 : static void RemoveFromExportRequest (unsigned int Sym)
7480 : : {
7481 : 373002 : SymbolTable_PtrToSymbol pSym;
7482 : :
7483 : 373002 : pSym = GetPsym (ExportRequestModule);
7484 : 373002 : switch (pSym->SymbolType)
7485 : : {
7486 : 373002 : case SymbolTable_DefImpSym:
7487 : 373002 : if ((SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymbolTable_GetSymName (Sym))) == Sym)
7488 : : {
7489 : 6 : SymbolKey_DelSymKey (pSym->DefImp.ExportRequest, SymbolTable_GetSymName (Sym));
7490 : : }
7491 : 373002 : break;
7492 : :
7493 : :
7494 : 0 : default:
7495 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
7496 : 373002 : break;
7497 : : }
7498 : 373002 : }
7499 : :
7500 : :
7501 : : /*
7502 : : RemoveEnumerationFromExportRequest - removes enumeration symbol, sym,
7503 : : (and its fields) from the ExportRequest tree.
7504 : : */
7505 : :
7506 : 13024 : static void RemoveEnumerationFromExportRequest (unsigned int ModSym, unsigned int Sym)
7507 : : {
7508 : 13024 : if (SymbolTable_IsEnumeration (Sym))
7509 : : {
7510 : 13024 : ExportRequestModule = ModSym;
7511 : 13024 : RemoveFromExportRequest (Sym);
7512 : 13024 : SymbolTable_ForeachLocalSymDo (Sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) RemoveFromExportRequest});
7513 : : }
7514 : 13024 : }
7515 : :
7516 : :
7517 : : /*
7518 : : UnImplementedSymbolError - displays symbol name for symbol, Sym.
7519 : : */
7520 : :
7521 : 0 : static void UnImplementedSymbolError (unsigned int Sym)
7522 : : {
7523 : 0 : NameKey_Name n;
7524 : :
7525 : 0 : CurrentError = M2Error_ChainError (SymbolTable_GetFirstUsed (Sym), CurrentError);
7526 : 0 : if (SymbolTable_IsType (Sym))
7527 : : {
7528 : 0 : n = SymbolTable_GetSymName (Sym);
7529 : 0 : M2Error_ErrorFormat1 (CurrentError, (const char *) "hidden type is undeclared (%a)", 30, (const unsigned char *) &n, (sizeof (n)-1));
7530 : : }
7531 : 0 : else if (SymbolTable_IsProcedure (Sym))
7532 : : {
7533 : : /* avoid dangling else. */
7534 : 0 : n = SymbolTable_GetSymName (Sym);
7535 : 0 : M2Error_ErrorFormat1 (CurrentError, (const char *) "procedure is undeclared (%a)", 28, (const unsigned char *) &n, (sizeof (n)-1));
7536 : : }
7537 : 0 : else if (SymbolTable_IsProcType (Sym))
7538 : : {
7539 : : /* avoid dangling else. */
7540 : 0 : n = SymbolTable_GetSymName (Sym);
7541 : 0 : M2Error_ErrorFormat1 (CurrentError, (const char *) "procedure type is undeclared (%a)", 33, (const unsigned char *) &n, (sizeof (n)-1));
7542 : : }
7543 : : else
7544 : : {
7545 : : /* avoid dangling else. */
7546 : 0 : M2Error_ErrorFormat0 (CurrentError, (const char *) "undeclared symbol", 17);
7547 : : }
7548 : 0 : }
7549 : :
7550 : :
7551 : : /*
7552 : : CheckEnumerationInList - places symbol, Sym, in the list, l,
7553 : : providing it does not already exist.
7554 : : PseudoScope(Sym) is called if Sym needs to
7555 : : be added to the enumeration list, l.
7556 : : */
7557 : :
7558 : 48860 : static void CheckEnumerationInList (Lists_List l, unsigned int Sym)
7559 : : {
7560 : 48860 : if (! (Lists_IsItemInList (l, Sym)))
7561 : : {
7562 : 43186 : Lists_PutItemIntoList (l, Sym);
7563 : 43186 : SymbolTable_PseudoScope (Sym);
7564 : : }
7565 : 48860 : }
7566 : :
7567 : :
7568 : : /*
7569 : : CheckIfEnumerationExported - An outer module may use an enumeration that
7570 : : is declared inside an inner module. The usage
7571 : : may occur before definition. The first pass
7572 : : exports a symbol, later the symbol is declared
7573 : : as an emumeration type. At this stage the
7574 : : CheckIfEnumerationExported procedure should be
7575 : : called. This procedure ripples from the current
7576 : : (inner) module to outer module and every time
7577 : : it is exported it must be added to the outer
7578 : : module EnumerationScopeList.
7579 : : */
7580 : :
7581 : 36960 : static void CheckIfEnumerationExported (unsigned int Sym, unsigned int ScopeId)
7582 : : {
7583 : 49986 : SymbolTable_PtrToCallFrame pCall;
7584 : 49986 : unsigned int InnerModId;
7585 : 49986 : unsigned int OuterModId;
7586 : 49986 : unsigned int InnerModSym;
7587 : 49986 : unsigned int OuterModSym;
7588 : :
7589 : 49986 : InnerModId = GetModuleScopeId (ScopeId);
7590 : 49986 : if (InnerModId > 0)
7591 : : {
7592 : 49986 : OuterModId = GetModuleScopeId (InnerModId-1);
7593 : 49986 : if (OuterModId > 0)
7594 : : {
7595 : 49986 : pCall = GetPcall (InnerModId);
7596 : 49986 : InnerModSym = pCall->Search;
7597 : 49986 : pCall = GetPcall (OuterModId);
7598 : 49986 : OuterModSym = pCall->Search;
7599 : 49986 : if ((InnerModSym != SymbolTable_NulSym) && (OuterModSym != SymbolTable_NulSym))
7600 : : {
7601 : 22752 : if (SymbolTable_IsExported (InnerModSym, Sym))
7602 : : {
7603 : 13026 : CheckForEnumerationInOuterModule (Sym, OuterModSym);
7604 : 13026 : CheckIfEnumerationExported (Sym, OuterModId);
7605 : : }
7606 : : }
7607 : : }
7608 : : }
7609 : 36960 : }
7610 : :
7611 : :
7612 : : /*
7613 : : CheckForEnumerationInOuterModule - checks to see whether the enumeration
7614 : : type symbol, Sym, has been entered into
7615 : : the outer module, OuterModule, scope list.
7616 : : OuterModule may be internal to the
7617 : : program module.
7618 : : */
7619 : :
7620 : 13026 : static void CheckForEnumerationInOuterModule (unsigned int Sym, unsigned int OuterModule)
7621 : : {
7622 : 13026 : SymbolTable_PtrToSymbol pSym;
7623 : :
7624 : 13026 : pSym = GetPsym (OuterModule);
7625 : 13026 : switch (pSym->SymbolType)
7626 : : {
7627 : 0 : case SymbolTable_DefImpSym:
7628 : 0 : Lists_IncludeItemIntoList (pSym->DefImp.EnumerationScopeList, Sym);
7629 : 0 : break;
7630 : :
7631 : 13026 : case SymbolTable_ModuleSym:
7632 : 13026 : Lists_IncludeItemIntoList (pSym->Module.EnumerationScopeList, Sym);
7633 : 13026 : break;
7634 : :
7635 : :
7636 : 0 : default:
7637 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
7638 : 13026 : break;
7639 : : }
7640 : 13026 : }
7641 : :
7642 : :
7643 : : /*
7644 : : MakeVariableForParam -
7645 : : */
7646 : :
7647 : 5709406 : static unsigned int MakeVariableForParam (unsigned int tok, NameKey_Name ParamName, unsigned int ProcSym, SymbolTable_ProcedureKind kind, unsigned int no, unsigned int ParmType, unsigned int typetok)
7648 : : {
7649 : 5709406 : SymbolTable_PtrToSymbol pSym;
7650 : 5709406 : unsigned int VariableSym;
7651 : :
7652 : 5709406 : tok = CheckTok (tok, (const char *) "parameter", 9);
7653 : 5709406 : VariableSym = SymbolTable_MakeVar (tok, ParamName);
7654 : 5709406 : pSym = GetPsym (VariableSym);
7655 : 5709406 : switch (pSym->SymbolType)
7656 : : {
7657 : : case SymbolTable_ErrorSym:
7658 : : return SymbolTable_NulSym;
7659 : 5709406 : break;
7660 : :
7661 : 5709406 : case SymbolTable_VarSym:
7662 : 5709406 : pSym->Var.IsParam = true; /* Variable is really a parameter. */
7663 : 5709406 : break;
7664 : :
7665 : :
7666 : 0 : default:
7667 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
7668 : 5709406 : break;
7669 : : }
7670 : : /* Note that the parameter is now treated as a local variable. */
7671 : 5709406 : SymbolTable_PutVarTok (VariableSym, ParmType, typetok);
7672 : 5709406 : SymbolTable_PutDeclared (tok, VariableSym);
7673 : : /*
7674 : : Normal VAR parameters have LeftValue,
7675 : : however Unbounded VAR parameters have RightValue.
7676 : : Non VAR parameters always have RightValue.
7677 : : */
7678 : 5709406 : if ((SymbolTable_IsVarParam (ProcSym, kind, no)) && (! (SymbolTable_IsUnboundedParam (ProcSym, kind, no))))
7679 : : {
7680 : 178882 : SymbolTable_PutMode (VariableSym, SymbolTable_LeftValue);
7681 : : }
7682 : : else
7683 : : {
7684 : 5530524 : SymbolTable_PutMode (VariableSym, SymbolTable_RightValue);
7685 : : }
7686 : : return VariableSym;
7687 : : /* static analysis guarentees a RETURN statement will be used before here. */
7688 : : __builtin_unreachable ();
7689 : : }
7690 : :
7691 : :
7692 : : /*
7693 : : AddParameter - adds a parameter ParSym to a procedure Sym.
7694 : : */
7695 : :
7696 : 12742430 : static void AddParameter (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParSym)
7697 : : {
7698 : 12742430 : SymbolTable_PtrToSymbol pSym;
7699 : :
7700 : 12742430 : pSym = GetPsym (Sym);
7701 : 12742430 : switch (pSym->SymbolType)
7702 : : {
7703 : : case SymbolTable_ErrorSym:
7704 : : break;
7705 : :
7706 : 6956837 : case SymbolTable_ProcedureSym:
7707 : 6956837 : Lists_PutItemIntoList (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam, ParSym);
7708 : 6956837 : break;
7709 : :
7710 : 5785593 : case SymbolTable_ProcTypeSym:
7711 : 5785593 : Lists_PutItemIntoList (pSym->ProcType.ListOfParam, ParSym);
7712 : 5785593 : break;
7713 : :
7714 : :
7715 : 0 : default:
7716 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
7717 : 12742430 : break;
7718 : : }
7719 : 12742430 : }
7720 : :
7721 : :
7722 : : /*
7723 : : AddProcedureProcTypeParam - adds ParamType to the parameter ProcType
7724 : : associated with procedure Sym.
7725 : : */
7726 : :
7727 : 6956837 : static void AddProcedureProcTypeParam (unsigned int Sym, unsigned int ParamType, bool isUnbounded, bool isVarParam)
7728 : : {
7729 : 6956837 : SymbolTable_PtrToSymbol pSym;
7730 : :
7731 : 6956837 : pSym = GetPsym (Sym);
7732 : 6956837 : switch (pSym->SymbolType)
7733 : : {
7734 : 6956837 : case SymbolTable_ProcedureSym:
7735 : 6956837 : if (pSym->Procedure.BuildProcType)
7736 : : {
7737 : : /* avoid gcc warning by using compound statement even if not strictly necessary. */
7738 : 5709406 : if (isVarParam)
7739 : : {
7740 : 406406 : SymbolTable_PutProcTypeVarParam (pSym->Procedure.ProcedureType, ParamType, isUnbounded);
7741 : : }
7742 : : else
7743 : : {
7744 : 5303000 : SymbolTable_PutProcTypeParam (pSym->Procedure.ProcedureType, ParamType, isUnbounded);
7745 : : }
7746 : : }
7747 : 6956837 : break;
7748 : :
7749 : :
7750 : 0 : default:
7751 : 0 : M2Error_InternalError ((const char *) "expecting Sym to be a procedure", 31);
7752 : 6956837 : break;
7753 : : }
7754 : 6956837 : }
7755 : :
7756 : :
7757 : : /*
7758 : : IsNthParamVar - returns true if the n th parameter of the parameter list,
7759 : : List, is a VAR parameter.
7760 : : */
7761 : :
7762 : 14139897 : static bool IsNthParamVar (Lists_List Head, unsigned int n)
7763 : : {
7764 : 14139897 : SymbolTable_PtrToSymbol pSym;
7765 : 14139897 : unsigned int p;
7766 : :
7767 : 14139897 : p = static_cast<unsigned int> (Lists_GetItemFromList (Head, n));
7768 : 14139897 : if (p == SymbolTable_NulSym)
7769 : : {
7770 : 0 : M2Error_InternalError ((const char *) "parameter does not exist", 24);
7771 : : }
7772 : : else
7773 : : {
7774 : 14139897 : pSym = GetPsym (p);
7775 : 14139897 : switch (pSym->SymbolType)
7776 : : {
7777 : : case SymbolTable_ErrorSym:
7778 : : return false;
7779 : 791318 : break;
7780 : :
7781 : 791318 : case SymbolTable_VarParamSym:
7782 : 791318 : return true;
7783 : : break;
7784 : :
7785 : : case SymbolTable_ParamSym:
7786 : : return false;
7787 : 0 : break;
7788 : :
7789 : :
7790 : 0 : default:
7791 : 0 : M2Error_InternalError ((const char *) "expecting Param or VarParam symbol", 34);
7792 : : break;
7793 : : }
7794 : : }
7795 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
7796 : : __builtin_unreachable ();
7797 : : }
7798 : :
7799 : :
7800 : : /*
7801 : : MakeParameterHeapVar - create a heap variable if sym is a pointer.
7802 : : */
7803 : :
7804 : 331769 : static unsigned int MakeParameterHeapVar (unsigned int tok, unsigned int type, SymbolTable_ModeOfAddr mode)
7805 : : {
7806 : 331769 : unsigned int heapvar;
7807 : :
7808 : 331769 : tok = CheckTok (tok, (const char *) "parameter heap var", 18);
7809 : 331769 : heapvar = SymbolTable_NulSym;
7810 : 331769 : type = SymbolTable_SkipType (type);
7811 : 331769 : if (SymbolTable_IsPointer (type))
7812 : : {
7813 : 43676 : heapvar = SymbolTable_MakeTemporary (tok, mode);
7814 : 43676 : SymbolTable_PutVar (heapvar, type);
7815 : 43676 : SymbolTable_PutVarHeap (heapvar, true);
7816 : : }
7817 : 331769 : return heapvar;
7818 : : /* static analysis guarentees a RETURN statement will be used before here. */
7819 : : __builtin_unreachable ();
7820 : : }
7821 : :
7822 : :
7823 : : /*
7824 : : PutParameterHeapVar - creates a heap variable associated with parameter sym.
7825 : : */
7826 : :
7827 : 3094467 : static void PutParameterHeapVar (unsigned int sym)
7828 : : {
7829 : 3094467 : SymbolTable_PtrToSymbol pSym;
7830 : :
7831 : 3094467 : pSym = GetPsym (sym);
7832 : 3094467 : switch (pSym->SymbolType)
7833 : : {
7834 : : case SymbolTable_ParamSym:
7835 : : break;
7836 : :
7837 : 331769 : case SymbolTable_VarParamSym:
7838 : 331769 : pSym->VarParam.HeapVar = MakeParameterHeapVar (SymbolTable_GetDeclaredMod (sym), pSym->VarParam.Type, SymbolTable_LeftValue); /* Nothing to do for the non var parameter. */
7839 : 331769 : break;
7840 : :
7841 : :
7842 : 0 : default:
7843 : 0 : M2Error_InternalError ((const char *) "Param or VarParam symbol expected", 33);
7844 : 3094467 : break;
7845 : : }
7846 : 3094467 : }
7847 : :
7848 : :
7849 : : /*
7850 : : IsProcedureAnyBoolean - returns the boolean result from p
7851 : : for any of procedure kind which is defined.
7852 : : */
7853 : :
7854 : 6598 : static bool IsProcedureAnyBoolean (unsigned int sym, SymbolTable_ProcAnyBoolean p)
7855 : : {
7856 : 6598 : SymbolTable_ProcedureKind kind;
7857 : :
7858 : 19782 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
7859 : : {
7860 : 19782 : if (SymbolTable_GetProcedureDefined (sym, kind))
7861 : : {
7862 : 6598 : return (*p.proc) (sym, kind);
7863 : : }
7864 : : }
7865 : 0 : M2Error_InternalError ((const char *) "no procedure kind exists", 24);
7866 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
7867 : : __builtin_unreachable ();
7868 : : }
7869 : :
7870 : :
7871 : : /*
7872 : : IsProcedureAnyDefaultBoolean - returns the boolean result from p
7873 : : for any of procedure kind which is defined.
7874 : : */
7875 : :
7876 : 2341066 : static bool IsProcedureAnyDefaultBoolean (unsigned int sym, bool default_, SymbolTable_ProcAnyBoolean p)
7877 : : {
7878 : 2341066 : SymbolTable_ProcedureKind kind;
7879 : :
7880 : 5813284 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
7881 : : {
7882 : 5525086 : if (SymbolTable_GetProcedureDefined (sym, kind))
7883 : : {
7884 : 2052868 : return (*p.proc) (sym, kind);
7885 : : }
7886 : : }
7887 : : return default_;
7888 : : /* static analysis guarentees a RETURN statement will be used before here. */
7889 : : __builtin_unreachable ();
7890 : : }
7891 : :
7892 : :
7893 : : /*
7894 : : FillInUnknownFields -
7895 : : */
7896 : :
7897 : 6546308 : static void FillInUnknownFields (unsigned int tok, unsigned int sym, NameKey_Name SymName)
7898 : : {
7899 : 6546308 : SymbolTable_PtrToSymbol pSym;
7900 : :
7901 : 6546308 : pSym = GetPsym (sym);
7902 : 6546308 : pSym->SymbolType = SymbolTable_UndefinedSym;
7903 : 6546308 : pSym->Undefined.name = SymName;
7904 : 6546308 : pSym->Undefined.oafamily = SymbolTable_NulSym;
7905 : 6546308 : pSym->Undefined.errorScope = M2Error_GetCurrentErrorScope ();
7906 : 6546308 : InitWhereFirstUsedTok (tok, &pSym->Undefined.At);
7907 : 6546308 : }
7908 : :
7909 : :
7910 : : /*
7911 : : FillInPointerFields - given a new symbol, sym, make it a pointer symbol
7912 : : and initialize its fields.
7913 : : */
7914 : :
7915 : 168426 : static void FillInPointerFields (unsigned int Sym, NameKey_Name PointerName, unsigned int scope, unsigned int oaf)
7916 : : {
7917 : 168426 : SymbolTable_PtrToSymbol pSym;
7918 : :
7919 : 168426 : if (! (SymbolTable_IsError (Sym)))
7920 : : {
7921 : 168426 : pSym = GetPsym (Sym);
7922 : 168426 : pSym->SymbolType = SymbolTable_PointerSym;
7923 : 168426 : switch (pSym->SymbolType)
7924 : : {
7925 : 168426 : case SymbolTable_PointerSym:
7926 : 168426 : pSym->Pointer.Type = SymbolTable_NulSym;
7927 : 168426 : pSym->Pointer.name = PointerName;
7928 : 168426 : pSym->Pointer.oafamily = oaf; /* The unbounded for this */
7929 : 168426 : SymbolKey_InitTree (&pSym->Pointer.ConstLitTree); /* constants of this type */
7930 : 168426 : pSym->Pointer.Scope = scope; /* Which scope created it */
7931 : 168426 : pSym->Pointer.Size = M2ALU_InitValue (); /* Which scope created it */
7932 : 168426 : pSym->Pointer.Align = SymbolTable_NulSym; /* Alignment of this type */
7933 : 168426 : break;
7934 : :
7935 : :
7936 : : default:
7937 : : M2Error_InternalError ((const char *) "expecting a Pointer symbol", 26); /* Alignment of this type */
7938 : 168426 : break;
7939 : : }
7940 : : }
7941 : 168426 : }
7942 : :
7943 : :
7944 : : /*
7945 : : ForeachParameterDo -
7946 : : */
7947 : :
7948 : 31376 : static void ForeachParameterDo (SymbolTable_CheckProcedure p)
7949 : : {
7950 : 31376 : unsigned int l;
7951 : 31376 : unsigned int h;
7952 : :
7953 : 31376 : l = Indexing_LowIndice (Symbols);
7954 : 31376 : h = Indexing_HighIndice (Symbols);
7955 : 46328036 : while (l <= h)
7956 : : {
7957 : 46265284 : if (SymbolTable_IsParameter (l))
7958 : : {
7959 : 6815435 : (*p.proc) (l);
7960 : : }
7961 : 46265284 : l += 1;
7962 : : }
7963 : 31376 : }
7964 : :
7965 : :
7966 : : /*
7967 : : CheckUnbounded - checks to see if parameter, Sym, is now an unbounded parameter.
7968 : : */
7969 : :
7970 : 6815435 : static void CheckUnbounded (unsigned int Sym)
7971 : : {
7972 : 6815435 : SymbolTable_PtrToSymbol pSym;
7973 : :
7974 : 6815435 : AssertInRange (Sym);
7975 : 6815435 : pSym = GetPsym (Sym);
7976 : 6815435 : switch (pSym->SymbolType)
7977 : : {
7978 : 5965351 : case SymbolTable_ParamSym:
7979 : 5965351 : if (SymbolTable_IsUnbounded (pSym->Param.Type))
7980 : : {
7981 : 351732 : pSym->Param.IsUnbounded = true;
7982 : : }
7983 : : break;
7984 : :
7985 : 850084 : case SymbolTable_VarParamSym:
7986 : 850084 : if (SymbolTable_IsUnbounded (pSym->VarParam.Type))
7987 : : {
7988 : 565648 : pSym->VarParam.IsUnbounded = true;
7989 : : }
7990 : : break;
7991 : :
7992 : :
7993 : 0 : default:
7994 : 0 : M2RTS_HALT (-1);
7995 : : __builtin_unreachable ();
7996 : 6815435 : break;
7997 : : }
7998 : 6815435 : }
7999 : :
8000 : :
8001 : : /*
8002 : : PutOAFamily - places the, oaf, into, SimpleType, oafamily field.
8003 : : */
8004 : :
8005 : 31316 : static void PutOAFamily (unsigned int SimpleType, unsigned int oaf)
8006 : : {
8007 : 31316 : SymbolTable_PtrToSymbol pSym;
8008 : :
8009 : 31316 : pSym = GetPsym (SimpleType);
8010 : 31316 : switch (pSym->SymbolType)
8011 : : {
8012 : : case SymbolTable_ErrorSym:
8013 : : break;
8014 : :
8015 : 12 : case SymbolTable_RecordSym:
8016 : 12 : pSym->Record.oafamily = oaf;
8017 : 12 : break;
8018 : :
8019 : 0 : case SymbolTable_SubrangeSym:
8020 : 0 : pSym->Subrange.oafamily = oaf;
8021 : 0 : break;
8022 : :
8023 : 18 : case SymbolTable_EnumerationSym:
8024 : 18 : pSym->Enumeration.oafamily = oaf;
8025 : 18 : break;
8026 : :
8027 : 6 : case SymbolTable_ArraySym:
8028 : 6 : pSym->Array.oafamily = oaf;
8029 : 6 : break;
8030 : :
8031 : 0 : case SymbolTable_ProcTypeSym:
8032 : 0 : pSym->ProcType.oafamily = oaf;
8033 : 0 : break;
8034 : :
8035 : 17221 : case SymbolTable_TypeSym:
8036 : 17221 : pSym->Type.oafamily = oaf;
8037 : 17221 : break;
8038 : :
8039 : 0 : case SymbolTable_PointerSym:
8040 : 0 : pSym->Pointer.oafamily = oaf;
8041 : 0 : break;
8042 : :
8043 : 14059 : case SymbolTable_SetSym:
8044 : 14059 : pSym->Set.oafamily = oaf;
8045 : 14059 : break;
8046 : :
8047 : 0 : case SymbolTable_UndefinedSym:
8048 : 0 : pSym->Undefined.oafamily = oaf;
8049 : 0 : break;
8050 : :
8051 : :
8052 : 0 : default:
8053 : 0 : M2Error_InternalError ((const char *) "not expecting this SimpleType", 29);
8054 : 31316 : break;
8055 : : }
8056 : 31316 : }
8057 : :
8058 : :
8059 : : /*
8060 : : doFillInOAFamily -
8061 : : */
8062 : :
8063 : 0 : static void doFillInOAFamily (unsigned int oaf, unsigned int i, unsigned int unbounded)
8064 : : {
8065 : 0 : unsigned int SimpleType;
8066 : :
8067 : 0 : SimpleType = SymbolTable_GetType (oaf);
8068 : 0 : if (unbounded != SymbolTable_NulSym)
8069 : : {
8070 : 0 : FillInUnboundedFields (M2LexBuf_GetTokenNo (), unbounded, SimpleType, i);
8071 : : }
8072 : 0 : }
8073 : :
8074 : :
8075 : : /*
8076 : : FillInUnboundedFields -
8077 : : */
8078 : :
8079 : 31376 : static void FillInUnboundedFields (unsigned int tok, unsigned int sym, unsigned int SimpleType, unsigned int ndim)
8080 : : {
8081 : 31376 : SymbolTable_PtrToSymbol pSym;
8082 : 31376 : unsigned int Contents;
8083 : 31376 : unsigned int i;
8084 : :
8085 : 31376 : if (sym != SymbolTable_NulSym)
8086 : : {
8087 : 31376 : pSym = GetPsym (sym);
8088 : 31376 : pSym->SymbolType = SymbolTable_UnboundedSym;
8089 : 31376 : pSym->Unbounded.Type = SimpleType; /* Index to a simple type. */
8090 : 31376 : pSym->Unbounded.Size = M2ALU_InitValue (); /* Size in bytes for this sym */
8091 : 31376 : pSym->Unbounded.Scope = SymbolTable_GetScope (SimpleType); /* Which scope will create it */
8092 : 31376 : InitWhereDeclaredTok (tok, &pSym->Unbounded.At); /* Declared here */
8093 : 31376 : NewSym (&pSym->Unbounded.RecordType); /* Declared here */
8094 : 31376 : FillInRecordFields (tok, pSym->Unbounded.RecordType, NameKey_NulName, SymbolTable_GetScope (SimpleType), SymbolTable_NulSym);
8095 : 31376 : NewSym (&Contents);
8096 : 31376 : FillInPointerFields (Contents, NameKey_NulName, SymbolTable_GetScope (SimpleType), SymbolTable_NulSym);
8097 : 31376 : SymbolTable_PutPointer (Contents, SimpleType);
8098 : : /* create the contents field for the unbounded array. */
8099 : 31376 : M2Debug_Assert ((SymbolTable_PutFieldRecord (pSym->Unbounded.RecordType, NameKey_MakeKey ((const char *) "_m2_contents", 12), Contents, SymbolTable_NulSym)) != SymbolTable_NulSym);
8100 : : /* create all the high fields for the unbounded array. */
8101 : 31376 : i = 1;
8102 : 62896 : while (i <= ndim)
8103 : : {
8104 : 31520 : M2Debug_Assert ((SymbolTable_PutFieldRecord (pSym->Unbounded.RecordType, NameKey_makekey (DynamicStrings_string (DynamicStrings_Mark (FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "_m2_high_%d", 11)), (const unsigned char *) &i, (sizeof (i)-1))))), M2Base_Cardinal, SymbolTable_NulSym)) != SymbolTable_NulSym);
8105 : 31520 : i += 1;
8106 : : }
8107 : 31376 : pSym->Unbounded.Dimensions = ndim;
8108 : 31376 : ForeachParameterDo ((SymbolTable_CheckProcedure) {(SymbolTable_CheckProcedure_t) CheckUnbounded});
8109 : : }
8110 : 31376 : }
8111 : :
8112 : :
8113 : : /*
8114 : : PutUnbounded - associates the unbounded symbol, open, with
8115 : : SimpleType.
8116 : : */
8117 : :
8118 : 31376 : static void PutUnbounded (unsigned int oaf, unsigned int sym, unsigned int ndim)
8119 : : {
8120 : 31376 : SymbolTable_PtrToSymbol pSym;
8121 : :
8122 : 31376 : pSym = GetPsym (oaf);
8123 : 31376 : switch (pSym->SymbolType)
8124 : : {
8125 : : case SymbolTable_OAFamilySym:
8126 : : /* need to check to see if we need to add NulSym for all dimensions < ndim
8127 : : which have not been used. */
8128 : 62836 : while (pSym->OAFamily.MaxDimensions < ndim)
8129 : : {
8130 : 31460 : pSym->OAFamily.MaxDimensions += 1;
8131 : 31460 : if (pSym->OAFamily.MaxDimensions < ndim)
8132 : : {
8133 : : /* add NulSym to an unused dimension. */
8134 : 84 : PutIntoIndex (&pSym->OAFamily.Dimensions, pSym->OAFamily.MaxDimensions, SymbolTable_NulSym);
8135 : : }
8136 : : }
8137 : : /* and finally add the known sym. */
8138 : 31376 : PutIntoIndex (&pSym->OAFamily.Dimensions, ndim, sym);
8139 : 31376 : break;
8140 : :
8141 : :
8142 : 0 : default:
8143 : 0 : M2Error_InternalError ((const char *) "expecting OAFamily symbol", 25);
8144 : 31376 : break;
8145 : : }
8146 : 31376 : }
8147 : :
8148 : :
8149 : : /*
8150 : : GetArrayDimension - returns the number of dimensions defined.
8151 : : */
8152 : :
8153 : 6366 : static unsigned int GetArrayDimension (unsigned int sym)
8154 : : {
8155 : 6366 : unsigned int n;
8156 : :
8157 : 6366 : n = 0;
8158 : 12906 : while (SymbolTable_IsArray (sym))
8159 : : {
8160 : 6540 : sym = SymbolTable_SkipType (SymbolTable_GetType (sym));
8161 : 6540 : n += 1;
8162 : : }
8163 : 6366 : return n;
8164 : : /* static analysis guarentees a RETURN statement will be used before here. */
8165 : : __builtin_unreachable ();
8166 : : }
8167 : :
8168 : :
8169 : : /*
8170 : : ResolveConstructorType - if, sym, has an unresolved constructor type
8171 : : then attempt to resolve it by examining the
8172 : : from, type.
8173 : : */
8174 : :
8175 : 21290 : static void ResolveConstructorType (unsigned int sym, unsigned int *type, unsigned int *from, bool *unres)
8176 : : {
8177 : 21290 : if ((*unres))
8178 : : {
8179 : : /* avoid gcc warning by using compound statement even if not strictly necessary. */
8180 : 21290 : if (SymbolTable_IsConstructor ((*from)))
8181 : : {
8182 : : /* avoid dangling else. */
8183 : 0 : if (IsConstructorResolved ((*from)))
8184 : : {
8185 : 0 : (*unres) = false;
8186 : 0 : (*type) = SymbolTable_GetType ((*from));
8187 : 0 : if (((*type) != SymbolTable_NulSym) && (SymbolTable_IsSet (SymbolTable_SkipType ((*type)))))
8188 : : {
8189 : 0 : SymbolTable_PutConstSet (sym);
8190 : : }
8191 : : }
8192 : : }
8193 : 21290 : else if (((*from) != SymbolTable_NulSym) && (SymbolTable_IsSet (SymbolTable_SkipType ((*from)))))
8194 : : {
8195 : : /* avoid dangling else. */
8196 : 18160 : (*unres) = false;
8197 : 18160 : (*type) = (*from);
8198 : 18160 : SymbolTable_PutConstSet (sym);
8199 : : }
8200 : 3130 : else if (((*from) != SymbolTable_NulSym) && ((SymbolTable_IsRecord (SymbolTable_SkipType ((*from)))) || (SymbolTable_IsArray (SymbolTable_SkipType ((*from))))))
8201 : : {
8202 : : /* avoid dangling else. */
8203 : 3124 : (*unres) = false;
8204 : 3124 : (*type) = (*from);
8205 : : }
8206 : : }
8207 : 21290 : }
8208 : :
8209 : :
8210 : : /*
8211 : : IsConstructorResolved - returns TRUE if the constructor does not
8212 : : have an unresolved type.
8213 : : */
8214 : :
8215 : 42580 : static bool IsConstructorResolved (unsigned int sym)
8216 : : {
8217 : 42580 : SymbolTable_PtrToSymbol pSym;
8218 : :
8219 : 42580 : pSym = GetPsym (sym);
8220 : 42580 : switch (pSym->SymbolType)
8221 : : {
8222 : 42580 : case SymbolTable_ConstVarSym:
8223 : 42580 : return ! pSym->ConstVar.UnresFromType;
8224 : 0 : break;
8225 : :
8226 : 0 : case SymbolTable_ConstLitSym:
8227 : 0 : return ! pSym->ConstLit.UnresFromType;
8228 : 0 : break;
8229 : :
8230 : :
8231 : 0 : default:
8232 : 0 : M2Error_InternalError ((const char *) "expecting ConstVar or ConstLit symbol", 37);
8233 : : break;
8234 : : }
8235 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
8236 : : __builtin_unreachable ();
8237 : : }
8238 : :
8239 : :
8240 : : /*
8241 : : CanResolveConstructor - returns TRUE if the type of the constructor,
8242 : : sym, is known.
8243 : : */
8244 : :
8245 : 21290 : static bool CanResolveConstructor (unsigned int sym)
8246 : : {
8247 : 21290 : SymbolTable_PtrToSymbol pSym;
8248 : :
8249 : 21290 : if (! (IsConstructorResolved (sym)))
8250 : : {
8251 : 21290 : pSym = GetPsym (sym);
8252 : 21290 : switch (pSym->SymbolType)
8253 : : {
8254 : 21290 : case SymbolTable_ConstVarSym:
8255 : 21290 : ResolveConstructorType (sym, &pSym->ConstVar.Type, &pSym->ConstVar.FromType, &pSym->ConstVar.UnresFromType);
8256 : 21290 : break;
8257 : :
8258 : 0 : case SymbolTable_ConstLitSym:
8259 : 0 : ResolveConstructorType (sym, &pSym->ConstLit.Type, &pSym->ConstLit.FromType, &pSym->ConstLit.UnresFromType);
8260 : 0 : break;
8261 : :
8262 : :
8263 : 0 : default:
8264 : 0 : M2Error_InternalError ((const char *) "expecting ConstVar or ConstLit symbol", 37);
8265 : : break;
8266 : : }
8267 : : }
8268 : 21290 : return IsConstructorResolved (sym);
8269 : : /* static analysis guarentees a RETURN statement will be used before here. */
8270 : : __builtin_unreachable ();
8271 : : }
8272 : :
8273 : :
8274 : : /*
8275 : : CheckAllConstructorsResolved - checks to see that the
8276 : : UnresolvedConstructorType list is
8277 : : empty and if it is not then it
8278 : : generates error messages.
8279 : : */
8280 : :
8281 : 13957 : static void CheckAllConstructorsResolved (void)
8282 : : {
8283 : 13957 : unsigned int i;
8284 : 13957 : unsigned int n;
8285 : 13957 : unsigned int s;
8286 : 13957 : M2Error_Error e;
8287 : :
8288 : 13957 : n = Lists_NoOfItemsInList (UnresolvedConstructorType);
8289 : 13957 : if (n > 0)
8290 : : {
8291 : 12 : for (i=1; i<=n; i++)
8292 : : {
8293 : 6 : s = static_cast<unsigned int> (Lists_GetItemFromList (UnresolvedConstructorType, i));
8294 : 6 : e = M2Error_NewError (SymbolTable_GetDeclaredMod (s));
8295 : 6 : M2Error_ErrorFormat0 (e, (const char *) "constructor has an unknown type", 31);
8296 : : }
8297 : 6 : M2Error_FlushErrors ();
8298 : : }
8299 : 13951 : }
8300 : :
8301 : :
8302 : : /*
8303 : : SanityCheckParameters -
8304 : : */
8305 : :
8306 : 3143259 : static void SanityCheckParameters (unsigned int sym)
8307 : : {
8308 : 3143259 : unsigned int p;
8309 : 3143259 : unsigned int i;
8310 : 3143259 : unsigned int n;
8311 : :
8312 : 3143259 : i = 1;
8313 : 3143259 : n = SymbolTable_NoOfParamAny (sym);
8314 : 11777497 : while (i <= n)
8315 : : {
8316 : 5490979 : p = SymbolTable_GetType (SymbolTable_GetParam (sym, i));
8317 : 5490979 : if (SymbolTable_IsConst (p))
8318 : : {
8319 : 0 : M2MetaError_MetaError3 ((const char *) "the {%1N} formal parameter in procedure {%2Dad} should have a type rather than a constant {%3Dad}", 97, i, sym, p);
8320 : : }
8321 : 5490979 : i += 1;
8322 : : }
8323 : 3143259 : }
8324 : :
8325 : :
8326 : : /*
8327 : : SanityCheckArray - checks to see that an array has a correct subrange type.
8328 : : */
8329 : :
8330 : 39466294 : static void SanityCheckArray (unsigned int sym)
8331 : : {
8332 : 39466294 : unsigned int type;
8333 : 39466294 : unsigned int subscript;
8334 : :
8335 : 39466294 : if (SymbolTable_IsArray (sym))
8336 : : {
8337 : 84040 : subscript = SymbolTable_GetArraySubscript (sym);
8338 : 84040 : if (subscript != SymbolTable_NulSym)
8339 : : {
8340 : 84040 : type = SymbolTable_SkipType (SymbolTable_GetType (subscript));
8341 : 84040 : if (SymbolTable_IsAModula2Type (type))
8342 : : {} /* empty. */
8343 : : else
8344 : : {
8345 : : /* ok all is good */
8346 : 0 : M2MetaError_MetaError2 ((const char *) "the array {%1Dad} must be declared with a simpletype in the [..] component rather than a {%2d}", 94, sym, type);
8347 : : }
8348 : : }
8349 : : }
8350 : 39466294 : }
8351 : :
8352 : :
8353 : : /*
8354 : : ForeachSymbolDo - foreach symbol, call, P(sym).
8355 : : */
8356 : :
8357 : 13951 : static void ForeachSymbolDo (SymbolKey_PerformOperation P)
8358 : : {
8359 : 13951 : unsigned int i;
8360 : 13951 : unsigned int n;
8361 : :
8362 : 13951 : i = Indexing_LowIndice (Symbols);
8363 : 13951 : n = Indexing_HighIndice (Symbols);
8364 : 33795425 : while (i <= n)
8365 : : {
8366 : 33767523 : (*P.proc) (i);
8367 : 33767523 : i += 1;
8368 : : }
8369 : 13951 : }
8370 : :
8371 : :
8372 : : /*
8373 : : SanityCheckProcedure - check to see that procedure parameters do not use constants
8374 : : instead of types in their formal parameter section.
8375 : : */
8376 : :
8377 : 3143259 : static void SanityCheckProcedure (unsigned int sym)
8378 : : {
8379 : 3143259 : SanityCheckParameters (sym);
8380 : 3143259 : }
8381 : :
8382 : :
8383 : : /*
8384 : : SanityCheckModule -
8385 : : */
8386 : :
8387 : 139761 : static void SanityCheckModule (unsigned int sym)
8388 : : {
8389 : 139761 : SymbolTable_ForeachInnerModuleDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) SanityCheckModule});
8390 : 139761 : SymbolTable_ForeachProcedureDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) SanityCheckProcedure});
8391 : 139761 : SymbolTable_ForeachLocalSymDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) SanityCheckArray});
8392 : 139761 : }
8393 : :
8394 : :
8395 : : /*
8396 : : AddNameTo - adds Name, n, to tree, s.
8397 : : */
8398 : :
8399 : 4672319 : static void AddNameTo (SymbolKey_SymbolTree s, unsigned int o)
8400 : : {
8401 : 4672319 : if ((SymbolKey_GetSymKey (s, SymbolTable_GetSymName (o))) == SymbolKey_NulKey)
8402 : : {
8403 : 4055652 : SymbolKey_PutSymKey (s, SymbolTable_GetSymName (o), o);
8404 : : }
8405 : 4672319 : }
8406 : :
8407 : :
8408 : : /*
8409 : : CollectSymbolFrom -
8410 : : */
8411 : :
8412 : 126 : static unsigned int CollectSymbolFrom (unsigned int tok, unsigned int scope, NameKey_Name n)
8413 : : {
8414 : 126 : NameKey_Name n1;
8415 : 126 : unsigned int sym;
8416 : :
8417 : 126 : n1 = SymbolTable_GetSymName (scope);
8418 : 126 : if (DebugUnknowns)
8419 : : {
8420 : : M2Printf_printf2 ((const char *) "declaring %a in %a", 18, (const unsigned char *) &n, (sizeof (n)-1), (const unsigned char *) &n1, (sizeof (n1)-1));
8421 : : }
8422 : 126 : sym = CheckScopeForSym (scope, n);
8423 : 126 : if (sym == SymbolTable_NulSym)
8424 : : {
8425 : 54 : sym = FetchUnknownFrom (tok, scope, n);
8426 : : }
8427 : 126 : if (DebugUnknowns)
8428 : : {
8429 : : M2Printf_printf1 ((const char *) " symbol created (%d)\\n", 22, (const unsigned char *) &sym, (sizeof (sym)-1));
8430 : : }
8431 : 126 : return sym;
8432 : : /* static analysis guarentees a RETURN statement will be used before here. */
8433 : : __builtin_unreachable ();
8434 : : }
8435 : :
8436 : :
8437 : : /*
8438 : : CollectUnknown -
8439 : : */
8440 : :
8441 : 162 : static unsigned int CollectUnknown (unsigned int tok, unsigned int sym, NameKey_Name n)
8442 : : {
8443 : 222 : SymbolTable_PtrToSymbol pSym;
8444 : 222 : unsigned int s;
8445 : :
8446 : 222 : s = SymbolTable_NulSym;
8447 : 222 : if ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)))
8448 : : {
8449 : 108 : return CollectSymbolFrom (tok, sym, n);
8450 : : }
8451 : 114 : else if (SymbolTable_IsProcedure (sym))
8452 : : {
8453 : : /* avoid dangling else. */
8454 : 114 : s = CheckScopeForSym (sym, n);
8455 : 114 : if (s == SymbolTable_NulSym)
8456 : : {
8457 : 78 : pSym = GetPsym (sym);
8458 : 78 : switch (pSym->SymbolType)
8459 : : {
8460 : 78 : case SymbolTable_ProcedureSym:
8461 : 78 : if ((SymbolKey_GetSymKey (pSym->Procedure.NamedObjects, n)) != SymbolKey_NulKey)
8462 : : {
8463 : 18 : return CollectSymbolFrom (tok, sym, n);
8464 : : }
8465 : 60 : break;
8466 : :
8467 : :
8468 : 0 : default:
8469 : 0 : M2Error_InternalError ((const char *) "expecting - Procedure symbol", 28);
8470 : 60 : break;
8471 : : }
8472 : 60 : s = CollectUnknown (tok, SymbolTable_GetScope (sym), n);
8473 : : }
8474 : : }
8475 : : return s;
8476 : : /* static analysis guarentees a RETURN statement will be used before here. */
8477 : : __builtin_unreachable ();
8478 : : }
8479 : :
8480 : :
8481 : : /*
8482 : : ResolveImport -
8483 : : */
8484 : :
8485 : 162 : static void ResolveImport (unsigned int o)
8486 : : {
8487 : 162 : NameKey_Name n1;
8488 : 162 : NameKey_Name n2;
8489 : 162 : unsigned int tok;
8490 : 162 : unsigned int sym;
8491 : :
8492 : 162 : if (DebugUnknowns)
8493 : : {
8494 : : n1 = SymbolTable_GetSymName (o);
8495 : : M2Printf_printf1 ((const char *) "attempting to find out where %a was declared\\n", 46, (const unsigned char *) &n1, (sizeof (n1)-1));
8496 : : n1 = SymbolTable_GetSymName (ResolveModule);
8497 : : n2 = SymbolTable_GetSymName (SymbolTable_GetScope (ResolveModule));
8498 : : M2Printf_printf2 ((const char *) "scope of module %a is %a\\n", 26, (const unsigned char *) &n1, (sizeof (n1)-1), (const unsigned char *) &n2, (sizeof (n2)-1));
8499 : : }
8500 : 162 : tok = SymbolTable_GetFirstUsed (o);
8501 : 162 : sym = CollectUnknown (tok, SymbolTable_GetScope (ResolveModule), SymbolTable_GetSymName (o));
8502 : 162 : if (sym == SymbolTable_NulSym)
8503 : : {
8504 : 0 : M2MetaError_MetaError2 ((const char *) "unknown symbol {%1Uad} found in import list of module {%2a}", 59, o, ResolveModule);
8505 : : }
8506 : : else
8507 : : {
8508 : 162 : SymbolTable_AddSymToModuleScope (ResolveModule, sym);
8509 : : }
8510 : 162 : }
8511 : :
8512 : :
8513 : : /*
8514 : : ResolveRelativeImport -
8515 : : */
8516 : :
8517 : 976065 : static void ResolveRelativeImport (unsigned int sym)
8518 : : {
8519 : 976065 : SymbolTable_PtrToSymbol pSym;
8520 : :
8521 : 976065 : if (SymbolTable_IsModule (sym))
8522 : : {
8523 : 420 : ResolveModule = sym;
8524 : 420 : pSym = GetPsym (sym);
8525 : 420 : switch (pSym->SymbolType)
8526 : : {
8527 : 420 : case SymbolTable_ModuleSym:
8528 : 420 : SymbolKey_ForeachNodeDo (pSym->Module.NamedImports, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) ResolveImport});
8529 : 420 : break;
8530 : :
8531 : :
8532 : 0 : default:
8533 : 0 : M2Error_InternalError ((const char *) "expecting - Module symbol", 25);
8534 : 420 : break;
8535 : : }
8536 : : }
8537 : 976065 : SymbolTable_ForeachProcedureDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) ResolveRelativeImport});
8538 : 976065 : SymbolTable_ForeachInnerModuleDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) ResolveRelativeImport});
8539 : 976065 : }
8540 : :
8541 : :
8542 : : /*
8543 : : Max -
8544 : : */
8545 : :
8546 : 0 : static unsigned int Max (unsigned int a, unsigned int b)
8547 : : {
8548 : 0 : if (a > b)
8549 : : {
8550 : : return a;
8551 : : }
8552 : : else
8553 : : {
8554 : : return b;
8555 : : }
8556 : : /* static analysis guarentees a RETURN statement will be used before here. */
8557 : : __builtin_unreachable ();
8558 : : }
8559 : :
8560 : :
8561 : : /*
8562 : : Min -
8563 : : */
8564 : :
8565 : 0 : static unsigned int Min (unsigned int a, unsigned int b)
8566 : : {
8567 : 0 : if (a < b)
8568 : : {
8569 : : return a;
8570 : : }
8571 : : else
8572 : : {
8573 : : return b;
8574 : : }
8575 : : /* static analysis guarentees a RETURN statement will be used before here. */
8576 : : __builtin_unreachable ();
8577 : : }
8578 : :
8579 : :
8580 : : /*
8581 : : DoFindLimits - assigns, Start, and, End, to the start and end
8582 : : limits contained in the list, l. It ensures that
8583 : : Start and End are within StartLimit..EndLimit.
8584 : : If StartLimit or EndLimit are 0 then Start is
8585 : : is set to the first value and End to the last.
8586 : : */
8587 : :
8588 : 30 : static void DoFindLimits (unsigned int StartLimit, unsigned int EndLimit, unsigned int *Start, unsigned int *End, Lists_List l)
8589 : : {
8590 : 30 : unsigned int i;
8591 : 30 : unsigned int j;
8592 : 30 : unsigned int n;
8593 : :
8594 : 30 : (*End) = 0;
8595 : 30 : (*Start) = 0;
8596 : 30 : i = 1;
8597 : 30 : n = Lists_NoOfItemsInList (l);
8598 : 90 : while (i <= n)
8599 : : {
8600 : 30 : j = static_cast<unsigned int> (Lists_GetItemFromList (l, i));
8601 : 30 : if (((j > (*End)) && (j >= StartLimit)) && ((j <= EndLimit) || (EndLimit == 0)))
8602 : : {
8603 : 24 : (*End) = j;
8604 : : }
8605 : 30 : if ((((((*Start) == 0) || (j < (*Start))) && (j != 0)) && (j >= StartLimit)) && ((j <= EndLimit) || (EndLimit == 0)))
8606 : : {
8607 : 24 : (*Start) = j;
8608 : : }
8609 : 30 : i += 1;
8610 : : }
8611 : 30 : }
8612 : :
8613 : :
8614 : : /*
8615 : : PutDeclaredDefinition - associates the current tokenno with
8616 : : the symbols declaration in the definition
8617 : : module.
8618 : : */
8619 : :
8620 : 11002327 : static void PutDeclaredDefinition (unsigned int tok, unsigned int Sym)
8621 : : {
8622 : 11002327 : SymbolTable_PtrToSymbol pSym;
8623 : :
8624 : 11002327 : pSym = GetPsym (Sym);
8625 : 11002327 : switch (pSym->SymbolType)
8626 : : {
8627 : 0 : case SymbolTable_ErrorSym:
8628 : 0 : pSym->Error.At.DefDeclared = tok;
8629 : 0 : break;
8630 : :
8631 : 0 : case SymbolTable_ObjectSym:
8632 : 0 : pSym->Object.At.DefDeclared = tok;
8633 : 0 : break;
8634 : :
8635 : 0 : case SymbolTable_VarientSym:
8636 : 0 : pSym->Varient.At.DefDeclared = tok;
8637 : 0 : break;
8638 : :
8639 : 0 : case SymbolTable_RecordSym:
8640 : 0 : pSym->Record.At.DefDeclared = tok;
8641 : 0 : break;
8642 : :
8643 : 0 : case SymbolTable_SubrangeSym:
8644 : 0 : pSym->Subrange.At.DefDeclared = tok;
8645 : 0 : break;
8646 : :
8647 : 0 : case SymbolTable_EnumerationSym:
8648 : 0 : pSym->Enumeration.At.DefDeclared = tok;
8649 : 0 : break;
8650 : :
8651 : 986 : case SymbolTable_ArraySym:
8652 : 986 : pSym->Array.At.DefDeclared = tok;
8653 : 986 : break;
8654 : :
8655 : 0 : case SymbolTable_SubscriptSym:
8656 : 0 : pSym->Subscript.At.DefDeclared = tok;
8657 : 0 : break;
8658 : :
8659 : 0 : case SymbolTable_UnboundedSym:
8660 : 0 : pSym->Unbounded.At.DefDeclared = tok;
8661 : 0 : break;
8662 : :
8663 : 1927567 : case SymbolTable_ProcedureSym:
8664 : 1927567 : pSym->Procedure.At.DefDeclared = tok;
8665 : 1927567 : break;
8666 : :
8667 : 0 : case SymbolTable_ProcTypeSym:
8668 : 0 : pSym->ProcType.At.DefDeclared = tok;
8669 : 0 : break;
8670 : :
8671 : 0 : case SymbolTable_ParamSym:
8672 : 0 : pSym->Param.At.DefDeclared = tok;
8673 : 0 : break;
8674 : :
8675 : 0 : case SymbolTable_VarParamSym:
8676 : 0 : pSym->VarParam.At.DefDeclared = tok;
8677 : 0 : break;
8678 : :
8679 : 0 : case SymbolTable_ConstStringSym:
8680 : 0 : pSym->ConstString.At.DefDeclared = tok;
8681 : 0 : break;
8682 : :
8683 : 0 : case SymbolTable_ConstLitSym:
8684 : 0 : pSym->ConstLit.At.DefDeclared = tok;
8685 : 0 : break;
8686 : :
8687 : 3642 : case SymbolTable_ConstVarSym:
8688 : 3642 : pSym->ConstVar.At.DefDeclared = tok;
8689 : 3642 : break;
8690 : :
8691 : 4503301 : case SymbolTable_VarSym:
8692 : 4503301 : pSym->Var.At.DefDeclared = tok;
8693 : 4503301 : break;
8694 : :
8695 : 0 : case SymbolTable_TypeSym:
8696 : 0 : pSym->Type.At.DefDeclared = tok;
8697 : 0 : break;
8698 : :
8699 : 0 : case SymbolTable_PointerSym:
8700 : 0 : pSym->Pointer.At.DefDeclared = tok;
8701 : 0 : break;
8702 : :
8703 : 89460 : case SymbolTable_RecordFieldSym:
8704 : 89460 : pSym->RecordField.At.DefDeclared = tok;
8705 : 89460 : break;
8706 : :
8707 : 0 : case SymbolTable_VarientFieldSym:
8708 : 0 : pSym->VarientField.At.DefDeclared = tok;
8709 : 0 : break;
8710 : :
8711 : 0 : case SymbolTable_EnumerationFieldSym:
8712 : 0 : pSym->EnumerationField.At.DefDeclared = tok;
8713 : 0 : break;
8714 : :
8715 : 0 : case SymbolTable_SetSym:
8716 : 0 : pSym->Set.At.DefDeclared = tok;
8717 : 0 : break;
8718 : :
8719 : 4477371 : case SymbolTable_DefImpSym:
8720 : 4477371 : pSym->DefImp.At.DefDeclared = tok;
8721 : 4477371 : break;
8722 : :
8723 : 0 : case SymbolTable_ModuleSym:
8724 : 0 : pSym->Module.At.DefDeclared = tok;
8725 : 0 : break;
8726 : :
8727 : : case SymbolTable_UndefinedSym:
8728 : : break;
8729 : :
8730 : 0 : case SymbolTable_PartialUnboundedSym:
8731 : 0 : PutDeclaredDefinition (tok, pSym->PartialUnbounded.Type);
8732 : 0 : break;
8733 : :
8734 : :
8735 : 0 : default:
8736 : 0 : M2Error_InternalError ((const char *) "not expecting this type of symbol", 33);
8737 : 11002327 : break;
8738 : : }
8739 : 11002327 : }
8740 : :
8741 : :
8742 : : /*
8743 : : PutDeclaredModule - returns the token where this symbol was declared
8744 : : in an implementation or program module.
8745 : : */
8746 : :
8747 : 7643141 : static void PutDeclaredModule (unsigned int tok, unsigned int Sym)
8748 : : {
8749 : 7643141 : SymbolTable_PtrToSymbol pSym;
8750 : :
8751 : 7643141 : pSym = GetPsym (Sym);
8752 : 7643141 : switch (pSym->SymbolType)
8753 : : {
8754 : 0 : case SymbolTable_ErrorSym:
8755 : 0 : pSym->Error.At.ModDeclared = tok;
8756 : 0 : break;
8757 : :
8758 : 0 : case SymbolTable_ObjectSym:
8759 : 0 : pSym->Object.At.ModDeclared = tok;
8760 : 0 : break;
8761 : :
8762 : 0 : case SymbolTable_VarientSym:
8763 : 0 : pSym->Varient.At.ModDeclared = tok;
8764 : 0 : break;
8765 : :
8766 : 0 : case SymbolTable_RecordSym:
8767 : 0 : pSym->Record.At.ModDeclared = tok;
8768 : 0 : break;
8769 : :
8770 : 0 : case SymbolTable_SubrangeSym:
8771 : 0 : pSym->Subrange.At.ModDeclared = tok;
8772 : 0 : break;
8773 : :
8774 : 0 : case SymbolTable_EnumerationSym:
8775 : 0 : pSym->Enumeration.At.ModDeclared = tok;
8776 : 0 : break;
8777 : :
8778 : 81846 : case SymbolTable_ArraySym:
8779 : 81846 : pSym->Array.At.ModDeclared = tok;
8780 : 81846 : break;
8781 : :
8782 : 0 : case SymbolTable_SubscriptSym:
8783 : 0 : pSym->Subscript.At.ModDeclared = tok;
8784 : 0 : break;
8785 : :
8786 : 0 : case SymbolTable_UnboundedSym:
8787 : 0 : pSym->Unbounded.At.ModDeclared = tok;
8788 : 0 : break;
8789 : :
8790 : 1547630 : case SymbolTable_ProcedureSym:
8791 : 1547630 : pSym->Procedure.At.ModDeclared = tok;
8792 : 1547630 : break;
8793 : :
8794 : 0 : case SymbolTable_ProcTypeSym:
8795 : 0 : pSym->ProcType.At.ModDeclared = tok;
8796 : 0 : break;
8797 : :
8798 : 0 : case SymbolTable_ParamSym:
8799 : 0 : pSym->Param.At.ModDeclared = tok;
8800 : 0 : break;
8801 : :
8802 : 0 : case SymbolTable_VarParamSym:
8803 : 0 : pSym->VarParam.At.ModDeclared = tok;
8804 : 0 : break;
8805 : :
8806 : 0 : case SymbolTable_ConstStringSym:
8807 : 0 : pSym->ConstString.At.ModDeclared = tok;
8808 : 0 : break;
8809 : :
8810 : 0 : case SymbolTable_ConstLitSym:
8811 : 0 : pSym->ConstLit.At.ModDeclared = tok;
8812 : 0 : break;
8813 : :
8814 : 6346 : case SymbolTable_ConstVarSym:
8815 : 6346 : pSym->ConstVar.At.ModDeclared = tok;
8816 : 6346 : break;
8817 : :
8818 : 2141035 : case SymbolTable_VarSym:
8819 : 2141035 : pSym->Var.At.ModDeclared = tok;
8820 : 2141035 : break;
8821 : :
8822 : 0 : case SymbolTable_TypeSym:
8823 : 0 : pSym->Type.At.ModDeclared = tok;
8824 : 0 : break;
8825 : :
8826 : 0 : case SymbolTable_PointerSym:
8827 : 0 : pSym->Pointer.At.ModDeclared = tok;
8828 : 0 : break;
8829 : :
8830 : 164242 : case SymbolTable_RecordFieldSym:
8831 : 164242 : pSym->RecordField.At.ModDeclared = tok;
8832 : 164242 : break;
8833 : :
8834 : 0 : case SymbolTable_VarientFieldSym:
8835 : 0 : pSym->VarientField.At.ModDeclared = tok;
8836 : 0 : break;
8837 : :
8838 : 0 : case SymbolTable_EnumerationFieldSym:
8839 : 0 : pSym->EnumerationField.At.ModDeclared = tok;
8840 : 0 : break;
8841 : :
8842 : 0 : case SymbolTable_SetSym:
8843 : 0 : pSym->Set.At.ModDeclared = tok;
8844 : 0 : break;
8845 : :
8846 : 3646516 : case SymbolTable_DefImpSym:
8847 : 3646516 : pSym->DefImp.At.ModDeclared = tok;
8848 : 3646516 : break;
8849 : :
8850 : 55526 : case SymbolTable_ModuleSym:
8851 : 55526 : pSym->Module.At.ModDeclared = tok;
8852 : 55526 : break;
8853 : :
8854 : : case SymbolTable_UndefinedSym:
8855 : : break;
8856 : :
8857 : 0 : case SymbolTable_PartialUnboundedSym:
8858 : 0 : PutDeclaredModule (tok, pSym->PartialUnbounded.Type);
8859 : 0 : break;
8860 : :
8861 : :
8862 : 0 : default:
8863 : 0 : M2Error_InternalError ((const char *) "not expecting this type of symbol", 33);
8864 : 7643141 : break;
8865 : : }
8866 : 7643141 : }
8867 : :
8868 : :
8869 : : /*
8870 : : DoIsConst - returns TRUE if Sym is defined as a constant
8871 : : or is an enumeration field or string.
8872 : : */
8873 : :
8874 : 115652495 : static bool DoIsConst (unsigned int Sym)
8875 : : {
8876 : 115652495 : SymbolTable_PtrToSymbol pSym;
8877 : :
8878 : 115652495 : pSym = GetPsym (Sym);
8879 : 115652495 : return ((((pSym->SymbolType == SymbolTable_ConstVarSym) || (pSym->SymbolType == SymbolTable_ConstLitSym)) || (pSym->SymbolType == SymbolTable_ConstStringSym)) || ((pSym->SymbolType == SymbolTable_VarSym) && (pSym->Var.AddrMode == SymbolTable_ImmediateValue))) || (pSym->SymbolType == SymbolTable_EnumerationFieldSym);
8880 : : /* static analysis guarentees a RETURN statement will be used before here. */
8881 : : __builtin_unreachable ();
8882 : : }
8883 : :
8884 : :
8885 : : /*
8886 : : GetFromIndex - return a value from list, i, at position, n.
8887 : : */
8888 : :
8889 : 3062715 : static unsigned int GetFromIndex (Indexing_Index i, unsigned int n)
8890 : : {
8891 : 3062715 : typedef unsigned int *GetFromIndex__T2;
8892 : :
8893 : 3062715 : GetFromIndex__T2 p;
8894 : :
8895 : 2555850 : p = static_cast<GetFromIndex__T2> (Indexing_GetIndice (i, n));
8896 : 2555850 : return (*p);
8897 : : /* static analysis guarentees a RETURN statement will be used before here. */
8898 : : __builtin_unreachable ();
8899 : : }
8900 : :
8901 : :
8902 : : /*
8903 : : PutIntoIndex - places value, v, into list, i, at position, n.
8904 : : */
8905 : :
8906 : 277784 : static void PutIntoIndex (Indexing_Index *i, unsigned int n, unsigned int v)
8907 : : {
8908 : 277784 : typedef unsigned int *PutIntoIndex__T3;
8909 : :
8910 : 277784 : PutIntoIndex__T3 p;
8911 : :
8912 : 277784 : Storage_ALLOCATE ((void **) &p, sizeof (unsigned int));
8913 : 277784 : (*p) = v;
8914 : 277784 : Indexing_PutIndice ((*i), n, reinterpret_cast <void *> (p));
8915 : 277784 : }
8916 : :
8917 : :
8918 : : /*
8919 : : PushConstString - pushes the character string onto the ALU stack.
8920 : : It assumes that the character string is only
8921 : : one character long.
8922 : : */
8923 : :
8924 : 11984 : static void PushConstString (unsigned int Sym)
8925 : : {
8926 : 11984 : typedef struct PushConstString__T7_a PushConstString__T7;
8927 : :
8928 : 11984 : struct PushConstString__T7_a { char array[10+1]; };
8929 : 11984 : SymbolTable_PtrToSymbol pSym;
8930 : 11984 : PushConstString__T7 a;
8931 : :
8932 : 11984 : AssertInRange (Sym);
8933 : 11984 : pSym = GetPsym (Sym);
8934 : 11984 : switch (pSym->SymbolType)
8935 : : {
8936 : 11984 : case SymbolTable_ConstStringSym:
8937 : 11984 : if (pSym->ConstString.Length == 0)
8938 : : {
8939 : 6 : M2ALU_PushChar (ASCII_nul);
8940 : : }
8941 : 11978 : else if (pSym->ConstString.Length == 1)
8942 : : {
8943 : : /* avoid dangling else. */
8944 : 11978 : NameKey_GetKey (pSym->ConstString.Contents, (char *) &a.array[0], 10);
8945 : 11978 : M2ALU_PushChar (a.array[0]);
8946 : : }
8947 : : else
8948 : : {
8949 : : /* avoid dangling else. */
8950 : 0 : M2Error_WriteFormat0 ((const char *) "ConstString must be length 0 or 1", 33);
8951 : : }
8952 : 11984 : break;
8953 : :
8954 : :
8955 : 0 : default:
8956 : 0 : M2Error_InternalError ((const char *) "expecting ConstString symbol", 28);
8957 : 11984 : break;
8958 : : }
8959 : 11984 : }
8960 : :
8961 : :
8962 : : /*
8963 : : FinalSymbol - returns the highest number symbol used.
8964 : : */
8965 : :
8966 : 1717935507 : extern "C" unsigned int SymbolTable_FinalSymbol (void)
8967 : : {
8968 : 1717935507 : return FreeSymbol-1;
8969 : : /* static analysis guarentees a RETURN statement will be used before here. */
8970 : : __builtin_unreachable ();
8971 : : }
8972 : :
8973 : :
8974 : : /*
8975 : : MakeComponentRecord - make a temporary which will be used to reference and field
8976 : : (or sub field) of record.
8977 : : */
8978 : :
8979 : 120682 : extern "C" unsigned int SymbolTable_MakeComponentRecord (unsigned int tok, SymbolTable_ModeOfAddr Mode, unsigned int record)
8980 : : {
8981 : 120682 : return buildTemporary (tok, Mode, true, record);
8982 : : /* static analysis guarentees a RETURN statement will be used before here. */
8983 : : __builtin_unreachable ();
8984 : : }
8985 : :
8986 : :
8987 : : /*
8988 : : MakeComponentRef - use, sym, to reference, field, sym is returned.
8989 : : */
8990 : :
8991 : 120682 : extern "C" unsigned int SymbolTable_MakeComponentRef (unsigned int sym, unsigned int field)
8992 : : {
8993 : 120682 : SymbolTable_PtrToSymbol pSym;
8994 : 120682 : unsigned int high;
8995 : :
8996 : 120682 : pSym = GetPsym (sym);
8997 : 120682 : switch (pSym->SymbolType)
8998 : : {
8999 : 120682 : case SymbolTable_VarSym:
9000 : 120682 : if (! pSym->Var.IsTemp)
9001 : : {
9002 : 0 : M2Error_InternalError ((const char *) "variable must be a temporary", 28);
9003 : : }
9004 : 120682 : else if (pSym->Var.IsComponentRef)
9005 : : {
9006 : : /* avoid dangling else. */
9007 : 120682 : high = Indexing_HighIndice (pSym->Var.list);
9008 : 120682 : PutIntoIndex (&pSym->Var.list, high+1, field);
9009 : : }
9010 : : else
9011 : : {
9012 : : /* avoid dangling else. */
9013 : 0 : M2Error_InternalError ((const char *) "temporary is not a component reference", 38);
9014 : : }
9015 : 120682 : break;
9016 : :
9017 : :
9018 : 0 : default:
9019 : 0 : M2Error_InternalError ((const char *) "expecting a variable symbol", 27);
9020 : 120682 : break;
9021 : : }
9022 : 120682 : return sym;
9023 : : /* static analysis guarentees a RETURN statement will be used before here. */
9024 : : __builtin_unreachable ();
9025 : : }
9026 : :
9027 : :
9028 : : /*
9029 : : IsComponent - returns TRUE if symbol, sym, is a temporary and a component
9030 : : reference.
9031 : : */
9032 : :
9033 : 89136328 : extern "C" bool SymbolTable_IsComponent (unsigned int sym)
9034 : : {
9035 : 89136328 : SymbolTable_PtrToSymbol pSym;
9036 : :
9037 : 89136328 : pSym = GetPsym (sym);
9038 : 89136328 : switch (pSym->SymbolType)
9039 : : {
9040 : 2942256 : case SymbolTable_VarSym:
9041 : 2942256 : return pSym->Var.IsComponentRef;
9042 : : break;
9043 : :
9044 : :
9045 : : default:
9046 : : return false;
9047 : : break;
9048 : : }
9049 : : /* static analysis guarentees a RETURN statement will be used before here. */
9050 : : __builtin_unreachable ();
9051 : : }
9052 : :
9053 : :
9054 : : /*
9055 : : MakeTemporary - Makes a new temporary variable at the highest real scope.
9056 : : The addressing mode of the temporary is set to NoValue.
9057 : : */
9058 : :
9059 : 863650 : extern "C" unsigned int SymbolTable_MakeTemporary (unsigned int tok, SymbolTable_ModeOfAddr Mode)
9060 : : {
9061 : 863650 : tok = CheckTok (tok, (const char *) "temporary", 9);
9062 : 863650 : return buildTemporary (tok, Mode, false, SymbolTable_NulSym);
9063 : : /* static analysis guarentees a RETURN statement will be used before here. */
9064 : : __builtin_unreachable ();
9065 : : }
9066 : :
9067 : :
9068 : : /*
9069 : : MakeTemporaryFromExpression - makes a new temporary variable at the
9070 : : highest real scope. The addressing
9071 : : mode of the temporary is set and the
9072 : : type is determined by expressions, e.
9073 : : */
9074 : :
9075 : 0 : extern "C" unsigned int SymbolTable_MakeTemporaryFromExpression (unsigned int tok, unsigned int e, SymbolTable_ModeOfAddr mode)
9076 : : {
9077 : 0 : return SymbolTable_MakeTemporaryFromExpressions (tok, e, e, mode);
9078 : : /* static analysis guarentees a RETURN statement will be used before here. */
9079 : : __builtin_unreachable ();
9080 : : }
9081 : :
9082 : :
9083 : : /*
9084 : : MakeTemporaryFromExpressions - makes a new temporary variable at the
9085 : : highest real scope. The addressing
9086 : : mode of the temporary is set and the
9087 : : type is determined by expressions,
9088 : : e1 and e2.
9089 : : */
9090 : :
9091 : 53371 : extern "C" unsigned int SymbolTable_MakeTemporaryFromExpressions (unsigned int tok, unsigned int e1, unsigned int e2, SymbolTable_ModeOfAddr mode)
9092 : : {
9093 : 53371 : SymbolTable_PtrToSymbol pSym;
9094 : 53371 : DynamicStrings_String s;
9095 : 53371 : unsigned int t;
9096 : 53371 : unsigned int Sym;
9097 : :
9098 : 53371 : TemporaryNo += 1;
9099 : : /* Make the name */
9100 : 53371 : s = FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "_T%d", 4)), (const unsigned char *) &TemporaryNo, (sizeof (TemporaryNo)-1));
9101 : 53371 : if (mode == SymbolTable_ImmediateValue)
9102 : : {
9103 : 19991 : Sym = SymbolTable_MakeConstVar (tok, NameKey_makekey (DynamicStrings_string (s)));
9104 : 19991 : if (SymbolTable_IsConstructor (e1))
9105 : : {
9106 : 206 : SymbolTable_PutConstructor (Sym);
9107 : 206 : SymbolTable_PutConstructorFrom (Sym, e1);
9108 : : }
9109 : 19785 : else if (SymbolTable_IsConstructor (e2))
9110 : : {
9111 : : /* avoid dangling else. */
9112 : 12 : SymbolTable_PutConstructor (Sym);
9113 : 12 : SymbolTable_PutConstructorFrom (Sym, e2);
9114 : : }
9115 : : else
9116 : : {
9117 : : /* avoid dangling else. */
9118 : 19773 : SymbolTable_PutVar (Sym, M2Base_MixTypes (SymbolTable_GetType (e1), SymbolTable_GetType (e2), tok));
9119 : : }
9120 : 19991 : PutConstVarTemporary (Sym);
9121 : : }
9122 : : else
9123 : : {
9124 : 33380 : Sym = SymbolTable_MakeVar (tok, NameKey_makekey (DynamicStrings_string (s)));
9125 : 33380 : pSym = GetPsym (Sym);
9126 : 33380 : switch (pSym->SymbolType)
9127 : : {
9128 : 33380 : case SymbolTable_VarSym:
9129 : 33380 : pSym->Var.AddrMode = mode;
9130 : 33380 : pSym->Var.IsComponentRef = false;
9131 : 33380 : pSym->Var.IsTemp = true; /* Variable is a temporary var */
9132 : : /* Declared here */
9133 : 33380 : InitWhereDeclaredTok (tok, &pSym->Var.At);
9134 : 33380 : break;
9135 : :
9136 : :
9137 : 0 : default:
9138 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
9139 : 33380 : break;
9140 : : }
9141 : 33380 : t = M2Base_MixTypesDecl (e1, e2, SymbolTable_GetType (e1), SymbolTable_GetType (e2), tok);
9142 : 33272 : if (t != SymbolTable_NulSym)
9143 : : {
9144 : 33260 : M2Debug_Assert (! (SymbolTable_IsConstructor (t)));
9145 : 33260 : SymbolTable_PutVar (Sym, t);
9146 : : }
9147 : : }
9148 : 53263 : s = DynamicStrings_KillString (s);
9149 : 53263 : return Sym;
9150 : : /* static analysis guarentees a RETURN statement will be used before here. */
9151 : : __builtin_unreachable ();
9152 : : }
9153 : :
9154 : :
9155 : : /*
9156 : : PutMode - Puts the addressing mode, SymMode, into symbol Sym.
9157 : : The mode may only be altered if the mode
9158 : : is None.
9159 : : */
9160 : :
9161 : 5709460 : extern "C" void SymbolTable_PutMode (unsigned int Sym, SymbolTable_ModeOfAddr SymMode)
9162 : : {
9163 : 5709460 : SymbolTable_PtrToSymbol pSym;
9164 : :
9165 : 5709460 : pSym = GetPsym (Sym);
9166 : 5709460 : switch (pSym->SymbolType)
9167 : : {
9168 : : case SymbolTable_ErrorSym:
9169 : : break;
9170 : :
9171 : 5709460 : case SymbolTable_VarSym:
9172 : 5709460 : pSym->Var.AddrMode = SymMode;
9173 : 5709460 : break;
9174 : :
9175 : :
9176 : 0 : default:
9177 : 0 : M2Error_InternalError ((const char *) "Expecting VarSym", 16);
9178 : 5709460 : break;
9179 : : }
9180 : 5709460 : }
9181 : :
9182 : :
9183 : : /*
9184 : : GetMode - Returns the addressing mode of a symbol.
9185 : : */
9186 : :
9187 : 9642887 : extern "C" SymbolTable_ModeOfAddr SymbolTable_GetMode (unsigned int Sym)
9188 : : {
9189 : 9642887 : SymbolTable_PtrToSymbol pSym;
9190 : :
9191 : 9642887 : pSym = GetPsym (Sym);
9192 : 9642887 : switch (pSym->SymbolType)
9193 : : {
9194 : 12 : case SymbolTable_ErrorSym:
9195 : 12 : M2Error_ErrorAbort0 ((const char *) "", 0);
9196 : 8056840 : break;
9197 : :
9198 : 8056840 : case SymbolTable_VarSym:
9199 : 8056840 : return pSym->Var.AddrMode;
9200 : : break;
9201 : :
9202 : : case SymbolTable_ConstLitSym:
9203 : : return SymbolTable_ImmediateValue;
9204 : : break;
9205 : :
9206 : : case SymbolTable_ConstVarSym:
9207 : : return SymbolTable_ImmediateValue;
9208 : : break;
9209 : :
9210 : : case SymbolTable_ConstStringSym:
9211 : : return SymbolTable_ImmediateValue;
9212 : : break;
9213 : :
9214 : : case SymbolTable_EnumerationFieldSym:
9215 : : return SymbolTable_ImmediateValue;
9216 : : break;
9217 : :
9218 : : case SymbolTable_ProcedureSym:
9219 : : return SymbolTable_ImmediateValue;
9220 : : break;
9221 : :
9222 : : case SymbolTable_RecordFieldSym:
9223 : : return SymbolTable_ImmediateValue;
9224 : : break;
9225 : :
9226 : : case SymbolTable_VarientFieldSym:
9227 : : return SymbolTable_ImmediateValue;
9228 : : break;
9229 : :
9230 : : case SymbolTable_TypeSym:
9231 : : return SymbolTable_NoValue;
9232 : : break;
9233 : :
9234 : : case SymbolTable_ArraySym:
9235 : : return SymbolTable_NoValue;
9236 : : break;
9237 : :
9238 : : case SymbolTable_SubrangeSym:
9239 : : return SymbolTable_NoValue;
9240 : : break;
9241 : :
9242 : : case SymbolTable_EnumerationSym:
9243 : : return SymbolTable_NoValue;
9244 : : break;
9245 : :
9246 : : case SymbolTable_RecordSym:
9247 : : return SymbolTable_NoValue;
9248 : : break;
9249 : :
9250 : : case SymbolTable_PointerSym:
9251 : : return SymbolTable_NoValue;
9252 : : break;
9253 : :
9254 : : case SymbolTable_SetSym:
9255 : : return SymbolTable_NoValue;
9256 : : break;
9257 : :
9258 : : case SymbolTable_ProcTypeSym:
9259 : : return SymbolTable_NoValue;
9260 : : break;
9261 : :
9262 : : case SymbolTable_UnboundedSym:
9263 : : return SymbolTable_NoValue;
9264 : : break;
9265 : :
9266 : : case SymbolTable_UndefinedSym:
9267 : : return SymbolTable_NoValue;
9268 : 0 : break;
9269 : :
9270 : :
9271 : 0 : default:
9272 : 0 : M2Error_InternalError ((const char *) "not expecting this type", 23);
9273 : : break;
9274 : : }
9275 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
9276 : : __builtin_unreachable ();
9277 : : }
9278 : :
9279 : :
9280 : : /*
9281 : : StartScope - starts a block scope at Sym. Transparent determines
9282 : : whether the search for a symbol will look at the
9283 : : previous ScopeCallFrame if Sym does not contain the
9284 : : symbol that GetSym is searching.
9285 : :
9286 : : WITH statements are partially implemented by calling
9287 : : StartScope. Therefore we must retain the old Main from
9288 : : the previous ScopePtr when a record is added to the scope
9289 : : stack. (Main contains the symbol where all identifiers
9290 : : should be added.)
9291 : : */
9292 : :
9293 : 17795728 : extern "C" void SymbolTable_StartScope (unsigned int Sym)
9294 : : {
9295 : 17795728 : SymbolTable_PtrToCallFrame oCall;
9296 : 17795728 : SymbolTable_PtrToCallFrame pCall;
9297 : :
9298 : 17795728 : Sym = SymbolTable_SkipType (Sym);
9299 : : /*
9300 : : WriteString('New scope is: ') ; WriteKey(GetSymName(Sym)) ; WriteLn ;
9301 : : */
9302 : 17795728 : ScopePtr += 1;
9303 : 17795728 : if (Indexing_InBounds (ScopeCallFrame, ScopePtr))
9304 : : {
9305 : 17734150 : pCall = GetPcall (ScopePtr);
9306 : : }
9307 : : else
9308 : : {
9309 : 61578 : Storage_ALLOCATE ((void **) &pCall, sizeof (SymbolTable_CallFrame));
9310 : 61578 : Indexing_PutIndice (ScopeCallFrame, ScopePtr, reinterpret_cast <void *> (pCall));
9311 : : }
9312 : 17795728 : pCall->Start = ScopePtr-1; /* Previous ScopePtr value before StartScope */
9313 : 17795728 : pCall->Search = Sym;
9314 : : /* new symbols to ie temporary variables. */
9315 : 17795728 : if (SymbolTable_IsRecord (Sym))
9316 : : {
9317 : 22938 : oCall = GetPcall (ScopePtr-1);
9318 : 22938 : pCall->Main = oCall->Main;
9319 : : }
9320 : : else
9321 : : {
9322 : 17772784 : pCall->Main = Sym;
9323 : 17772784 : PlaceMajorScopesEnumerationListOntoStack (Sym);
9324 : : }
9325 : 17795722 : }
9326 : :
9327 : :
9328 : : /*
9329 : : EndScope - ends a block scope started by StartScope. The current
9330 : : head of the symbol scope reverts back to the symbol
9331 : : which was the Head of the symbol scope before the
9332 : : last StartScope was called.
9333 : : */
9334 : :
9335 : 17781172 : extern "C" void SymbolTable_EndScope (void)
9336 : : {
9337 : 17781172 : SymbolTable_PtrToCallFrame pCall;
9338 : :
9339 : : /*
9340 : : ; WriteString('EndScope - ending scope: ') ;
9341 : : pCall := GetPcall(ScopePtr) ;
9342 : : ; WriteKey(GetSymName(pCall^.Search)) ; WriteLn ;
9343 : : */
9344 : 17781172 : pCall = GetPcall (ScopePtr);
9345 : : /* ; DisplayScopes */
9346 : 17781172 : ScopePtr = pCall->Start;
9347 : 17781172 : }
9348 : :
9349 : :
9350 : : /*
9351 : : PseudoScope - starts a pseudo scope at Sym.
9352 : : We always connect parent up to the last scope,
9353 : : to determine the transparancy of a scope we call
9354 : : TransparentScope.
9355 : :
9356 : : A Pseudo scope has no end block,
9357 : : but is terminated when the next EndScope is used.
9358 : : The function of the pseudo scope is to provide an
9359 : : automatic mechanism to solve enumeration types.
9360 : : A declared enumeration type is a Pseudo scope and
9361 : : identifiers used with the name of an enumeration
9362 : : type field will find the enumeration symbol by
9363 : : the scoping algorithm.
9364 : : */
9365 : :
9366 : 443746 : extern "C" void SymbolTable_PseudoScope (unsigned int Sym)
9367 : : {
9368 : 443746 : SymbolTable_PtrToCallFrame oCall;
9369 : 443746 : SymbolTable_PtrToCallFrame pCall;
9370 : :
9371 : 443746 : if (SymbolTable_IsEnumeration (Sym))
9372 : : {
9373 : 443746 : ScopePtr += 1;
9374 : 443746 : if (Indexing_InBounds (ScopeCallFrame, ScopePtr))
9375 : : {
9376 : 427168 : pCall = GetPcall (ScopePtr);
9377 : : }
9378 : : else
9379 : : {
9380 : 16578 : Storage_ALLOCATE ((void **) &pCall, sizeof (SymbolTable_CallFrame));
9381 : 16578 : Indexing_PutIndice (ScopeCallFrame, ScopePtr, reinterpret_cast <void *> (pCall));
9382 : : }
9383 : 443746 : oCall = GetPcall (ScopePtr-1);
9384 : 443746 : pCall->Main = oCall->Main;
9385 : 443746 : pCall->Start = oCall->Start;
9386 : 443746 : pCall->Search = Sym;
9387 : : }
9388 : : else
9389 : : {
9390 : 0 : M2Error_InternalError ((const char *) "expecting EnumerationSym", 24);
9391 : : }
9392 : 443746 : }
9393 : :
9394 : :
9395 : : /*
9396 : : GetCurrentScope - returns the symbol who is responsible for the current
9397 : : scope. Note that it ignore pseudo scopes.
9398 : : */
9399 : :
9400 : 26094057 : extern "C" unsigned int SymbolTable_GetCurrentScope (void)
9401 : : {
9402 : 26094057 : SymbolTable_PtrToCallFrame pCall;
9403 : :
9404 : 26094057 : pCall = GetPcall (ScopePtr);
9405 : 26094057 : return pCall->Main;
9406 : : /* static analysis guarentees a RETURN statement will be used before here. */
9407 : : __builtin_unreachable ();
9408 : : }
9409 : :
9410 : :
9411 : : /*
9412 : : IsDeclaredIn - returns TRUE if a symbol was declared in, scope.
9413 : : */
9414 : :
9415 : 188238 : extern "C" bool SymbolTable_IsDeclaredIn (unsigned int scope, unsigned int sym)
9416 : : {
9417 : 188238 : unsigned int s;
9418 : :
9419 : 188238 : s = SymbolTable_GetScope (sym);
9420 : 376476 : while (s != scope)
9421 : : {
9422 : 1328 : if ((((s == SymbolTable_NulSym) || (SymbolTable_IsProcedure (s))) || (SymbolTable_IsModule (s))) || (SymbolTable_IsDefImp (s)))
9423 : : {
9424 : 1328 : return false;
9425 : : }
9426 : : else
9427 : : {
9428 : 0 : s = SymbolTable_GetScope (s);
9429 : : }
9430 : : }
9431 : : return true;
9432 : : /* static analysis guarentees a RETURN statement will be used before here. */
9433 : : __builtin_unreachable ();
9434 : : }
9435 : :
9436 : :
9437 : : /*
9438 : : SetCurrentModule - Used to set the CurrentModule to a symbol, Sym.
9439 : : This Sym must represent the module name of the
9440 : : file currently being compiled.
9441 : : */
9442 : :
9443 : 935283 : extern "C" void SymbolTable_SetCurrentModule (unsigned int Sym)
9444 : : {
9445 : 935283 : CurrentModule = Sym;
9446 : 935283 : }
9447 : :
9448 : :
9449 : : /*
9450 : : SetFileModule - Used to set the FileModule to a symbol, Sym.
9451 : : This Sym must represent the current program module
9452 : : file which is being parsed.
9453 : : */
9454 : :
9455 : 890919 : extern "C" void SymbolTable_SetFileModule (unsigned int Sym)
9456 : : {
9457 : 890919 : FileModule = Sym;
9458 : 890919 : }
9459 : :
9460 : :
9461 : : /*
9462 : : SetMainModule - Used to set the MainModule to a symbol, Sym.
9463 : : This Sym must represent the main module which was
9464 : : envoked by the user to be compiled.
9465 : : */
9466 : :
9467 : 14225 : extern "C" void SymbolTable_SetMainModule (unsigned int Sym)
9468 : : {
9469 : 14225 : MainModule = Sym;
9470 : 14225 : }
9471 : :
9472 : :
9473 : : /*
9474 : : CheckAnonymous - checks to see whether the name is NulName and if so
9475 : : it creates a unique anonymous name.
9476 : : */
9477 : :
9478 : 1110661 : extern "C" NameKey_Name SymbolTable_CheckAnonymous (NameKey_Name name)
9479 : : {
9480 : 1110661 : if (name == NameKey_NulName)
9481 : : {
9482 : 48852 : AnonymousName += 1;
9483 : 48852 : name = NameKey_makekey (DynamicStrings_string (DynamicStrings_Mark (FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__anon%d", 8)), (const unsigned char *) &AnonymousName, (sizeof (AnonymousName)-1)))));
9484 : : }
9485 : 1110661 : return name;
9486 : : /* static analysis guarentees a RETURN statement will be used before here. */
9487 : : __builtin_unreachable ();
9488 : : }
9489 : :
9490 : :
9491 : : /*
9492 : : IsNameAnonymous - returns TRUE if the symbol, sym, has an anonymous name
9493 : : or no name.
9494 : : */
9495 : :
9496 : 52047 : extern "C" bool SymbolTable_IsNameAnonymous (unsigned int sym)
9497 : : {
9498 : 52047 : typedef struct IsNameAnonymous__T8_a IsNameAnonymous__T8;
9499 : :
9500 : 52047 : struct IsNameAnonymous__T8_a { char array[5+1]; };
9501 : 52047 : IsNameAnonymous__T8 a;
9502 : 52047 : NameKey_Name n;
9503 : :
9504 : 52047 : n = SymbolTable_GetSymName (sym);
9505 : 52047 : if (n == NameKey_NulName)
9506 : : {
9507 : : return true;
9508 : : }
9509 : : else
9510 : : {
9511 : 50991 : NameKey_GetKey (n, (char *) &a.array[0], 5);
9512 : 50991 : return StrLib_StrEqual ((const char *) &a.array[0], 5, (const char *) "__anon", 6);
9513 : : }
9514 : : /* static analysis guarentees a RETURN statement will be used before here. */
9515 : : __builtin_unreachable ();
9516 : : }
9517 : :
9518 : :
9519 : : /*
9520 : : NoOfVariables - returns the number of variables in scope. The scope maybe
9521 : : a procedure, module or defimp scope.
9522 : : */
9523 : :
9524 : 30 : extern "C" unsigned int SymbolTable_NoOfVariables (unsigned int scope)
9525 : : {
9526 : 30 : SymbolTable_PtrToSymbol pSym;
9527 : :
9528 : 30 : if (SymbolTable_IsProcedure (scope))
9529 : : {
9530 : 30 : return SymbolTable_NoOfLocalVar (scope);
9531 : : }
9532 : 0 : else if (SymbolTable_IsModule (scope))
9533 : : {
9534 : : /* avoid dangling else. */
9535 : 0 : pSym = GetPsym (scope);
9536 : 0 : switch (pSym->SymbolType)
9537 : : {
9538 : 0 : case SymbolTable_ModuleSym:
9539 : 0 : return Lists_NoOfItemsInList (pSym->Module.ListOfVars);
9540 : 0 : break;
9541 : :
9542 : :
9543 : 0 : default:
9544 : 0 : M2Error_InternalError ((const char *) "expecting module symbol", 23);
9545 : 0 : break;
9546 : : }
9547 : : }
9548 : 0 : else if (SymbolTable_IsDefImp (scope))
9549 : : {
9550 : : /* avoid dangling else. */
9551 : 0 : pSym = GetPsym (scope);
9552 : 0 : switch (pSym->SymbolType)
9553 : : {
9554 : 0 : case SymbolTable_DefImpSym:
9555 : 0 : return Lists_NoOfItemsInList (pSym->DefImp.ListOfVars);
9556 : 0 : break;
9557 : :
9558 : :
9559 : 0 : default:
9560 : 0 : M2Error_InternalError ((const char *) "expecting defimp symbol", 23);
9561 : 0 : break;
9562 : : }
9563 : : }
9564 : : else
9565 : : {
9566 : : /* avoid dangling else. */
9567 : 0 : M2Error_InternalError ((const char *) "expecting procedure, module or defimp symbol", 44);
9568 : : }
9569 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
9570 : : __builtin_unreachable ();
9571 : : }
9572 : :
9573 : :
9574 : : /*
9575 : : MakeModule - creates a module sym with ModuleName. It returns the
9576 : : symbol index.
9577 : : */
9578 : :
9579 : 25468 : extern "C" unsigned int SymbolTable_MakeModule (unsigned int tok, NameKey_Name ModuleName)
9580 : : {
9581 : 25468 : SymbolTable_PtrToSymbol pSym;
9582 : 25468 : SymbolTable_PtrToCallFrame pCall;
9583 : 25468 : unsigned int Sym;
9584 : :
9585 : : /*
9586 : : Make a new symbol since we are at the outer scope level.
9587 : : DeclareSym examines the current scope level for any symbols
9588 : : that have the correct name, but are yet undefined.
9589 : : Therefore we must not call DeclareSym but create a symbol
9590 : : directly.
9591 : : */
9592 : 25468 : NewSym (&Sym);
9593 : 25468 : pSym = GetPsym (Sym);
9594 : 25468 : pSym->SymbolType = SymbolTable_ModuleSym;
9595 : 25468 : pSym->Module.name = ModuleName; /* Index into name array, name */
9596 : : /* of record field. */
9597 : 25468 : pSym->Module.libname = NameKey_NulName; /* Library association. */
9598 : 25468 : InitCtor (&pSym->Module.ctors); /* Init all ctor functions. */
9599 : 25468 : Lists_InitList (&pSym->Module.ModListOfDep); /* Vector of SymDependency. */
9600 : 25468 : SymbolKey_InitTree (&pSym->Module.LocalSymbols); /* The LocalSymbols hold all the */
9601 : : /* END WeAreHere. */
9602 : 25468 : SymbolKey_InitTree (&pSym->Module.ExportTree); /* Holds all the exported */
9603 : : /* deleted at the end of Pass 1. */
9604 : 25468 : SymbolKey_InitTree (&pSym->Module.ImportTree); /* Contains all IMPORTed */
9605 : : /* identifiers. */
9606 : 25468 : Lists_InitList (&pSym->Module.IncludeList); /* Contains all included symbols */
9607 : : /* modulename.Symbol */
9608 : 25468 : SymbolKey_InitTree (&pSym->Module.ExportUndeclared); /* ExportUndeclared contains all */
9609 : : /* been declared. */
9610 : 25468 : Lists_InitList (&pSym->Module.EnumerationScopeList); /* Enumeration scope list which */
9611 : : /* Outer Module. */
9612 : 25468 : SymbolKey_InitTree (&pSym->Module.NamedObjects); /* Names of all items declared. */
9613 : 25468 : SymbolKey_InitTree (&pSym->Module.NamedImports); /* Names of items imported. */
9614 : 25468 : SymbolKey_InitTree (&pSym->Module.WhereImported); /* Sym to TokenNo where import */
9615 : : /* occurs. Error message use. */
9616 : 25468 : pSym->Module.Priority = SymbolTable_NulSym; /* Priority of the module. This */
9617 : : /* is an index to a constant. */
9618 : 25468 : SymbolKey_InitTree (&pSym->Module.Unresolved); /* All symbols currently */
9619 : : /* unresolved in this module. */
9620 : 25468 : pSym->Module.StartQuad = 0; /* Signify the initialization */
9621 : : /* code. */
9622 : 25468 : pSym->Module.EndQuad = 0;
9623 : : /* goto quad. */
9624 : 25468 : pSym->Module.StartFinishQuad = 0; /* Signify the finalization */
9625 : : /* code. */
9626 : 25468 : pSym->Module.EndFinishQuad = 0; /* should point to a finish */
9627 : 25468 : pSym->Module.FinallyFunction = NULL; /* The GCC function for finally */
9628 : 25468 : pSym->Module.ExceptionFinally = false; /* does it have an exception? */
9629 : 25468 : pSym->Module.ExceptionBlock = false; /* does it have an exception? */
9630 : 25468 : pSym->Module.ModLink = GetLink (); /* Is this parsed for linkage? */
9631 : 25468 : pSym->Module.Builtin = false; /* Is the module builtin? */
9632 : 25468 : Lists_InitList (&pSym->Module.ListOfVars); /* List of variables in this */
9633 : : /* scope. */
9634 : 25468 : Lists_InitList (&pSym->Module.ListOfProcs); /* List of all procedures */
9635 : : /* declared within this module. */
9636 : 25468 : Lists_InitList (&pSym->Module.ListOfModules); /* List of all inner modules. */
9637 : 25468 : InitWhereDeclaredTok (tok, &pSym->Module.At); /* Where symbol declared. */
9638 : 25468 : InitWhereFirstUsedTok (tok, &pSym->Module.At); /* Where symbol first used. */
9639 : 25468 : pCall = GetPcall (ScopePtr); /* Where symbol first used. */
9640 : 25468 : if (pCall->Main == (SymbolTable_GetBaseModule ()))
9641 : : {
9642 : 25468 : pSym->Module.Scope = SymbolTable_NulSym;
9643 : : }
9644 : : else
9645 : : {
9646 : 0 : pSym->Module.Scope = pCall->Main;
9647 : : }
9648 : 25468 : pSym->Module.errorScope = M2Error_GetCurrentErrorScope (); /* Title error scope. */
9649 : 25468 : SymbolKey_PutSymKey (ModuleTree, ModuleName, Sym); /* Title error scope. */
9650 : 25468 : return Sym;
9651 : : /* static analysis guarentees a RETURN statement will be used before here. */
9652 : : __builtin_unreachable ();
9653 : : }
9654 : :
9655 : :
9656 : : /*
9657 : : MakeDefImp - creates a definition and implementation module sym
9658 : : with name DefImpName. It returns the symbol index.
9659 : : */
9660 : :
9661 : 128626 : extern "C" unsigned int SymbolTable_MakeDefImp (unsigned int tok, NameKey_Name DefImpName)
9662 : : {
9663 : 128626 : SymbolTable_PtrToSymbol pSym;
9664 : 128626 : unsigned int Sym;
9665 : :
9666 : : /* tok := CheckTok (tok, 'defimp') ; */
9667 : 128626 : NewSym (&Sym);
9668 : 128626 : pSym = GetPsym (Sym);
9669 : 128626 : pSym->SymbolType = SymbolTable_DefImpSym;
9670 : 128626 : pSym->DefImp.name = DefImpName; /* Index into name array, name */
9671 : : /* of record field. */
9672 : 128626 : pSym->DefImp.libname = NameKey_NulName; /* Library association. */
9673 : 128626 : InitCtor (&pSym->DefImp.ctors);
9674 : : /* Init all ctor functions. */
9675 : 128626 : Lists_InitList (&pSym->DefImp.DefListOfDep); /* Vector of SymDependency. */
9676 : 128626 : Lists_InitList (&pSym->DefImp.ModListOfDep); /* Vector of SymDependency. */
9677 : 128626 : SymbolKey_InitTree (&pSym->DefImp.ExportQualifiedTree);
9678 : : /* deleted at the end of Pass 1. */
9679 : 128626 : SymbolKey_InitTree (&pSym->DefImp.ExportUnQualifiedTree);
9680 : : /* deleted at the end of Pass 1. */
9681 : 128626 : SymbolKey_InitTree (&pSym->DefImp.ExportRequest); /* Contains all identifiers that */
9682 : : /* this list. */
9683 : 128626 : SymbolKey_InitTree (&pSym->DefImp.ImportTree); /* Contains all IMPORTed */
9684 : : /* identifiers. */
9685 : 128626 : Lists_InitList (&pSym->DefImp.IncludeList); /* Contains all included symbols */
9686 : : /* modulename.Symbol */
9687 : 128626 : Lists_InitList (&pSym->DefImp.DefIncludeList); /* Contains all included symbols */
9688 : : /* in the definition module only */
9689 : 128626 : SymbolKey_InitTree (&pSym->DefImp.ExportUndeclared); /* ExportUndeclared contains all */
9690 : : /* been declared. */
9691 : 128626 : SymbolKey_InitTree (&pSym->DefImp.NeedToBeImplemented);
9692 : : /* implemented. */
9693 : 128626 : SymbolKey_InitTree (&pSym->DefImp.LocalSymbols); /* The LocalSymbols hold all the */
9694 : : /* END WeAreHere. */
9695 : 128626 : Lists_InitList (&pSym->DefImp.EnumerationScopeList);
9696 : : /* visable within this scope. */
9697 : 128626 : SymbolKey_InitTree (&pSym->DefImp.NamedObjects); /* names of all items declared. */
9698 : 128626 : SymbolKey_InitTree (&pSym->DefImp.NamedImports); /* Names of items imported. */
9699 : 128626 : SymbolKey_InitTree (&pSym->DefImp.WhereImported); /* Sym to TokenNo where import */
9700 : : /* occurs. Error message use. */
9701 : 128626 : pSym->DefImp.Priority = SymbolTable_NulSym; /* Priority of the module. This */
9702 : : /* is an index to a constant. */
9703 : 128626 : SymbolKey_InitTree (&pSym->DefImp.Unresolved); /* All symbols currently */
9704 : : /* unresolved in this module. */
9705 : 128626 : pSym->DefImp.StartQuad = 0; /* Signify the initialization */
9706 : : /* code. */
9707 : 128626 : pSym->DefImp.EndQuad = 0; /* EndQuad should point to a */
9708 : : /* goto quad. */
9709 : 128626 : pSym->DefImp.StartFinishQuad = 0; /* Signify the finalization */
9710 : : /* code. */
9711 : 128626 : pSym->DefImp.EndFinishQuad = 0; /* should point to a finish */
9712 : 128626 : pSym->DefImp.FinallyFunction = NULL; /* The GCC function for finally */
9713 : 128626 : pSym->DefImp.ExceptionFinally = false; /* does it have an exception? */
9714 : 128626 : pSym->DefImp.ExceptionBlock = false; /* does it have an exception? */
9715 : 128626 : pSym->DefImp.ContainsHiddenType = false; /* True if this module */
9716 : : /* implements a hidden type. */
9717 : 128626 : pSym->DefImp.ContainsBuiltin = false; /* Does module define a builtin */
9718 : : /* procedure? */
9719 : 128626 : pSym->DefImp.ForC = false; /* Is it a definition for "C" */
9720 : 128626 : pSym->DefImp.NeedExportList = false; /* Must user supply export list? */
9721 : 128626 : pSym->DefImp.DefLink = GetLink (); /* Is the def/mod file only */
9722 : 128626 : pSym->DefImp.ModLink = GetLink (); /* parsed for linkage? */
9723 : 128626 : pSym->DefImp.Builtin = false; /* Is the module builtin? */
9724 : 128626 : Lists_InitList (&pSym->DefImp.ListOfVars); /* List of variables in this */
9725 : : /* scope. */
9726 : 128626 : Lists_InitList (&pSym->DefImp.ListOfProcs); /* List of all procedures */
9727 : : /* declared within this module. */
9728 : 128626 : Lists_InitList (&pSym->DefImp.ListOfModules); /* List of all inner modules. */
9729 : 128626 : InitWhereDeclaredTok (tok, &pSym->DefImp.At); /* Where symbol declared. */
9730 : 128626 : InitWhereFirstUsedTok (tok, &pSym->DefImp.At); /* Where symbol first used. */
9731 : 128626 : pSym->DefImp.errorScope = M2Error_GetCurrentErrorScope (); /* Title error scope. */
9732 : 128626 : SymbolKey_PutSymKey (ModuleTree, DefImpName, Sym); /* Title error scope. */
9733 : 128626 : return Sym;
9734 : : /* static analysis guarentees a RETURN statement will be used before here. */
9735 : : __builtin_unreachable ();
9736 : : }
9737 : :
9738 : :
9739 : : /*
9740 : : MakeInnerModule - creates an inner module sym with ModuleName. It returns the
9741 : : symbol index.
9742 : : */
9743 : :
9744 : 420 : extern "C" unsigned int SymbolTable_MakeInnerModule (unsigned int tok, NameKey_Name ModuleName)
9745 : : {
9746 : 420 : SymbolTable_PtrToSymbol pSym;
9747 : 420 : unsigned int Sym;
9748 : :
9749 : 420 : Sym = DeclareSym (tok, ModuleName);
9750 : 420 : if (! (SymbolTable_IsError (Sym)))
9751 : : {
9752 : 420 : pSym = GetPsym (Sym);
9753 : 420 : pSym->SymbolType = SymbolTable_ModuleSym;
9754 : 420 : pSym->Module.name = ModuleName; /* Index into name array, name */
9755 : : /* of record field. */
9756 : 420 : pSym->Module.libname = NameKey_NulName; /* Library association. */
9757 : 420 : InitCtor (&pSym->Module.ctors); /* Init all ctor functions. */
9758 : 420 : SymbolKey_InitTree (&pSym->Module.LocalSymbols);
9759 : : /* END WeAreHere. */
9760 : 420 : SymbolKey_InitTree (&pSym->Module.ExportTree); /* Holds all the exported */
9761 : : /* deleted at the end of Pass 1. */
9762 : 420 : SymbolKey_InitTree (&pSym->Module.ImportTree); /* Contains all IMPORTed */
9763 : : /* identifiers. */
9764 : 420 : Lists_InitList (&pSym->Module.IncludeList); /* Contains all included symbols */
9765 : : /* modulename.Symbol */
9766 : 420 : SymbolKey_InitTree (&pSym->Module.ExportUndeclared); /* ExportUndeclared contains all */
9767 : : /* been declared. */
9768 : 420 : Lists_InitList (&pSym->Module.EnumerationScopeList); /* Enumeration scope list which */
9769 : : /* visable within this scope. */
9770 : 420 : SymbolKey_InitTree (&pSym->Module.NamedObjects); /* Names of all items declared. */
9771 : 420 : SymbolKey_InitTree (&pSym->Module.NamedImports); /* Names of items imported. */
9772 : 420 : SymbolKey_InitTree (&pSym->Module.WhereImported); /* Sym to TokenNo where import */
9773 : : /* occurs. Error message use. */
9774 : 420 : pSym->Module.Priority = SymbolTable_NulSym; /* Priority of the module. This */
9775 : : /* is an index to a constant. */
9776 : 420 : SymbolKey_InitTree (&pSym->Module.Unresolved); /* All symbols currently */
9777 : : /* unresolved in this module. */
9778 : 420 : pSym->Module.StartQuad = 0; /* Signify the initialization */
9779 : : /* code. */
9780 : 420 : pSym->Module.EndQuad = 0; /* EndQuad should point to a */
9781 : : /* goto quad. */
9782 : 420 : pSym->Module.StartFinishQuad = 0; /* Signify the finalization */
9783 : : /* code. */
9784 : 420 : pSym->Module.EndFinishQuad = 0; /* should point to a finish */
9785 : 420 : pSym->Module.FinallyFunction = NULL; /* The GCC function for finally */
9786 : 420 : pSym->Module.ExceptionFinally = false; /* does it have an exception? */
9787 : 420 : pSym->Module.ExceptionBlock = false; /* does it have an exception? */
9788 : 420 : pSym->Module.ModLink = GetLink (); /* Is this parsed for linkage? */
9789 : 420 : Lists_InitList (&pSym->Module.ListOfVars); /* List of variables in this */
9790 : : /* scope. */
9791 : 420 : Lists_InitList (&pSym->Module.ListOfProcs); /* List of all procedures */
9792 : : /* declared within this module. */
9793 : 420 : Lists_InitList (&pSym->Module.ListOfModules); /* List of all inner modules. */
9794 : 420 : InitWhereDeclaredTok (tok, &pSym->Module.At); /* Where symbol declared. */
9795 : 420 : InitWhereFirstUsedTok (tok, &pSym->Module.At); /* Where symbol first used. */
9796 : 420 : if ((SymbolTable_GetCurrentScope ()) == (SymbolTable_GetBaseModule ())) /* Where symbol first used. */
9797 : : {
9798 : 0 : pSym->Module.Scope = SymbolTable_NulSym;
9799 : : }
9800 : : else
9801 : : {
9802 : 420 : pSym->Module.Scope = SymbolTable_GetCurrentScope ();
9803 : 420 : AddModuleToParent (Sym, pSym->Module.Scope);
9804 : : }
9805 : 420 : pSym->Module.errorScope = M2Error_GetCurrentErrorScope (); /* Title error scope. */
9806 : 420 : AddSymToScope (Sym, ModuleName); /* Title error scope. */
9807 : : }
9808 : 420 : return Sym;
9809 : : /* static analysis guarentees a RETURN statement will be used before here. */
9810 : : __builtin_unreachable ();
9811 : : }
9812 : :
9813 : :
9814 : : /*
9815 : : MakeProcedure - creates a procedure sym with name. It returns
9816 : : the symbol index.
9817 : : */
9818 : :
9819 : 3257143 : extern "C" unsigned int SymbolTable_MakeProcedure (unsigned int tok, NameKey_Name ProcedureName)
9820 : : {
9821 : 3257143 : SymbolTable_PtrToSymbol pSym;
9822 : 3257143 : unsigned int Sym;
9823 : 3257143 : SymbolTable_ProcedureKind kind;
9824 : :
9825 : 3257143 : tok = CheckTok (tok, (const char *) "procedure", 9);
9826 : 3257143 : Sym = DeclareSym (tok, ProcedureName);
9827 : 3257143 : if (Sym == BreakSym)
9828 : : {
9829 : 3257143 : stop ();
9830 : : }
9831 : 3257143 : if (! (SymbolTable_IsError (Sym)))
9832 : : {
9833 : 3257143 : pSym = GetPsym (Sym);
9834 : 3257143 : pSym->SymbolType = SymbolTable_ProcedureSym;
9835 : 3257143 : pSym->Procedure.name = ProcedureName;
9836 : 13028572 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
9837 : : {
9838 : 9771429 : InitProcedureDeclaration (&pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure]);
9839 : 9771429 : Lists_InitList (&pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam);
9840 : : }
9841 : 3257143 : pSym->Procedure.OptArgInit = SymbolTable_NulSym; /* The optional arg default */
9842 : : /* value. */
9843 : 3257143 : pSym->Procedure.IsExtern = false; /* Make this procedure external. */
9844 : 3257143 : pSym->Procedure.IsPublic = false; /* Make this procedure visible. */
9845 : 3257143 : pSym->Procedure.IsCtor = false; /* Is this procedure a ctor? */
9846 : 3257143 : pSym->Procedure.IsMonoName = false; /* Overrides module name prefix. */
9847 : 3257143 : pSym->Procedure.BuildProcType = true; /* Are we building the */
9848 : : /* proctype associated with sym? */
9849 : 3257143 : pSym->Procedure.Scope = SymbolTable_GetCurrentScope (); /* Scope of procedure. */
9850 : 3257143 : SymbolKey_InitTree (&pSym->Procedure.Unresolved); /* All symbols currently */
9851 : : /* unresolved in this procedure. */
9852 : 3257143 : pSym->Procedure.ScopeQuad = 0; /* Index into list of quads, */
9853 : 3257143 : pSym->Procedure.StartQuad = 0; /* defining the scope, start and */
9854 : 3257143 : pSym->Procedure.EndQuad = 0; /* end of the procedure. */
9855 : 3257143 : pSym->Procedure.Reachable = false; /* Procedure not known to be */
9856 : : /* reachable. */
9857 : 3257143 : pSym->Procedure.SavePriority = false; /* Does procedure need to save */
9858 : : /* and restore interrupts? */
9859 : 3257143 : pSym->Procedure.ReturnType = SymbolTable_NulSym; /* Not a function yet! */
9860 : : /* The ProcType equivalent. */
9861 : 3257143 : pSym->Procedure.ProcedureType = SymbolTable_MakeProcType (tok, NameKey_NulName);
9862 : 3257143 : SymbolKey_InitTree (&pSym->Procedure.LocalSymbols);
9863 : 3257143 : Lists_InitList (&pSym->Procedure.EnumerationScopeList);
9864 : : /* visable within this scope. */
9865 : 3257143 : SymbolKey_InitTree (&pSym->Procedure.NamedObjects); /* Names of all items declared. */
9866 : 3257143 : Lists_InitList (&pSym->Procedure.ListOfVars);
9867 : : /* scope. */
9868 : 3257143 : Lists_InitList (&pSym->Procedure.ListOfProcs); /* List of all procedures */
9869 : : /* procedure. */
9870 : 3257143 : Lists_InitList (&pSym->Procedure.ListOfModules); /* List of all inner modules. */
9871 : 3257143 : pSym->Procedure.ExceptionFinally = false; /* does it have an exception? */
9872 : 3257143 : pSym->Procedure.ExceptionBlock = false; /* does it have an exception? */
9873 : 3257143 : pSym->Procedure.IsBuiltin = false; /* Was it declared __BUILTIN__ ? */
9874 : 3257143 : pSym->Procedure.BuiltinName = NameKey_NulName; /* name of equivalent builtin */
9875 : 3257143 : pSym->Procedure.IsInline = false; /* Was is declared __INLINE__ ? */
9876 : 3257143 : pSym->Procedure.Size = M2ALU_InitValue (); /* Activation record size. */
9877 : 3257143 : pSym->Procedure.TotalParamSize = M2ALU_InitValue (); /* size of all parameters. */
9878 : 3257143 : pSym->Procedure.Begin = 0; /* token number for BEGIN */
9879 : 3257143 : pSym->Procedure.End = 0; /* token number for END */
9880 : 3257143 : InitWhereDeclaredTok (tok, &pSym->Procedure.At); /* Where the symbol was declared. */
9881 : 3257143 : pSym->Procedure.errorScope = M2Error_GetCurrentErrorScope (); /* Title error scope. */
9882 : : /* Now add this procedure to the symbol table of the current scope */
9883 : 3257143 : AddSymToScope (Sym, ProcedureName);
9884 : 3257143 : AddProcedureToList (SymbolTable_GetCurrentScope (), Sym);
9885 : : }
9886 : 3257143 : return Sym;
9887 : : /* static analysis guarentees a RETURN statement will be used before here. */
9888 : : __builtin_unreachable ();
9889 : : }
9890 : :
9891 : :
9892 : : /*
9893 : : MakeProcedureCtorExtern - creates an extern ctor procedure
9894 : : */
9895 : :
9896 : 0 : extern "C" unsigned int SymbolTable_MakeProcedureCtorExtern (unsigned int tokenno, NameKey_Name libname, NameKey_Name modulename)
9897 : : {
9898 : 0 : unsigned int ctor;
9899 : :
9900 : 0 : ctor = SymbolTable_MakeProcedure (tokenno, GenName (libname, (const char *) "_M2_", 4, modulename, (const char *) "_ctor", 5));
9901 : 0 : SymbolTable_PutExtern (ctor, true);
9902 : 0 : return ctor;
9903 : : /* static analysis guarentees a RETURN statement will be used before here. */
9904 : : __builtin_unreachable ();
9905 : : }
9906 : :
9907 : :
9908 : : /*
9909 : : PutLibName - places libname into defimp or module sym.
9910 : : */
9911 : :
9912 : 179085 : extern "C" void SymbolTable_PutLibName (unsigned int sym, NameKey_Name libname)
9913 : : {
9914 : 179085 : SymbolTable_PtrToSymbol pSym;
9915 : :
9916 : 358170 : M2Debug_Assert ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)));
9917 : 179085 : pSym = GetPsym (sym);
9918 : 179085 : switch (pSym->SymbolType)
9919 : : {
9920 : 167849 : case SymbolTable_DefImpSym:
9921 : 167849 : pSym->DefImp.libname = libname;
9922 : 167849 : break;
9923 : :
9924 : 11236 : case SymbolTable_ModuleSym:
9925 : 11236 : pSym->Module.libname = libname;
9926 : 11236 : break;
9927 : :
9928 : :
9929 : 0 : default:
9930 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
9931 : 179085 : break;
9932 : : }
9933 : 179085 : }
9934 : :
9935 : :
9936 : : /*
9937 : : GetLibName - returns libname associated with a defimp or module sym.
9938 : : */
9939 : :
9940 : 3309494 : extern "C" NameKey_Name SymbolTable_GetLibName (unsigned int sym)
9941 : : {
9942 : 3309494 : SymbolTable_PtrToSymbol pSym;
9943 : :
9944 : 6618988 : M2Debug_Assert ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)));
9945 : 3309494 : pSym = GetPsym (sym);
9946 : 3309494 : switch (pSym->SymbolType)
9947 : : {
9948 : 3221380 : case SymbolTable_DefImpSym:
9949 : 3221380 : return pSym->DefImp.libname;
9950 : 88114 : break;
9951 : :
9952 : 88114 : case SymbolTable_ModuleSym:
9953 : 88114 : return pSym->Module.libname;
9954 : 0 : break;
9955 : :
9956 : :
9957 : 0 : default:
9958 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
9959 : : break;
9960 : : }
9961 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
9962 : : __builtin_unreachable ();
9963 : : }
9964 : :
9965 : :
9966 : : /*
9967 : : PutMonoName - changes the IsMonoName boolean inside the procedure.
9968 : : */
9969 : :
9970 : 342153 : extern "C" void SymbolTable_PutMonoName (unsigned int sym, bool value)
9971 : : {
9972 : 342153 : SymbolTable_PtrToSymbol pSym;
9973 : :
9974 : 342153 : pSym = GetPsym (sym);
9975 : 342153 : switch (pSym->SymbolType)
9976 : : {
9977 : 342153 : case SymbolTable_ProcedureSym:
9978 : 342153 : pSym->Procedure.IsMonoName = value;
9979 : 342153 : break;
9980 : :
9981 : :
9982 : 0 : default:
9983 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
9984 : 342153 : break;
9985 : : }
9986 : 342153 : }
9987 : :
9988 : :
9989 : : /*
9990 : : IsMonoName - returns the public boolean associated with a procedure.
9991 : : */
9992 : :
9993 : 2169739 : extern "C" bool SymbolTable_IsMonoName (unsigned int sym)
9994 : : {
9995 : 2169739 : SymbolTable_PtrToSymbol pSym;
9996 : :
9997 : 2169739 : pSym = GetPsym (sym);
9998 : 2169739 : switch (pSym->SymbolType)
9999 : : {
10000 : 2169739 : case SymbolTable_ProcedureSym:
10001 : 2169739 : return pSym->Procedure.IsMonoName;
10002 : 0 : break;
10003 : :
10004 : :
10005 : 0 : default:
10006 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10007 : : break;
10008 : : }
10009 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
10010 : : __builtin_unreachable ();
10011 : : }
10012 : :
10013 : :
10014 : : /*
10015 : : PutExtern - changes the extern boolean inside the procedure.
10016 : : */
10017 : :
10018 : 512989 : extern "C" void SymbolTable_PutExtern (unsigned int sym, bool value)
10019 : : {
10020 : 512989 : SymbolTable_PtrToSymbol pSym;
10021 : :
10022 : 512989 : pSym = GetPsym (sym);
10023 : 512989 : switch (pSym->SymbolType)
10024 : : {
10025 : 512989 : case SymbolTable_ProcedureSym:
10026 : 512989 : pSym->Procedure.IsExtern = value;
10027 : 512989 : break;
10028 : :
10029 : :
10030 : 0 : default:
10031 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10032 : 512989 : break;
10033 : : }
10034 : 512989 : }
10035 : :
10036 : :
10037 : : /*
10038 : : IsExtern - returns the public boolean associated with a procedure.
10039 : : */
10040 : :
10041 : 3206743 : extern "C" bool SymbolTable_IsExtern (unsigned int sym)
10042 : : {
10043 : 3206743 : SymbolTable_PtrToSymbol pSym;
10044 : :
10045 : 3206743 : pSym = GetPsym (sym);
10046 : 3206743 : switch (pSym->SymbolType)
10047 : : {
10048 : 3206743 : case SymbolTable_ProcedureSym:
10049 : 3206743 : return pSym->Procedure.IsExtern;
10050 : 0 : break;
10051 : :
10052 : :
10053 : 0 : default:
10054 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10055 : : break;
10056 : : }
10057 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
10058 : : __builtin_unreachable ();
10059 : : }
10060 : :
10061 : :
10062 : : /*
10063 : : PutPublic - changes the public boolean inside the procedure.
10064 : : */
10065 : :
10066 : 526874 : extern "C" void SymbolTable_PutPublic (unsigned int sym, bool value)
10067 : : {
10068 : 526874 : SymbolTable_PtrToSymbol pSym;
10069 : :
10070 : 526874 : pSym = GetPsym (sym);
10071 : 526874 : switch (pSym->SymbolType)
10072 : : {
10073 : 526874 : case SymbolTable_ProcedureSym:
10074 : 526874 : pSym->Procedure.IsPublic = value;
10075 : 526874 : break;
10076 : :
10077 : :
10078 : 0 : default:
10079 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10080 : 526874 : break;
10081 : : }
10082 : 526874 : }
10083 : :
10084 : :
10085 : : /*
10086 : : IsPublic - returns the public boolean associated with a procedure.
10087 : : */
10088 : :
10089 : 93735 : extern "C" bool SymbolTable_IsPublic (unsigned int sym)
10090 : : {
10091 : 93735 : SymbolTable_PtrToSymbol pSym;
10092 : :
10093 : 93735 : pSym = GetPsym (sym);
10094 : 93735 : switch (pSym->SymbolType)
10095 : : {
10096 : 93735 : case SymbolTable_ProcedureSym:
10097 : 93735 : return pSym->Procedure.IsPublic;
10098 : 0 : break;
10099 : :
10100 : :
10101 : 0 : default:
10102 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10103 : : break;
10104 : : }
10105 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
10106 : : __builtin_unreachable ();
10107 : : }
10108 : :
10109 : :
10110 : : /*
10111 : : PutCtor - changes the ctor boolean inside the procedure.
10112 : : */
10113 : :
10114 : 143679 : extern "C" void SymbolTable_PutCtor (unsigned int sym, bool value)
10115 : : {
10116 : 143679 : SymbolTable_PtrToSymbol pSym;
10117 : :
10118 : 143679 : pSym = GetPsym (sym);
10119 : 143679 : switch (pSym->SymbolType)
10120 : : {
10121 : 143679 : case SymbolTable_ProcedureSym:
10122 : 143679 : pSym->Procedure.IsCtor = value;
10123 : 143679 : break;
10124 : :
10125 : :
10126 : 0 : default:
10127 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10128 : 143679 : break;
10129 : : }
10130 : 143679 : }
10131 : :
10132 : :
10133 : : /*
10134 : : IsCtor - returns the ctor boolean associated with a procedure.
10135 : : */
10136 : :
10137 : 131426 : extern "C" bool SymbolTable_IsCtor (unsigned int sym)
10138 : : {
10139 : 131426 : SymbolTable_PtrToSymbol pSym;
10140 : :
10141 : 131426 : pSym = GetPsym (sym);
10142 : 131426 : switch (pSym->SymbolType)
10143 : : {
10144 : 131426 : case SymbolTable_ProcedureSym:
10145 : 131426 : return pSym->Procedure.IsCtor;
10146 : 0 : break;
10147 : :
10148 : :
10149 : 0 : default:
10150 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
10151 : : break;
10152 : : }
10153 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
10154 : : __builtin_unreachable ();
10155 : : }
10156 : :
10157 : :
10158 : : /*
10159 : : GetModuleCtors - mod can be a DefImp or Module symbol. ctor, init and fini
10160 : : are assigned for this module. An inner module ctor value will
10161 : : be NulSym.
10162 : : */
10163 : :
10164 : 133953 : extern "C" void SymbolTable_GetModuleCtors (unsigned int mod, unsigned int *ctor, unsigned int *init, unsigned int *fini, unsigned int *dep)
10165 : : {
10166 : 133953 : SymbolTable_PtrToSymbol pSym;
10167 : :
10168 : 133953 : pSym = GetPsym (mod);
10169 : 133953 : switch (pSym->SymbolType)
10170 : : {
10171 : 79608 : case SymbolTable_ModuleSym:
10172 : 79608 : (*ctor) = pSym->Module.ctors.ctor;
10173 : 79608 : (*init) = pSym->Module.ctors.init;
10174 : 79608 : (*fini) = pSym->Module.ctors.fini;
10175 : 79608 : (*dep) = pSym->Module.ctors.dep;
10176 : 79608 : break;
10177 : :
10178 : 54345 : case SymbolTable_DefImpSym:
10179 : 54345 : (*ctor) = pSym->DefImp.ctors.ctor;
10180 : 54345 : (*init) = pSym->DefImp.ctors.init;
10181 : 54345 : (*fini) = pSym->DefImp.ctors.fini;
10182 : 54345 : (*dep) = pSym->DefImp.ctors.dep;
10183 : 54345 : break;
10184 : :
10185 : :
10186 : 0 : default:
10187 : 0 : M2Error_InternalError ((const char *) "expecting Module or DefImp symbol", 33);
10188 : 133953 : break;
10189 : : }
10190 : 133953 : }
10191 : :
10192 : :
10193 : : /*
10194 : : MakeModuleCtor - for a defimp or module symbol create all the ctor
10195 : : related procedures.
10196 : : */
10197 : :
10198 : 63689 : extern "C" void SymbolTable_MakeModuleCtor (unsigned int moduleTok, unsigned int beginTok, unsigned int finallyTok, unsigned int moduleSym)
10199 : : {
10200 : 63689 : SymbolTable_PtrToSymbol pSym;
10201 : :
10202 : 127378 : M2Debug_Assert ((SymbolTable_IsDefImp (moduleSym)) || (SymbolTable_IsModule (moduleSym)));
10203 : 63689 : pSym = GetPsym (moduleSym);
10204 : 63689 : if (SymbolTable_IsDefImp (moduleSym))
10205 : : {
10206 : 52171 : InitCtorFields (moduleTok, beginTok, finallyTok, moduleSym, &pSym->DefImp.ctors, SymbolTable_GetSymName (moduleSym), false, true);
10207 : : }
10208 : : else
10209 : : {
10210 : 11518 : InitCtorFields (moduleTok, beginTok, finallyTok, moduleSym, &pSym->Module.ctors, SymbolTable_GetSymName (moduleSym), SymbolTable_IsInnerModule (moduleSym), true);
10211 : : }
10212 : 63689 : }
10213 : :
10214 : :
10215 : : /*
10216 : : PutModuleCtorExtern - for every ctor related procedure in module sym.
10217 : : Make it external. It will create any missing
10218 : : init/fini procedures but not any missing dep/ctor
10219 : : procedures.
10220 : : */
10221 : :
10222 : 80644 : extern "C" void SymbolTable_PutModuleCtorExtern (unsigned int tok, unsigned int sym, bool external)
10223 : : {
10224 : 80644 : SymbolTable_PtrToSymbol pSym;
10225 : :
10226 : 161288 : M2Debug_Assert ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)));
10227 : 80644 : pSym = GetPsym (sym);
10228 : 80644 : switch (pSym->SymbolType)
10229 : : {
10230 : 80644 : case SymbolTable_DefImpSym:
10231 : 80644 : PutCtorExtern (tok, sym, &pSym->DefImp.ctors, external);
10232 : 80644 : break;
10233 : :
10234 : 0 : case SymbolTable_ModuleSym:
10235 : 0 : PutCtorExtern (tok, sym, &pSym->Module.ctors, external);
10236 : 0 : break;
10237 : :
10238 : :
10239 : 0 : default:
10240 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
10241 : 80644 : break;
10242 : : }
10243 : 80644 : }
10244 : :
10245 : :
10246 : : /*
10247 : : PutVarHeap - assigns ArrayRef field with value.
10248 : : */
10249 : :
10250 : 44594 : extern "C" void SymbolTable_PutVarHeap (unsigned int sym, bool value)
10251 : : {
10252 : 44594 : SymbolTable_PtrToSymbol pSym;
10253 : :
10254 : 44594 : pSym = GetPsym (sym);
10255 : 44594 : switch (pSym->SymbolType)
10256 : : {
10257 : 44594 : case SymbolTable_VarSym:
10258 : 44594 : pSym->Var.Heap = value;
10259 : 44594 : break;
10260 : :
10261 : :
10262 : 0 : default:
10263 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
10264 : 44594 : break;
10265 : : }
10266 : 44594 : }
10267 : :
10268 : :
10269 : : /*
10270 : : IsVarHeap - returns ArrayRef field value.
10271 : : */
10272 : :
10273 : 522203 : extern "C" bool SymbolTable_IsVarHeap (unsigned int sym)
10274 : : {
10275 : 522203 : SymbolTable_PtrToSymbol pSym;
10276 : :
10277 : 522203 : pSym = GetPsym (sym);
10278 : 522203 : switch (pSym->SymbolType)
10279 : : {
10280 : 522203 : case SymbolTable_VarSym:
10281 : 522203 : return pSym->Var.Heap;
10282 : 0 : break;
10283 : :
10284 : :
10285 : 0 : default:
10286 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
10287 : : break;
10288 : : }
10289 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
10290 : : __builtin_unreachable ();
10291 : : }
10292 : :
10293 : :
10294 : : /*
10295 : : MakeVar - creates a variable sym with VarName. It returns the
10296 : : symbol index.
10297 : : */
10298 : :
10299 : 7300133 : extern "C" unsigned int SymbolTable_MakeVar (unsigned int tok, NameKey_Name VarName)
10300 : : {
10301 : 7300133 : SymbolTable_PtrToSymbol pSym;
10302 : 7300133 : unsigned int Sym;
10303 : :
10304 : 7300133 : Sym = DeclareSym (tok, VarName);
10305 : 7300133 : if (! (SymbolTable_IsError (Sym)))
10306 : : {
10307 : 7300121 : pSym = GetPsym (Sym);
10308 : 7300121 : pSym->SymbolType = SymbolTable_VarSym;
10309 : 7300121 : pSym->Var.name = VarName;
10310 : 7300121 : pSym->Var.Type = SymbolTable_NulSym;
10311 : 7300121 : pSym->Var.BackType = SymbolTable_NulSym;
10312 : 7300121 : pSym->Var.Size = M2ALU_InitValue ();
10313 : 7300121 : pSym->Var.Offset = M2ALU_InitValue ();
10314 : 7300121 : pSym->Var.AddrMode = SymbolTable_RightValue;
10315 : 7300121 : pSym->Var.Scope = SymbolTable_GetCurrentScope (); /* Procedure or Module? */
10316 : 7300121 : pSym->Var.AtAddress = false; /* Procedure or Module? */
10317 : 7300121 : pSym->Var.Address = SymbolTable_NulSym; /* Address at which declared. */
10318 : 7300121 : pSym->Var.IsConditional = false; /* Address at which declared. */
10319 : 7300121 : pSym->Var.IsTemp = false;
10320 : 7300121 : pSym->Var.IsComponentRef = false;
10321 : 7300121 : pSym->Var.IsParam = false;
10322 : 7300121 : pSym->Var.IsPointerCheck = false;
10323 : 7300121 : pSym->Var.IsWritten = false;
10324 : 7300121 : pSym->Var.IsSSA = false;
10325 : 7300121 : pSym->Var.IsConst = false;
10326 : 7300121 : pSym->Var.ArrayRef = false;
10327 : 7300121 : pSym->Var.Heap = false;
10328 : 7300121 : InitVarDecl (&pSym->Var.Declared, tok);
10329 : 7300121 : InitWhereDeclaredTok (tok, &pSym->Var.At);
10330 : 7300121 : InitWhereFirstUsedTok (tok, &pSym->Var.At); /* Where symbol first used. */
10331 : 7300121 : Lists_InitList (&pSym->Var.ReadUsageList.array[SymbolTable_RightValue-SymbolTable_RightValue]); /* Where symbol first used. */
10332 : 7300121 : Lists_InitList (&pSym->Var.WriteUsageList.array[SymbolTable_RightValue-SymbolTable_RightValue]);
10333 : 7300121 : Lists_InitList (&pSym->Var.ReadUsageList.array[SymbolTable_LeftValue-SymbolTable_RightValue]);
10334 : 7300121 : Lists_InitList (&pSym->Var.WriteUsageList.array[SymbolTable_LeftValue-SymbolTable_RightValue]);
10335 : 7300121 : pSym->Var.InitState.array[SymbolTable_LeftValue-SymbolTable_RightValue] = M2SymInit_InitSymInit ();
10336 : 7300121 : pSym->Var.InitState.array[SymbolTable_RightValue-SymbolTable_RightValue] = M2SymInit_InitSymInit ();
10337 : : /* Add Var to Procedure or Module variable list. */
10338 : 7300121 : AddVarToList (Sym);
10339 : : /* Now add this Var to the symbol table of the current scope. */
10340 : 7300121 : AddSymToScope (Sym, VarName);
10341 : : }
10342 : 7300133 : return Sym;
10343 : : /* static analysis guarentees a RETURN statement will be used before here. */
10344 : : __builtin_unreachable ();
10345 : : }
10346 : :
10347 : :
10348 : : /*
10349 : : PutVarConditional - assign IsConditional to value.
10350 : : */
10351 : :
10352 : 14784 : extern "C" void SymbolTable_PutVarConditional (unsigned int sym, bool value)
10353 : : {
10354 : 14784 : SymbolTable_PtrToSymbol pSym;
10355 : :
10356 : 14784 : pSym = GetPsym (sym);
10357 : 14784 : switch (pSym->SymbolType)
10358 : : {
10359 : 14502 : case SymbolTable_VarSym:
10360 : 14502 : pSym->Var.IsConditional = value;
10361 : 14502 : break;
10362 : :
10363 : 282 : case SymbolTable_ConstVarSym:
10364 : 282 : pSym->ConstVar.IsConditional = value;
10365 : 282 : break;
10366 : :
10367 : :
10368 : 0 : default:
10369 : 0 : M2Error_InternalError ((const char *) "expecting Var", 13);
10370 : 14784 : break;
10371 : : }
10372 : 14784 : }
10373 : :
10374 : :
10375 : : /*
10376 : : IsVarConditional - return TRUE if the symbol is a var symbol
10377 : : containing the result of a boolean conditional.
10378 : : */
10379 : :
10380 : 249513 : extern "C" bool SymbolTable_IsVarConditional (unsigned int sym)
10381 : : {
10382 : 249513 : SymbolTable_PtrToSymbol pSym;
10383 : :
10384 : 249513 : pSym = GetPsym (sym);
10385 : 249513 : switch (pSym->SymbolType)
10386 : : {
10387 : 6294 : case SymbolTable_VarSym:
10388 : 6294 : return pSym->Var.IsConditional;
10389 : 242157 : break;
10390 : :
10391 : 242157 : case SymbolTable_ConstVarSym:
10392 : 242157 : return pSym->ConstVar.IsConditional;
10393 : : break;
10394 : :
10395 : :
10396 : : default:
10397 : : return false;
10398 : : break;
10399 : : }
10400 : : return false;
10401 : : /* static analysis guarentees a RETURN statement will be used before here. */
10402 : : __builtin_unreachable ();
10403 : : }
10404 : :
10405 : :
10406 : : /*
10407 : : MakeRecord - makes a Record symbol with name RecordName.
10408 : : */
10409 : :
10410 : 48560 : extern "C" unsigned int SymbolTable_MakeRecord (unsigned int tok, NameKey_Name RecordName)
10411 : : {
10412 : 48560 : unsigned int oaf;
10413 : 48560 : unsigned int sym;
10414 : :
10415 : 48560 : tok = CheckTok (tok, (const char *) "record", 6);
10416 : 48560 : sym = HandleHiddenOrDeclare (tok, RecordName, &oaf);
10417 : 48560 : FillInRecordFields (tok, sym, RecordName, SymbolTable_GetCurrentScope (), oaf);
10418 : 48560 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
10419 : 48560 : return sym;
10420 : : /* static analysis guarentees a RETURN statement will be used before here. */
10421 : : __builtin_unreachable ();
10422 : : }
10423 : :
10424 : :
10425 : : /*
10426 : : MakeVarient - creates a new symbol, a varient symbol for record or varient field
10427 : : symbol, RecOrVarFieldSym.
10428 : : */
10429 : :
10430 : 276 : extern "C" unsigned int SymbolTable_MakeVarient (unsigned int tok, unsigned int RecOrVarFieldSym)
10431 : : {
10432 : 276 : SymbolTable_PtrToSymbol pSym;
10433 : 276 : unsigned int Sym;
10434 : :
10435 : 276 : tok = CheckTok (tok, (const char *) "varient", 7);
10436 : 276 : NewSym (&Sym);
10437 : 276 : pSym = GetPsym (Sym);
10438 : 276 : pSym->SymbolType = SymbolTable_VarientSym;
10439 : 276 : pSym->Varient.Size = M2ALU_InitValue ();
10440 : 276 : pSym->Varient.Parent = RecOrVarFieldSym; /* GetRecord(RecOrVarFieldSym) ; */
10441 : 276 : if (SymbolTable_IsRecord (RecOrVarFieldSym)) /* GetRecord(RecOrVarFieldSym) ; */
10442 : : {
10443 : 240 : pSym->Varient.Varient = SymbolTable_NulSym;
10444 : : }
10445 : : else
10446 : : {
10447 : 36 : pSym->Varient.Varient = RecOrVarFieldSym;
10448 : : }
10449 : 276 : pSym->Varient.tag = SymbolTable_NulSym;
10450 : 276 : pSym->Varient.DeclPacked = false;
10451 : 276 : pSym->Varient.Scope = SymbolTable_GetCurrentScope ();
10452 : 276 : Lists_InitList (&pSym->Varient.ListOfSons);
10453 : 276 : InitWhereDeclaredTok (tok, &pSym->Varient.At);
10454 : : /* Now add Sym to the record RecSym field list */
10455 : 276 : pSym = GetPsym (RecOrVarFieldSym);
10456 : 276 : switch (pSym->SymbolType)
10457 : : {
10458 : 240 : case SymbolTable_RecordSym:
10459 : 240 : Lists_PutItemIntoList (pSym->Record.ListOfSons, Sym);
10460 : 240 : break;
10461 : :
10462 : 36 : case SymbolTable_VarientFieldSym:
10463 : 36 : Lists_PutItemIntoList (pSym->VarientField.ListOfSons, Sym);
10464 : 36 : break;
10465 : :
10466 : :
10467 : 0 : default:
10468 : 0 : M2Error_InternalError ((const char *) "expecting Record or VarientField symbol", 39);
10469 : 276 : break;
10470 : : }
10471 : 276 : return Sym;
10472 : : /* static analysis guarentees a RETURN statement will be used before here. */
10473 : : __builtin_unreachable ();
10474 : : }
10475 : :
10476 : :
10477 : : /*
10478 : : MakeFieldVarient - returns a FieldVarient symbol which has been
10479 : : assigned to the Varient symbol, Sym.
10480 : : */
10481 : :
10482 : 666 : extern "C" unsigned int SymbolTable_MakeFieldVarient (NameKey_Name n, unsigned int Sym)
10483 : : {
10484 : 666 : SymbolTable_PtrToSymbol pSym;
10485 : 666 : unsigned int SonSym;
10486 : :
10487 : 666 : NewSym (&SonSym);
10488 : : /* Fill in Sym */
10489 : 666 : pSym = GetPsym (SonSym);
10490 : 666 : pSym->SymbolType = SymbolTable_VarientFieldSym;
10491 : 666 : pSym->VarientField.name = n;
10492 : 666 : Lists_InitList (&pSym->VarientField.ListOfSons);
10493 : 666 : pSym->VarientField.Parent = SymbolTable_GetRecord (Sym);
10494 : 666 : pSym->VarientField.Varient = SymbolTable_NulSym;
10495 : 666 : pSym->VarientField.Size = M2ALU_InitValue ();
10496 : 666 : pSym->VarientField.Offset = M2ALU_InitValue ();
10497 : 666 : pSym->VarientField.DeclPacked = false;
10498 : 666 : pSym->VarientField.DeclResolved = false;
10499 : 666 : pSym->VarientField.Scope = SymbolTable_GetCurrentScope ();
10500 : 666 : InitWhereDeclared (&pSym->VarientField.At);
10501 : 666 : return SonSym;
10502 : : /* static analysis guarentees a RETURN statement will be used before here. */
10503 : : __builtin_unreachable ();
10504 : : }
10505 : :
10506 : :
10507 : : /*
10508 : : MakeEnumeration - places a new symbol in the current scope, the symbol
10509 : : is an enumeration symbol. The symbol index is returned.
10510 : : */
10511 : :
10512 : 36960 : extern "C" unsigned int SymbolTable_MakeEnumeration (unsigned int tok, NameKey_Name EnumerationName)
10513 : : {
10514 : 36960 : SymbolTable_PtrToSymbol pSym;
10515 : 36960 : unsigned int sym;
10516 : 36960 : unsigned int oaf;
10517 : :
10518 : 36960 : tok = CheckTok (tok, (const char *) "enumeration", 11);
10519 : 36960 : sym = CheckForHiddenType (EnumerationName);
10520 : 36960 : if (sym == SymbolTable_NulSym)
10521 : : {
10522 : : /* avoid dangling else. */
10523 : 36960 : sym = DeclareSym (tok, EnumerationName);
10524 : 36960 : oaf = SymbolTable_GetOAFamily (sym);
10525 : 36960 : if (! (SymbolTable_IsError (sym)))
10526 : : {
10527 : 36960 : pSym = GetPsym (sym);
10528 : 36960 : pSym->SymbolType = SymbolTable_EnumerationSym; /* To satisfy AddSymToScope */
10529 : : /* Now add this type to the symbol table of the current scope */
10530 : 36960 : AddSymToScope (sym, EnumerationName);
10531 : : }
10532 : : }
10533 : : else
10534 : : {
10535 : 0 : oaf = SymbolTable_GetOAFamily (sym);
10536 : : }
10537 : 36960 : if (! (SymbolTable_IsError (sym)))
10538 : : {
10539 : 36960 : pSym = GetPsym (sym);
10540 : 36960 : pSym->SymbolType = SymbolTable_EnumerationSym;
10541 : 36960 : pSym->Enumeration.name = EnumerationName; /* Name of enumeration. */
10542 : 36960 : pSym->Enumeration.NoOfElements = 0; /* No of elements in the */
10543 : : /* enumeration type. */
10544 : 36960 : pSym->Enumeration.Size = M2ALU_InitValue (); /* Size at runtime of sym */
10545 : 36960 : SymbolKey_InitTree (&pSym->Enumeration.LocalSymbols); /* Enumeration fields. */
10546 : 36960 : Lists_InitList (&pSym->Enumeration.ListOfFields); /* Ordered as declared. */
10547 : 36960 : InitPacked (&pSym->Enumeration.packedInfo); /* not packed and no */
10548 : : /* equivalent (yet). */
10549 : 36960 : pSym->Enumeration.oafamily = oaf; /* The open array family */
10550 : 36960 : pSym->Enumeration.Scope = SymbolTable_GetCurrentScope (); /* Which scope created it */
10551 : 36960 : InitWhereDeclaredTok (tok, &pSym->Enumeration.At); /* Declared here */
10552 : 36960 : CheckIfEnumerationExported (sym, ScopePtr);
10553 : : }
10554 : 36960 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
10555 : 36960 : return sym;
10556 : : /* static analysis guarentees a RETURN statement will be used before here. */
10557 : : __builtin_unreachable ();
10558 : : }
10559 : :
10560 : :
10561 : : /*
10562 : : MakeType - makes a type symbol with name TypeName.
10563 : : */
10564 : :
10565 : 556656 : extern "C" unsigned int SymbolTable_MakeType (unsigned int tok, NameKey_Name TypeName)
10566 : : {
10567 : 556656 : SymbolTable_PtrToSymbol pSym;
10568 : 556656 : unsigned int sym;
10569 : 556656 : unsigned int oaf;
10570 : :
10571 : 556656 : sym = HandleHiddenOrDeclare (tok, TypeName, &oaf);
10572 : 556656 : if (! (SymbolTable_IsError (sym)))
10573 : : {
10574 : 556650 : pSym = GetPsym (sym);
10575 : 556650 : pSym->SymbolType = SymbolTable_TypeSym;
10576 : 556650 : pSym->Type.name = TypeName; /* Index into name array, name */
10577 : : /* of type. */
10578 : 556650 : pSym->Type.Type = SymbolTable_NulSym; /* Index to a type symbol. */
10579 : 556650 : pSym->Type.IsHidden = false; /* Was it declared as hidden? */
10580 : 556650 : SymbolKey_InitTree (&pSym->Type.ConstLitTree); /* constants of this type. */
10581 : 556650 : pSym->Type.Size = M2ALU_InitValue (); /* Runtime size of symbol. */
10582 : 556650 : pSym->Type.Align = SymbolTable_NulSym; /* Alignment of this type. */
10583 : 556650 : InitPacked (&pSym->Type.packedInfo); /* not packed and no */
10584 : : /* equivalent yet. */
10585 : 556650 : pSym->Type.oafamily = oaf; /* The open array family. */
10586 : 556650 : pSym->Type.Scope = SymbolTable_GetCurrentScope (); /* Which scope created it */
10587 : 556650 : InitWhereDeclaredTok (tok, &pSym->Type.At); /* Declared here */
10588 : : }
10589 : 556656 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
10590 : 556656 : return sym;
10591 : : /* static analysis guarentees a RETURN statement will be used before here. */
10592 : : __builtin_unreachable ();
10593 : : }
10594 : :
10595 : :
10596 : : /*
10597 : : MakeHiddenType - makes a type symbol that is hidden from the
10598 : : definition module.
10599 : : This symbol is placed into the UnImplemented list of
10600 : : the definition/implementation module.
10601 : : The type will be filled in when the implementation module
10602 : : is reached.
10603 : : */
10604 : :
10605 : 22061 : extern "C" unsigned int SymbolTable_MakeHiddenType (unsigned int tok, NameKey_Name TypeName)
10606 : : {
10607 : 22061 : SymbolTable_PtrToSymbol pSym;
10608 : 22061 : unsigned int Sym;
10609 : :
10610 : 22061 : tok = CheckTok (tok, (const char *) "hidden", 6);
10611 : 22061 : Sym = DeclareSym (tok, TypeName);
10612 : 22061 : if (! (SymbolTable_IsError (Sym)))
10613 : : {
10614 : 22061 : pSym = GetPsym (Sym);
10615 : 22061 : pSym->SymbolType = SymbolTable_TypeSym;
10616 : 22061 : pSym->Type.name = TypeName; /* Index into name array, name */
10617 : : /* of type. */
10618 : 22061 : pSym->Type.IsHidden = (SymbolTable_GetMainModule ()) != (SymbolTable_GetCurrentScope ());
10619 : 22061 : if (M2Options_ExtendedOpaque || ! pSym->Type.IsHidden)
10620 : : {
10621 : 1458 : pSym->Type.Type = SymbolTable_NulSym; /* will be filled in later */
10622 : : }
10623 : : else
10624 : : {
10625 : 20603 : pSym->Type.Type = M2System_Address;
10626 : : }
10627 : 22061 : pSym->Type.Align = SymbolTable_NulSym; /* Alignment of this type. */
10628 : 22061 : pSym->Type.Scope = SymbolTable_GetCurrentScope (); /* Which scope created it */
10629 : 22061 : pSym->Type.oafamily = SymbolTable_NulSym; /* Which scope created it */
10630 : 22061 : if (! M2Options_ExtendedOpaque)
10631 : : {
10632 : 20693 : Lists_IncludeItemIntoList (AddressTypes, Sym);
10633 : : }
10634 : 22061 : pSym->Type.Size = M2ALU_InitValue (); /* Runtime size of symbol. */
10635 : 22061 : InitWhereDeclaredTok (tok, &pSym->Type.At); /* Declared here */
10636 : 22061 : SymbolTable_PutExportUnImplemented (tok, Sym);
10637 : 22061 : if (M2Options_ExtendedOpaque || ((SymbolTable_GetMainModule ()) == (SymbolTable_GetCurrentScope ())))
10638 : : {
10639 : 1458 : SymbolTable_PutHiddenTypeDeclared ();
10640 : : }
10641 : : /* Now add this type to the symbol table of the current scope */
10642 : 22061 : AddSymToScope (Sym, TypeName);
10643 : : }
10644 : 22061 : return Sym;
10645 : : /* static analysis guarentees a RETURN statement will be used before here. */
10646 : : __builtin_unreachable ();
10647 : : }
10648 : :
10649 : :
10650 : : /*
10651 : : MakeConstant - create a constant cardinal and return the symbol.
10652 : : */
10653 : :
10654 : 29952 : extern "C" unsigned int SymbolTable_MakeConstant (unsigned int tok, unsigned int value)
10655 : : {
10656 : 29952 : DynamicStrings_String str;
10657 : 29952 : unsigned int sym;
10658 : :
10659 : 29952 : tok = CheckTok (tok, (const char *) "constant", 8);
10660 : 29952 : str = FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "%d", 2)), (const unsigned char *) &value, (sizeof (value)-1));
10661 : 29952 : sym = SymbolTable_MakeConstLit (tok, NameKey_makekey (DynamicStrings_string (str)), M2Base_Cardinal);
10662 : 29952 : str = DynamicStrings_KillString (str);
10663 : 29952 : return sym;
10664 : : /* static analysis guarentees a RETURN statement will be used before here. */
10665 : : __builtin_unreachable ();
10666 : : }
10667 : :
10668 : :
10669 : : /*
10670 : : MakeConstLit - returns a constant literal of type, constType, with a constName,
10671 : : at location, tok.
10672 : : */
10673 : :
10674 : 1264494 : extern "C" unsigned int SymbolTable_MakeConstLit (unsigned int tok, NameKey_Name constName, unsigned int constType)
10675 : : {
10676 : 1264494 : unsigned int sym;
10677 : :
10678 : 1264494 : tok = CheckTok (tok, (const char *) "constlit", 8);
10679 : 1264494 : sym = LookupConstLitPoolEntry (tok, constName, constType);
10680 : 1264494 : if (sym == SymbolTable_NulSym)
10681 : : {
10682 : 515008 : sym = CreateConstLit (tok, constName, constType);
10683 : 515008 : AddConstLitPoolEntry (sym, tok, constName, constType);
10684 : : }
10685 : 1264494 : return sym;
10686 : : /* static analysis guarentees a RETURN statement will be used before here. */
10687 : : __builtin_unreachable ();
10688 : : }
10689 : :
10690 : :
10691 : : /*
10692 : : MakeConstVar - makes a ConstVar type with
10693 : : name ConstVarName.
10694 : : */
10695 : :
10696 : 985251 : extern "C" unsigned int SymbolTable_MakeConstVar (unsigned int tok, NameKey_Name ConstVarName)
10697 : : {
10698 : 985251 : SymbolTable_PtrToSymbol pSym;
10699 : 985251 : unsigned int Sym;
10700 : 985251 : bool temp;
10701 : :
10702 : 985251 : temp = ConstVarName == NameKey_NulName;
10703 : 985251 : ConstVarName = SymbolTable_CheckAnonymous (ConstVarName);
10704 : 985251 : Sym = DeclareSym (tok, ConstVarName);
10705 : 985251 : if (! (SymbolTable_IsError (Sym)))
10706 : : {
10707 : 985245 : pSym = GetPsym (Sym);
10708 : 985245 : pSym->SymbolType = SymbolTable_ConstVarSym;
10709 : 985245 : pSym->ConstVar.name = ConstVarName;
10710 : 985245 : pSym->ConstVar.Value = M2ALU_InitValue ();
10711 : 985245 : pSym->ConstVar.Type = SymbolTable_NulSym;
10712 : 985245 : pSym->ConstVar.IsSet = false;
10713 : 985245 : pSym->ConstVar.IsConditional = false;
10714 : 985245 : pSym->ConstVar.IsConstructor = false;
10715 : 985245 : pSym->ConstVar.FromType = SymbolTable_NulSym; /* type is determined FromType */
10716 : 985245 : pSym->ConstVar.UnresFromType = false; /* is Type resolved? */
10717 : 985245 : pSym->ConstVar.IsTemp = temp; /* is Type resolved? */
10718 : 985245 : pSym->ConstVar.Scope = SymbolTable_GetCurrentScope ();
10719 : 985245 : InitWhereDeclaredTok (tok, &pSym->ConstVar.At);
10720 : : /* Now add this constant to the symbol table of the current scope */
10721 : 985245 : AddSymToScope (Sym, ConstVarName);
10722 : : }
10723 : 985251 : return Sym;
10724 : : /* static analysis guarentees a RETURN statement will be used before here. */
10725 : : __builtin_unreachable ();
10726 : : }
10727 : :
10728 : :
10729 : : /*
10730 : : MakeConstString - create a string constant in the symboltable.
10731 : : */
10732 : :
10733 : 241618 : extern "C" unsigned int SymbolTable_MakeConstString (unsigned int tok, NameKey_Name ConstName)
10734 : : {
10735 : 241618 : unsigned int newstr;
10736 : :
10737 : 241618 : NewSym (&newstr);
10738 : 241618 : InitConstString (tok, newstr, ConstName, ConstName, SymbolTable_m2nulstr, false, true);
10739 : 241618 : return newstr;
10740 : : /* static analysis guarentees a RETURN statement will be used before here. */
10741 : : __builtin_unreachable ();
10742 : : }
10743 : :
10744 : :
10745 : : /*
10746 : : MakeConstStringCnul - creates a constant string nul terminated string suitable for C.
10747 : : If known is TRUE then name is assigned to the contents
10748 : : and the escape sequences will be converted into characters.
10749 : : */
10750 : :
10751 : 7534 : extern "C" unsigned int SymbolTable_MakeConstStringCnul (unsigned int tok, NameKey_Name name, bool known)
10752 : : {
10753 : 7534 : unsigned int newstr;
10754 : :
10755 : 7534 : tok = CheckTok (tok, (const char *) "conststringcnul", 15);
10756 : 7534 : NewSym (&newstr);
10757 : 7534 : InitConstString (tok, newstr, name, name, SymbolTable_cnulstr, true, known);
10758 : 7534 : return newstr;
10759 : : /* static analysis guarentees a RETURN statement will be used before here. */
10760 : : __builtin_unreachable ();
10761 : : }
10762 : :
10763 : :
10764 : : /*
10765 : : MakeConstStringM2nul - creates a constant string nul terminated string suitable for M2.
10766 : : If known is TRUE then name is assigned to the contents
10767 : : however the escape sequences are not converted into characters.
10768 : : */
10769 : :
10770 : 30106 : extern "C" unsigned int SymbolTable_MakeConstStringM2nul (unsigned int tok, NameKey_Name name, bool known)
10771 : : {
10772 : 30106 : unsigned int newstr;
10773 : :
10774 : 30106 : NewSym (&newstr);
10775 : 30106 : InitConstString (tok, newstr, name, name, SymbolTable_m2nulstr, false, known);
10776 : 30106 : return newstr;
10777 : : /* static analysis guarentees a RETURN statement will be used before here. */
10778 : : __builtin_unreachable ();
10779 : : }
10780 : :
10781 : :
10782 : : /*
10783 : : PutConstStringKnown - if sym is a constvar then convert it into a conststring.
10784 : : If known is FALSE then contents is ignored and NulName is
10785 : : stored. If escape is TRUE then the contents will have
10786 : : any escape sequences converted into single characters.
10787 : : */
10788 : :
10789 : 328544 : extern "C" void SymbolTable_PutConstStringKnown (unsigned int tok, unsigned int sym, NameKey_Name contents, bool escape, bool known)
10790 : : {
10791 : 328544 : SymbolTable_PtrToSymbol pSym;
10792 : 328544 : DynamicStrings_String s;
10793 : :
10794 : 328544 : pSym = GetPsym (sym);
10795 : 328544 : switch (pSym->SymbolType)
10796 : : {
10797 : 327470 : case SymbolTable_ConstStringSym:
10798 : 327470 : if (known)
10799 : : {
10800 : 288312 : if (escape)
10801 : : {
10802 : 7516 : s = FormatStrings_HandleEscape (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (contents)));
10803 : 7516 : contents = NameKey_makekey (DynamicStrings_string (s));
10804 : 7516 : s = DynamicStrings_KillString (s);
10805 : : }
10806 : 288312 : pSym->ConstString.Length = NameKey_LengthKey (contents);
10807 : 288312 : pSym->ConstString.Contents = contents;
10808 : : }
10809 : : else
10810 : : {
10811 : 39158 : pSym->ConstString.Length = 0;
10812 : 39158 : pSym->ConstString.Contents = NameKey_NulName;
10813 : : }
10814 : 327470 : pSym->ConstString.Known = known;
10815 : 327470 : InitWhereDeclaredTok (tok, &pSym->ConstString.At);
10816 : 327470 : InitWhereFirstUsedTok (tok, &pSym->ConstString.At);
10817 : 327470 : break;
10818 : :
10819 : 1074 : case SymbolTable_ConstVarSym:
10820 : 1074 : InitConstString (tok, sym, pSym->ConstVar.name, contents, SymbolTable_m2str, escape, known); /* Change a ConstVar to a ConstString copy name
10821 : : and alter symboltype. */
10822 : 1074 : break;
10823 : :
10824 : :
10825 : 0 : default:
10826 : 0 : M2Error_InternalError ((const char *) "expecting ConstString symbol", 28);
10827 : 328544 : break;
10828 : : }
10829 : 328544 : }
10830 : :
10831 : :
10832 : : /*
10833 : : CopyConstString - copies string contents from expr to des
10834 : : and retain the kind of string.
10835 : : */
10836 : :
10837 : 1086 : extern "C" void SymbolTable_CopyConstString (unsigned int tok, unsigned int des, unsigned int expr)
10838 : : {
10839 : 1086 : SymbolTable_PtrToSymbol pSym;
10840 : :
10841 : 1086 : M2Debug_Assert (SymbolTable_IsConstStringKnown (expr));
10842 : 1086 : pSym = GetPsym (des);
10843 : 1086 : switch (pSym->SymbolType)
10844 : : {
10845 : 1062 : case SymbolTable_ConstStringSym:
10846 : 1062 : InitConstString (tok, des, pSym->ConstString.name, SymbolTable_GetString (expr), GetConstStringKind (expr), false, true);
10847 : 1062 : break;
10848 : :
10849 : 24 : case SymbolTable_ConstVarSym:
10850 : 24 : InitConstString (tok, des, pSym->ConstVar.name, SymbolTable_GetString (expr), GetConstStringKind (expr), false, true); /* Change a ConstVar to a ConstString copy name
10851 : : and alter symboltype. */
10852 : 24 : break;
10853 : :
10854 : :
10855 : 0 : default:
10856 : 0 : M2Error_InternalError ((const char *) "expecting ConstString symbol", 28);
10857 : 1086 : break;
10858 : : }
10859 : 1086 : }
10860 : :
10861 : :
10862 : : /*
10863 : : IsConstStringKnown - returns TRUE if sym is a const string
10864 : : and the contents are known.
10865 : : */
10866 : :
10867 : 795718 : extern "C" bool SymbolTable_IsConstStringKnown (unsigned int sym)
10868 : : {
10869 : 795718 : SymbolTable_PtrToSymbol pSym;
10870 : :
10871 : 795718 : pSym = GetPsym (sym);
10872 : 795718 : switch (pSym->SymbolType)
10873 : : {
10874 : 795694 : case SymbolTable_ConstStringSym:
10875 : 795694 : return pSym->ConstString.Known;
10876 : : break;
10877 : :
10878 : :
10879 : : default:
10880 : : return false;
10881 : : break;
10882 : : }
10883 : : /* static analysis guarentees a RETURN statement will be used before here. */
10884 : : __builtin_unreachable ();
10885 : : }
10886 : :
10887 : :
10888 : : /*
10889 : : IsConstStringM2 - returns whether this conststring is a
10890 : : Modula-2 string.
10891 : : */
10892 : :
10893 : 0 : extern "C" bool SymbolTable_IsConstStringM2 (unsigned int sym)
10894 : : {
10895 : 0 : return (GetConstStringKind (sym)) == SymbolTable_m2str;
10896 : : /* static analysis guarentees a RETURN statement will be used before here. */
10897 : : __builtin_unreachable ();
10898 : : }
10899 : :
10900 : :
10901 : : /*
10902 : : IsConstStringC - returns whether this conststring is a C style string
10903 : : which will have any escape translated.
10904 : : */
10905 : :
10906 : 0 : extern "C" bool SymbolTable_IsConstStringC (unsigned int sym)
10907 : : {
10908 : 0 : return (GetConstStringKind (sym)) == SymbolTable_cstr;
10909 : : /* static analysis guarentees a RETURN statement will be used before here. */
10910 : : __builtin_unreachable ();
10911 : : }
10912 : :
10913 : :
10914 : : /*
10915 : : IsConstStringM2nul - returns whether this conststring is a Modula-2 string which
10916 : : contains a nul terminator.
10917 : : */
10918 : :
10919 : 253604 : extern "C" bool SymbolTable_IsConstStringM2nul (unsigned int sym)
10920 : : {
10921 : 253604 : return (GetConstStringKind (sym)) == SymbolTable_m2nulstr;
10922 : : /* static analysis guarentees a RETURN statement will be used before here. */
10923 : : __builtin_unreachable ();
10924 : : }
10925 : :
10926 : :
10927 : : /*
10928 : : IsConstStringCnul - returns whether this conststring is a C style string
10929 : : which will have any escape translated and also contains
10930 : : a nul terminator.
10931 : : */
10932 : :
10933 : 7336 : extern "C" bool SymbolTable_IsConstStringCnul (unsigned int sym)
10934 : : {
10935 : 7336 : return (GetConstStringKind (sym)) == SymbolTable_cnulstr;
10936 : : /* static analysis guarentees a RETURN statement will be used before here. */
10937 : : __builtin_unreachable ();
10938 : : }
10939 : :
10940 : :
10941 : : /*
10942 : : MakeSubrange - makes a new symbol into a subrange type with
10943 : : name SubrangeName.
10944 : : */
10945 : :
10946 : 141388 : extern "C" unsigned int SymbolTable_MakeSubrange (unsigned int tok, NameKey_Name SubrangeName)
10947 : : {
10948 : 141388 : SymbolTable_PtrToSymbol pSym;
10949 : 141388 : unsigned int sym;
10950 : 141388 : unsigned int oaf;
10951 : :
10952 : 141388 : tok = CheckTok (tok, (const char *) "subrange", 8);
10953 : 141388 : sym = HandleHiddenOrDeclare (tok, SubrangeName, &oaf);
10954 : 141388 : if (! (SymbolTable_IsError (sym)))
10955 : : {
10956 : 141388 : pSym = GetPsym (sym);
10957 : 141388 : pSym->SymbolType = SymbolTable_SubrangeSym;
10958 : 141388 : pSym->Subrange.name = SubrangeName;
10959 : 141388 : pSym->Subrange.Low = SymbolTable_NulSym; /* Index to a symbol determining */
10960 : : /* ConstExpression. */
10961 : 141388 : pSym->Subrange.High = SymbolTable_NulSym; /* Index to a symbol determining */
10962 : : /* ConstExpression. */
10963 : 141388 : pSym->Subrange.Type = SymbolTable_NulSym; /* Index to a type. Determines */
10964 : : /* the type of subrange. */
10965 : 141388 : pSym->Subrange.Align = SymbolTable_NulSym; /* The alignment of this type. */
10966 : 141388 : InitPacked (&pSym->Subrange.packedInfo); /* not packed and no equivalent */
10967 : 141388 : SymbolKey_InitTree (&pSym->Subrange.ConstLitTree); /* constants of this type. */
10968 : 141388 : pSym->Subrange.Size = M2ALU_InitValue (); /* Size determines the type size */
10969 : 141388 : pSym->Subrange.oafamily = oaf; /* The unbounded sym for this */
10970 : 141388 : pSym->Subrange.Scope = SymbolTable_GetCurrentScope (); /* Which scope created it */
10971 : 141388 : InitWhereDeclaredTok (tok, &pSym->Subrange.At); /* Declared here */
10972 : : }
10973 : 141388 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
10974 : 141388 : return sym;
10975 : : /* static analysis guarentees a RETURN statement will be used before here. */
10976 : : __builtin_unreachable ();
10977 : : }
10978 : :
10979 : :
10980 : : /*
10981 : : MakeSet - makes a set Symbol with name, SetName.
10982 : : */
10983 : :
10984 : 58730 : extern "C" unsigned int SymbolTable_MakeSet (unsigned int tok, NameKey_Name SetName)
10985 : : {
10986 : 58730 : SymbolTable_PtrToSymbol pSym;
10987 : 58730 : unsigned int oaf;
10988 : 58730 : unsigned int sym;
10989 : :
10990 : 58730 : tok = CheckTok (tok, (const char *) "set", 3);
10991 : 58730 : sym = HandleHiddenOrDeclare (tok, SetName, &oaf);
10992 : 58730 : if (! (SymbolTable_IsError (sym)))
10993 : : {
10994 : 58730 : pSym = GetPsym (sym);
10995 : 58730 : pSym->SymbolType = SymbolTable_SetSym;
10996 : 58730 : pSym->Set.name = SetName; /* The name of the set. */
10997 : 58730 : pSym->Set.Type = SymbolTable_NulSym; /* Index to a subrange symbol. */
10998 : 58730 : pSym->Set.Size = M2ALU_InitValue (); /* Size of this set */
10999 : 58730 : InitPacked (&pSym->Set.packedInfo); /* not packed and no */
11000 : : /* equivalent (yet). */
11001 : 58730 : pSym->Set.ispacked = false; /* Not yet known to be packed. */
11002 : 58730 : pSym->Set.oafamily = oaf; /* The unbounded sym for this */
11003 : 58730 : pSym->Set.Scope = SymbolTable_GetCurrentScope (); /* Which scope created it */
11004 : 58730 : InitWhereDeclaredTok (tok, &pSym->Set.At); /* Declared here */
11005 : : }
11006 : 58730 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
11007 : 58730 : return sym;
11008 : : /* static analysis guarentees a RETURN statement will be used before here. */
11009 : : __builtin_unreachable ();
11010 : : }
11011 : :
11012 : :
11013 : : /*
11014 : : MakeArray - makes an Array symbol with name ArrayName.
11015 : : */
11016 : :
11017 : 85354 : extern "C" unsigned int SymbolTable_MakeArray (unsigned int tok, NameKey_Name ArrayName)
11018 : : {
11019 : 85354 : SymbolTable_PtrToSymbol pSym;
11020 : 85354 : unsigned int sym;
11021 : 85354 : unsigned int oaf;
11022 : :
11023 : 85354 : sym = HandleHiddenOrDeclare (tok, ArrayName, &oaf);
11024 : 85354 : if (! (SymbolTable_IsError (sym)))
11025 : : {
11026 : 85354 : pSym = GetPsym (sym);
11027 : 85354 : pSym->SymbolType = SymbolTable_ArraySym;
11028 : 85354 : pSym->Array.name = ArrayName;
11029 : 85354 : pSym->Array.Subscript = SymbolTable_NulSym; /* Contains the array subscripts. */
11030 : 85354 : pSym->Array.Size = M2ALU_InitValue (); /* Size of array. */
11031 : 85354 : pSym->Array.Offset = M2ALU_InitValue (); /* Offset of array. */
11032 : 85354 : pSym->Array.Type = SymbolTable_NulSym; /* The Array Type. ARRAY OF Type. */
11033 : 85354 : pSym->Array.Large = false; /* is this array large? */
11034 : 85354 : pSym->Array.Align = SymbolTable_NulSym; /* The alignment of this type. */
11035 : 85354 : pSym->Array.oafamily = oaf; /* The unbounded for this array */
11036 : 85354 : pSym->Array.Scope = SymbolTable_GetCurrentScope (); /* Which scope created it */
11037 : 85354 : InitWhereDeclaredTok (tok, &pSym->Array.At); /* Declared here */
11038 : : }
11039 : 85354 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
11040 : 85354 : return sym;
11041 : : /* static analysis guarentees a RETURN statement will be used before here. */
11042 : : __builtin_unreachable ();
11043 : : }
11044 : :
11045 : :
11046 : : /*
11047 : : PutArrayLarge - indicates that this is a large array in which case
11048 : : the interface to gcc maps this array from 0..high-low,
11049 : : using an integer indice.
11050 : : */
11051 : :
11052 : 24 : extern "C" void SymbolTable_PutArrayLarge (unsigned int array)
11053 : : {
11054 : 24 : SymbolTable_PtrToSymbol pSym;
11055 : :
11056 : 24 : if (! (SymbolTable_IsError (array)))
11057 : : {
11058 : 24 : M2Debug_Assert (SymbolTable_IsArray (array));
11059 : 24 : pSym = GetPsym (array);
11060 : 24 : pSym->Array.Large = true;
11061 : : }
11062 : 24 : }
11063 : :
11064 : :
11065 : : /*
11066 : : IsArrayLarge - returns TRUE if we need to treat this as a large array.
11067 : : */
11068 : :
11069 : 38968 : extern "C" bool SymbolTable_IsArrayLarge (unsigned int array)
11070 : : {
11071 : 38968 : SymbolTable_PtrToSymbol pSym;
11072 : :
11073 : 38968 : M2Debug_Assert (SymbolTable_IsArray (array));
11074 : 38968 : pSym = GetPsym (array);
11075 : 38968 : return pSym->Array.Large;
11076 : : /* static analysis guarentees a RETURN statement will be used before here. */
11077 : : __builtin_unreachable ();
11078 : : }
11079 : :
11080 : :
11081 : : /*
11082 : : PutPriority - places a interrupt, priority, value into module, module.
11083 : : */
11084 : :
11085 : 38 : extern "C" void SymbolTable_PutPriority (unsigned int module, unsigned int priority)
11086 : : {
11087 : 38 : SymbolTable_PtrToSymbol pSym;
11088 : :
11089 : 38 : M2Debug_Assert (module != SymbolTable_NulSym);
11090 : 38 : pSym = GetPsym (module);
11091 : 38 : switch (pSym->SymbolType)
11092 : : {
11093 : 14 : case SymbolTable_DefImpSym:
11094 : 14 : pSym->DefImp.Priority = priority;
11095 : 14 : break;
11096 : :
11097 : 24 : case SymbolTable_ModuleSym:
11098 : 24 : pSym->Module.Priority = priority;
11099 : 24 : break;
11100 : :
11101 : :
11102 : 0 : default:
11103 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
11104 : 38 : break;
11105 : : }
11106 : 38 : }
11107 : :
11108 : :
11109 : : /*
11110 : : GetPriority - returns the interrupt priority which was assigned to
11111 : : module, module.
11112 : : */
11113 : :
11114 : 355065 : extern "C" unsigned int SymbolTable_GetPriority (unsigned int module)
11115 : : {
11116 : 355065 : SymbolTable_PtrToSymbol pSym;
11117 : :
11118 : 355065 : M2Debug_Assert (module != SymbolTable_NulSym);
11119 : 355065 : pSym = GetPsym (module);
11120 : 355065 : switch (pSym->SymbolType)
11121 : : {
11122 : 226175 : case SymbolTable_DefImpSym:
11123 : 226175 : return pSym->DefImp.Priority;
11124 : 128890 : break;
11125 : :
11126 : 128890 : case SymbolTable_ModuleSym:
11127 : 128890 : return pSym->Module.Priority;
11128 : 0 : break;
11129 : :
11130 : :
11131 : 0 : default:
11132 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
11133 : : break;
11134 : : }
11135 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11136 : : __builtin_unreachable ();
11137 : : }
11138 : :
11139 : :
11140 : : /*
11141 : : PutNeedSavePriority - set a boolean flag indicating that this procedure
11142 : : needs to save and restore interrupts.
11143 : : */
11144 : :
11145 : 162 : extern "C" void SymbolTable_PutNeedSavePriority (unsigned int sym)
11146 : : {
11147 : 162 : SymbolTable_PtrToSymbol pSym;
11148 : :
11149 : 162 : pSym = GetPsym (sym);
11150 : 162 : switch (pSym->SymbolType)
11151 : : {
11152 : 162 : case SymbolTable_ProcedureSym:
11153 : 162 : pSym->Procedure.SavePriority = true;
11154 : 162 : break;
11155 : :
11156 : :
11157 : 0 : default:
11158 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
11159 : 162 : break;
11160 : : }
11161 : 162 : }
11162 : :
11163 : :
11164 : : /*
11165 : : GetNeedSavePriority - returns the boolean flag indicating whether this procedure
11166 : : needs to save and restore interrupts.
11167 : : */
11168 : :
11169 : 680 : extern "C" bool SymbolTable_GetNeedSavePriority (unsigned int sym)
11170 : : {
11171 : 680 : SymbolTable_PtrToSymbol pSym;
11172 : :
11173 : 680 : pSym = GetPsym (sym);
11174 : 680 : switch (pSym->SymbolType)
11175 : : {
11176 : 680 : case SymbolTable_ProcedureSym:
11177 : 680 : return pSym->Procedure.SavePriority;
11178 : 0 : break;
11179 : :
11180 : :
11181 : 0 : default:
11182 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
11183 : : break;
11184 : : }
11185 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11186 : : __builtin_unreachable ();
11187 : : }
11188 : :
11189 : :
11190 : : /*
11191 : : PutVariableAtAddress - determines that a variable, sym, is declared at
11192 : : a specific address.
11193 : : */
11194 : :
11195 : 108 : extern "C" void SymbolTable_PutVariableAtAddress (unsigned int sym, unsigned int address)
11196 : : {
11197 : 108 : SymbolTable_PtrToSymbol pSym;
11198 : :
11199 : 108 : M2Debug_Assert (sym != SymbolTable_NulSym);
11200 : 108 : pSym = GetPsym (sym);
11201 : 108 : switch (pSym->SymbolType)
11202 : : {
11203 : 108 : case SymbolTable_VarSym:
11204 : 108 : pSym->Var.AtAddress = true;
11205 : 108 : pSym->Var.Address = address;
11206 : 108 : break;
11207 : :
11208 : :
11209 : 0 : default:
11210 : 0 : M2Error_InternalError ((const char *) "expecting a variable symbol", 27);
11211 : 108 : break;
11212 : : }
11213 : 108 : }
11214 : :
11215 : :
11216 : : /*
11217 : : GetVariableAtAddress - returns the address at which variable, sym, is declared.
11218 : : */
11219 : :
11220 : 54 : extern "C" unsigned int SymbolTable_GetVariableAtAddress (unsigned int sym)
11221 : : {
11222 : 54 : SymbolTable_PtrToSymbol pSym;
11223 : :
11224 : 54 : M2Debug_Assert (sym != SymbolTable_NulSym);
11225 : 54 : pSym = GetPsym (sym);
11226 : 54 : switch (pSym->SymbolType)
11227 : : {
11228 : 54 : case SymbolTable_VarSym:
11229 : 54 : return pSym->Var.Address;
11230 : 0 : break;
11231 : :
11232 : :
11233 : 0 : default:
11234 : 0 : M2Error_InternalError ((const char *) "expecting a variable symbol", 27);
11235 : : break;
11236 : : }
11237 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11238 : : __builtin_unreachable ();
11239 : : }
11240 : :
11241 : :
11242 : : /*
11243 : : IsVariableAtAddress - returns TRUE if a variable, sym, was declared at
11244 : : a specific address.
11245 : : */
11246 : :
11247 : 264592 : extern "C" bool SymbolTable_IsVariableAtAddress (unsigned int sym)
11248 : : {
11249 : 264592 : SymbolTable_PtrToSymbol pSym;
11250 : :
11251 : 264592 : M2Debug_Assert (sym != SymbolTable_NulSym);
11252 : 264592 : pSym = GetPsym (sym);
11253 : 264592 : switch (pSym->SymbolType)
11254 : : {
11255 : 264592 : case SymbolTable_VarSym:
11256 : 264592 : return pSym->Var.AtAddress;
11257 : 0 : break;
11258 : :
11259 : :
11260 : 0 : default:
11261 : 0 : M2Error_InternalError ((const char *) "expecting a variable symbol", 27);
11262 : : break;
11263 : : }
11264 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11265 : : __builtin_unreachable ();
11266 : : }
11267 : :
11268 : :
11269 : : /*
11270 : : PutVariableSSA - assigns value to the SSA field within variable sym.
11271 : : */
11272 : :
11273 : 0 : extern "C" void SymbolTable_PutVariableSSA (unsigned int sym, bool value)
11274 : : {
11275 : 0 : SymbolTable_PtrToSymbol pSym;
11276 : :
11277 : 0 : M2Debug_Assert (sym != SymbolTable_NulSym);
11278 : 0 : pSym = GetPsym (sym);
11279 : 0 : switch (pSym->SymbolType)
11280 : : {
11281 : 0 : case SymbolTable_VarSym:
11282 : 0 : pSym->Var.IsSSA = value;
11283 : 0 : break;
11284 : :
11285 : :
11286 : 0 : default:
11287 : 0 : M2Error_InternalError ((const char *) "expecting a variable symbol", 27);
11288 : 0 : break;
11289 : : }
11290 : 0 : }
11291 : :
11292 : :
11293 : : /*
11294 : : IsVariableSSA - returns TRUE if variable is known to be a SSA.
11295 : : */
11296 : :
11297 : 160649 : extern "C" bool SymbolTable_IsVariableSSA (unsigned int sym)
11298 : : {
11299 : 160649 : SymbolTable_PtrToSymbol pSym;
11300 : :
11301 : 160649 : M2Debug_Assert (sym != SymbolTable_NulSym);
11302 : 160649 : pSym = GetPsym (sym);
11303 : 160649 : switch (pSym->SymbolType)
11304 : : {
11305 : 160649 : case SymbolTable_VarSym:
11306 : 160649 : return pSym->Var.IsSSA;
11307 : 0 : break;
11308 : :
11309 : :
11310 : 0 : default:
11311 : 0 : M2Error_InternalError ((const char *) "expecting a variable symbol", 27);
11312 : : break;
11313 : : }
11314 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11315 : : __builtin_unreachable ();
11316 : : }
11317 : :
11318 : :
11319 : : /*
11320 : : PutVarConst - sets the IsConst field to value indicating the variable is read only.
11321 : : */
11322 : :
11323 : 159902 : extern "C" void SymbolTable_PutVarConst (unsigned int sym, bool value)
11324 : : {
11325 : 159902 : SymbolTable_PtrToSymbol pSym;
11326 : :
11327 : 159902 : if (SymbolTable_IsVar (sym))
11328 : : {
11329 : 159902 : pSym = GetPsym (sym);
11330 : 159902 : pSym->Var.IsConst = value;
11331 : : }
11332 : 159902 : }
11333 : :
11334 : :
11335 : : /*
11336 : : MakeGnuAsm - create a GnuAsm symbol.
11337 : : */
11338 : :
11339 : 24 : extern "C" unsigned int SymbolTable_MakeGnuAsm (void)
11340 : : {
11341 : 24 : SymbolTable_PtrToSymbol pSym;
11342 : 24 : unsigned int Sym;
11343 : :
11344 : 24 : NewSym (&Sym);
11345 : 24 : pSym = GetPsym (Sym);
11346 : 24 : pSym->SymbolType = SymbolTable_GnuAsmSym;
11347 : 24 : pSym->GnuAsm.String = SymbolTable_NulSym;
11348 : 24 : InitWhereDeclared (&pSym->GnuAsm.At);
11349 : 24 : pSym->GnuAsm.Inputs = SymbolTable_NulSym;
11350 : 24 : pSym->GnuAsm.Outputs = SymbolTable_NulSym;
11351 : 24 : pSym->GnuAsm.Trashed = SymbolTable_NulSym;
11352 : 24 : pSym->GnuAsm.Volatile = false;
11353 : 24 : pSym->GnuAsm.Simple = false;
11354 : 24 : return Sym;
11355 : : /* static analysis guarentees a RETURN statement will be used before here. */
11356 : : __builtin_unreachable ();
11357 : : }
11358 : :
11359 : :
11360 : : /*
11361 : : PutGnuAsm - places the instruction textual name into the GnuAsm symbol.
11362 : : */
11363 : :
11364 : 24 : extern "C" void SymbolTable_PutGnuAsm (unsigned int sym, unsigned int string)
11365 : : {
11366 : 24 : SymbolTable_PtrToSymbol pSym;
11367 : :
11368 : 24 : M2Debug_Assert (SymbolTable_IsConstString (string));
11369 : 24 : pSym = GetPsym (sym);
11370 : 24 : switch (pSym->SymbolType)
11371 : : {
11372 : 24 : case SymbolTable_GnuAsmSym:
11373 : 24 : pSym->GnuAsm.String = string;
11374 : 24 : break;
11375 : :
11376 : :
11377 : 0 : default:
11378 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11379 : 24 : break;
11380 : : }
11381 : 24 : }
11382 : :
11383 : :
11384 : : /*
11385 : : PutGnuAsmOutput - places the interface object, out, into GnuAsm symbol, sym.
11386 : : */
11387 : :
11388 : 18 : extern "C" void SymbolTable_PutGnuAsmOutput (unsigned int sym, unsigned int out)
11389 : : {
11390 : 18 : SymbolTable_PtrToSymbol pSym;
11391 : :
11392 : 18 : pSym = GetPsym (sym);
11393 : 18 : switch (pSym->SymbolType)
11394 : : {
11395 : 18 : case SymbolTable_GnuAsmSym:
11396 : 18 : pSym->GnuAsm.Outputs = out;
11397 : 18 : break;
11398 : :
11399 : :
11400 : 0 : default:
11401 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11402 : 18 : break;
11403 : : }
11404 : 18 : }
11405 : :
11406 : :
11407 : : /*
11408 : : PutGnuAsmInput - places the interface object, in, into GnuAsm symbol, sym.
11409 : : */
11410 : :
11411 : 12 : extern "C" void SymbolTable_PutGnuAsmInput (unsigned int sym, unsigned int in)
11412 : : {
11413 : 12 : SymbolTable_PtrToSymbol pSym;
11414 : :
11415 : 12 : pSym = GetPsym (sym);
11416 : 12 : switch (pSym->SymbolType)
11417 : : {
11418 : 12 : case SymbolTable_GnuAsmSym:
11419 : 12 : pSym->GnuAsm.Inputs = in;
11420 : 12 : break;
11421 : :
11422 : :
11423 : 0 : default:
11424 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11425 : 12 : break;
11426 : : }
11427 : 12 : }
11428 : :
11429 : :
11430 : : /*
11431 : : PutGnuAsmTrash - places the interface object, trash, into GnuAsm symbol, sym.
11432 : : */
11433 : :
11434 : 6 : extern "C" void SymbolTable_PutGnuAsmTrash (unsigned int sym, unsigned int trash)
11435 : : {
11436 : 6 : SymbolTable_PtrToSymbol pSym;
11437 : :
11438 : 6 : pSym = GetPsym (sym);
11439 : 6 : switch (pSym->SymbolType)
11440 : : {
11441 : 6 : case SymbolTable_GnuAsmSym:
11442 : 6 : pSym->GnuAsm.Trashed = trash;
11443 : 6 : break;
11444 : :
11445 : :
11446 : 0 : default:
11447 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11448 : 6 : break;
11449 : : }
11450 : 6 : }
11451 : :
11452 : :
11453 : : /*
11454 : : GetGnuAsm - returns the string symbol, representing the instruction textual
11455 : : of the GnuAsm symbol. It will return a ConstString.
11456 : : */
11457 : :
11458 : 24 : extern "C" unsigned int SymbolTable_GetGnuAsm (unsigned int sym)
11459 : : {
11460 : 24 : SymbolTable_PtrToSymbol pSym;
11461 : :
11462 : 24 : pSym = GetPsym (sym);
11463 : 24 : switch (pSym->SymbolType)
11464 : : {
11465 : 24 : case SymbolTable_GnuAsmSym:
11466 : 24 : return pSym->GnuAsm.String;
11467 : 0 : break;
11468 : :
11469 : :
11470 : 0 : default:
11471 : 0 : M2Error_InternalError ((const char *) "expecting GnuAsm symbol", 23);
11472 : : break;
11473 : : }
11474 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11475 : : __builtin_unreachable ();
11476 : : }
11477 : :
11478 : :
11479 : : /*
11480 : : GetGnuAsmInput - returns the input list of registers.
11481 : : */
11482 : :
11483 : 24 : extern "C" unsigned int SymbolTable_GetGnuAsmInput (unsigned int sym)
11484 : : {
11485 : 24 : SymbolTable_PtrToSymbol pSym;
11486 : :
11487 : 24 : pSym = GetPsym (sym);
11488 : 24 : switch (pSym->SymbolType)
11489 : : {
11490 : 24 : case SymbolTable_GnuAsmSym:
11491 : 24 : return pSym->GnuAsm.Inputs;
11492 : 0 : break;
11493 : :
11494 : :
11495 : 0 : default:
11496 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11497 : : break;
11498 : : }
11499 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11500 : : __builtin_unreachable ();
11501 : : }
11502 : :
11503 : :
11504 : : /*
11505 : : GetGnuAsmOutput - returns the output list of registers.
11506 : : */
11507 : :
11508 : 24 : extern "C" unsigned int SymbolTable_GetGnuAsmOutput (unsigned int sym)
11509 : : {
11510 : 24 : SymbolTable_PtrToSymbol pSym;
11511 : :
11512 : 24 : pSym = GetPsym (sym);
11513 : 24 : switch (pSym->SymbolType)
11514 : : {
11515 : 24 : case SymbolTable_GnuAsmSym:
11516 : 24 : return pSym->GnuAsm.Outputs;
11517 : 0 : break;
11518 : :
11519 : :
11520 : 0 : default:
11521 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11522 : : break;
11523 : : }
11524 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11525 : : __builtin_unreachable ();
11526 : : }
11527 : :
11528 : :
11529 : : /*
11530 : : GetGnuAsmTrash - returns the list of trashed registers.
11531 : : */
11532 : :
11533 : 24 : extern "C" unsigned int SymbolTable_GetGnuAsmTrash (unsigned int sym)
11534 : : {
11535 : 24 : SymbolTable_PtrToSymbol pSym;
11536 : :
11537 : 24 : pSym = GetPsym (sym);
11538 : 24 : switch (pSym->SymbolType)
11539 : : {
11540 : 24 : case SymbolTable_GnuAsmSym:
11541 : 24 : return pSym->GnuAsm.Trashed;
11542 : 0 : break;
11543 : :
11544 : :
11545 : 0 : default:
11546 : 0 : M2Error_InternalError ((const char *) "expecting PutGnuAsm symbol", 26);
11547 : : break;
11548 : : }
11549 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
11550 : : __builtin_unreachable ();
11551 : : }
11552 : :
11553 : :
11554 : : /*
11555 : : PutGnuAsmVolatile - defines a GnuAsm symbol as VOLATILE.
11556 : : */
11557 : :
11558 : 12 : extern "C" void SymbolTable_PutGnuAsmVolatile (unsigned int Sym)
11559 : : {
11560 : 12 : SymbolTable_PtrToSymbol pSym;
11561 : :
11562 : 12 : pSym = GetPsym (Sym);
11563 : 12 : switch (pSym->SymbolType)
11564 : : {
11565 : 12 : case SymbolTable_GnuAsmSym:
11566 : 12 : pSym->GnuAsm.Volatile = true;
11567 : 12 : break;
11568 : :
11569 : :
11570 : 0 : default:
11571 : 0 : M2Error_InternalError ((const char *) "expecting GnuAsm symbol", 23);
11572 : 12 : break;
11573 : : }
11574 : 12 : }
11575 : :
11576 : :
11577 : : /*
11578 : : PutGnuAsmSimple - defines a GnuAsm symbol as a simple kind.
11579 : : */
11580 : :
11581 : 6 : extern "C" void SymbolTable_PutGnuAsmSimple (unsigned int Sym)
11582 : : {
11583 : 6 : SymbolTable_PtrToSymbol pSym;
11584 : :
11585 : 6 : pSym = GetPsym (Sym);
11586 : 6 : switch (pSym->SymbolType)
11587 : : {
11588 : 6 : case SymbolTable_GnuAsmSym:
11589 : 6 : pSym->GnuAsm.Simple = true;
11590 : 6 : break;
11591 : :
11592 : :
11593 : 0 : default:
11594 : 0 : M2Error_InternalError ((const char *) "expecting GnuAsm symbol", 23);
11595 : 6 : break;
11596 : : }
11597 : 6 : }
11598 : :
11599 : :
11600 : : /*
11601 : : MakeRegInterface - creates and returns a register interface symbol.
11602 : : */
11603 : :
11604 : 24 : extern "C" unsigned int SymbolTable_MakeRegInterface (void)
11605 : : {
11606 : 24 : SymbolTable_PtrToSymbol pSym;
11607 : 24 : unsigned int Sym;
11608 : :
11609 : 24 : NewSym (&Sym);
11610 : 24 : pSym = GetPsym (Sym);
11611 : 24 : pSym->SymbolType = SymbolTable_InterfaceSym;
11612 : 24 : pSym->Interface.Parameters = Indexing_InitIndex (1);
11613 : 24 : InitWhereDeclared (&pSym->Interface.At);
11614 : 24 : return Sym;
11615 : : /* static analysis guarentees a RETURN statement will be used before here. */
11616 : : __builtin_unreachable ();
11617 : : }
11618 : :
11619 : :
11620 : : /*
11621 : : PutRegInterface - places a, name, string, and, object, into the interface array,
11622 : : sym, at position, i.
11623 : : The string symbol will either be a register name or a constraint.
11624 : : The object is an optional Modula-2 variable or constant symbol.
11625 : : read and write are the quadruple numbers representing any read
11626 : : or write operation.
11627 : : */
11628 : :
11629 : 24 : extern "C" void SymbolTable_PutRegInterface (unsigned int tok, unsigned int sym, unsigned int i, NameKey_Name n, unsigned int string, unsigned int object, unsigned int read_, unsigned int write_)
11630 : : {
11631 : 24 : SymbolTable_PtrToSymbol pSym;
11632 : 24 : SymbolTable_PtrToAsmConstraint p;
11633 : :
11634 : 24 : pSym = GetPsym (sym);
11635 : 24 : switch (pSym->SymbolType)
11636 : : {
11637 : 24 : case SymbolTable_InterfaceSym:
11638 : 24 : if (Indexing_InBounds (pSym->Interface.Parameters, i))
11639 : : {
11640 : 0 : p = static_cast<SymbolTable_PtrToAsmConstraint> (Indexing_GetIndice (pSym->Interface.Parameters, i));
11641 : : }
11642 : 24 : else if (i == ((Indexing_HighIndice (pSym->Interface.Parameters))+1))
11643 : : {
11644 : : /* avoid dangling else. */
11645 : 24 : Storage_ALLOCATE ((void **) &p, sizeof (SymbolTable__T5));
11646 : 24 : Indexing_PutIndice (pSym->Interface.Parameters, i, reinterpret_cast <void *> (p));
11647 : : }
11648 : : else
11649 : : {
11650 : : /* avoid dangling else. */
11651 : 0 : M2Error_InternalError ((const char *) "expecting to add parameters sequentially", 40);
11652 : : }
11653 : 24 : p->tokpos = tok;
11654 : 24 : p->name = n;
11655 : 24 : p->str = string;
11656 : 24 : p->obj = object;
11657 : 24 : PutFirstUsed (object, tok, read_, write_);
11658 : 24 : break;
11659 : :
11660 : :
11661 : 0 : default:
11662 : 0 : M2Error_InternalError ((const char *) "expecting Interface symbol", 26);
11663 : 24 : break;
11664 : : }
11665 : 24 : }
11666 : :
11667 : :
11668 : : /*
11669 : : GetRegInterface - gets a, name, string, and, object, from the interface array,
11670 : : sym, from position, i.
11671 : : */
11672 : :
11673 : 48 : extern "C" void SymbolTable_GetRegInterface (unsigned int sym, unsigned int i, unsigned int *tok, NameKey_Name *n, unsigned int *string, unsigned int *object)
11674 : : {
11675 : 48 : SymbolTable_PtrToSymbol pSym;
11676 : 48 : SymbolTable_PtrToAsmConstraint p;
11677 : :
11678 : 48 : pSym = GetPsym (sym);
11679 : 48 : switch (pSym->SymbolType)
11680 : : {
11681 : 48 : case SymbolTable_InterfaceSym:
11682 : 48 : if (Indexing_InBounds (pSym->Interface.Parameters, i))
11683 : : {
11684 : 24 : p = static_cast<SymbolTable_PtrToAsmConstraint> (Indexing_GetIndice (pSym->Interface.Parameters, i));
11685 : 24 : (*tok) = p->tokpos;
11686 : 24 : (*n) = p->name;
11687 : 24 : (*string) = p->str;
11688 : 24 : (*object) = p->obj;
11689 : : }
11690 : : else
11691 : : {
11692 : 24 : (*tok) = M2LexBuf_UnknownTokenNo;
11693 : 24 : (*n) = NameKey_NulName;
11694 : 24 : (*string) = SymbolTable_NulSym;
11695 : 24 : (*object) = SymbolTable_NulSym;
11696 : : }
11697 : 48 : break;
11698 : :
11699 : :
11700 : 0 : default:
11701 : 0 : M2Error_InternalError ((const char *) "expecting Interface symbol", 26);
11702 : 48 : break;
11703 : : }
11704 : 48 : }
11705 : :
11706 : :
11707 : : /*
11708 : : GetModule - Returns the Module symbol for the module with name, name.
11709 : : */
11710 : :
11711 : 291253 : extern "C" unsigned int SymbolTable_GetModule (NameKey_Name name)
11712 : : {
11713 : 291253 : return static_cast<unsigned int> (SymbolKey_GetSymKey (ModuleTree, name));
11714 : : /* static analysis guarentees a RETURN statement will be used before here. */
11715 : : __builtin_unreachable ();
11716 : : }
11717 : :
11718 : :
11719 : : /*
11720 : : GetCurrentModule - returns the current module Sym that is being
11721 : : compiled.
11722 : : */
11723 : :
11724 : 24282377 : extern "C" unsigned int SymbolTable_GetCurrentModule (void)
11725 : : {
11726 : 24282377 : return CurrentModule;
11727 : : /* static analysis guarentees a RETURN statement will be used before here. */
11728 : : __builtin_unreachable ();
11729 : : }
11730 : :
11731 : :
11732 : : /*
11733 : : GetFileModule - returns the FileModule symbol that was requested by
11734 : : the user to be compiled.
11735 : : */
11736 : :
11737 : 218831 : extern "C" unsigned int SymbolTable_GetFileModule (void)
11738 : : {
11739 : 218831 : return FileModule;
11740 : : /* static analysis guarentees a RETURN statement will be used before here. */
11741 : : __builtin_unreachable ();
11742 : : }
11743 : :
11744 : :
11745 : : /*
11746 : : GetBaseModule - returns the base module symbol that contains Modula-2
11747 : : base types, procedures and functions.
11748 : : */
11749 : :
11750 : 4952272 : extern "C" unsigned int SymbolTable_GetBaseModule (void)
11751 : : {
11752 : 4952272 : return BaseModule;
11753 : : /* static analysis guarentees a RETURN statement will be used before here. */
11754 : : __builtin_unreachable ();
11755 : : }
11756 : :
11757 : :
11758 : : /*
11759 : : GetMainModule - returns the main module symbol that was requested by
11760 : : the user to be compiled.
11761 : : */
11762 : :
11763 : 12796711 : extern "C" unsigned int SymbolTable_GetMainModule (void)
11764 : : {
11765 : 12796711 : return MainModule;
11766 : : /* static analysis guarentees a RETURN statement will be used before here. */
11767 : : __builtin_unreachable ();
11768 : : }
11769 : :
11770 : :
11771 : : /*
11772 : : GetCurrentModuleScope - returns the module symbol which forms the
11773 : : current (possibly inner most) module.
11774 : : */
11775 : :
11776 : 1439515 : extern "C" unsigned int SymbolTable_GetCurrentModuleScope (void)
11777 : : {
11778 : 1439515 : SymbolTable_PtrToCallFrame pCall;
11779 : 1439515 : unsigned int i;
11780 : :
11781 : 1439515 : i = ScopePtr;
11782 : 1439515 : pCall = GetPcall (i);
11783 : 3429567 : while ((! (SymbolTable_IsModule (pCall->Search))) && (! (SymbolTable_IsDefImp (pCall->Search))))
11784 : : {
11785 : 550537 : M2Debug_Assert (i > 0);
11786 : 550537 : i -= 1;
11787 : 550537 : pCall = GetPcall (i);
11788 : : }
11789 : 1439515 : return pCall->Search;
11790 : : /* static analysis guarentees a RETURN statement will be used before here. */
11791 : : __builtin_unreachable ();
11792 : : }
11793 : :
11794 : :
11795 : : /*
11796 : : GetLastModuleScope - returns the last module scope encountered,
11797 : : the module scope before the Current Module Scope.
11798 : : */
11799 : :
11800 : 0 : extern "C" unsigned int SymbolTable_GetLastModuleScope (void)
11801 : : {
11802 : 0 : SymbolTable_PtrToCallFrame pCall;
11803 : 0 : unsigned int i;
11804 : :
11805 : 0 : i = ScopePtr;
11806 : 0 : pCall = GetPcall (i);
11807 : 0 : while ((! (SymbolTable_IsModule (pCall->Search))) && (! (SymbolTable_IsDefImp (pCall->Search))))
11808 : : {
11809 : 0 : M2Debug_Assert (i > 0);
11810 : 0 : i -= 1;
11811 : 0 : pCall = GetPcall (i);
11812 : : }
11813 : : /* Found module at position, i. */
11814 : 0 : i -= 1; /* Move to an outer level module scope */
11815 : 0 : pCall = GetPcall (i); /* Move to an outer level module scope */
11816 : 0 : while ((! (SymbolTable_IsModule (pCall->Search))) && (! (SymbolTable_IsDefImp (pCall->Search))))
11817 : : {
11818 : 0 : M2Debug_Assert (i > 0);
11819 : 0 : i -= 1;
11820 : 0 : pCall = GetPcall (i);
11821 : : }
11822 : : /* Found module at position, i. */
11823 : 0 : return pCall->Search;
11824 : : /* static analysis guarentees a RETURN statement will be used before here. */
11825 : : __builtin_unreachable ();
11826 : : }
11827 : :
11828 : :
11829 : : /*
11830 : : AddSymToModuleScope - adds a symbol, Sym, to the scope of the module
11831 : : ModSym.
11832 : : */
11833 : :
11834 : 718409 : extern "C" void SymbolTable_AddSymToModuleScope (unsigned int ModSym, unsigned int Sym)
11835 : : {
11836 : 718409 : SymbolTable_PtrToSymbol pSym;
11837 : :
11838 : 718409 : pSym = GetPsym (ModSym);
11839 : 718409 : switch (pSym->SymbolType)
11840 : : {
11841 : 609154 : case SymbolTable_DefImpSym:
11842 : 609154 : if ((SymbolKey_GetSymKey (pSym->DefImp.LocalSymbols, SymbolTable_GetSymName (Sym))) == SymbolKey_NulKey)
11843 : : {
11844 : 609154 : SymbolKey_PutSymKey (pSym->DefImp.LocalSymbols, SymbolTable_GetSymName (Sym), Sym);
11845 : : }
11846 : : else
11847 : : {
11848 : 0 : M2MetaError_MetaError1 ((const char *) "{%kIMPORT} name clash with symbol {%1Ead} symbol already declared ", 66, Sym);
11849 : : }
11850 : : break;
11851 : :
11852 : 109195 : case SymbolTable_ModuleSym:
11853 : 109195 : if ((SymbolKey_GetSymKey (pSym->Module.LocalSymbols, SymbolTable_GetSymName (Sym))) == SymbolKey_NulKey)
11854 : : {
11855 : 109195 : SymbolKey_PutSymKey (pSym->Module.LocalSymbols, SymbolTable_GetSymName (Sym), Sym);
11856 : : }
11857 : : else
11858 : : {
11859 : 0 : M2MetaError_MetaError1 ((const char *) "{%kIMPORT} name clash with symbol {%1Ead} symbol already declared ", 66, Sym);
11860 : : }
11861 : : break;
11862 : :
11863 : 60 : case SymbolTable_ProcedureSym:
11864 : 60 : if ((SymbolKey_GetSymKey (pSym->Procedure.LocalSymbols, SymbolTable_GetSymName (Sym))) == SymbolKey_NulKey)
11865 : : {
11866 : 60 : SymbolKey_PutSymKey (pSym->Procedure.LocalSymbols, SymbolTable_GetSymName (Sym), Sym);
11867 : : }
11868 : : else
11869 : : {
11870 : 0 : M2MetaError_MetaError1 ((const char *) "{%kIMPORT} name clash with symbol {%1Ead} symbol already declared ", 66, Sym);
11871 : : }
11872 : : break;
11873 : :
11874 : :
11875 : 0 : default:
11876 : 0 : M2Error_InternalError ((const char *) "expecting Module or DefImp symbol", 33);
11877 : 718409 : break;
11878 : : }
11879 : 718409 : }
11880 : :
11881 : :
11882 : : /*
11883 : : GetType - Returns the symbol that is the TYPE symbol to Sym.
11884 : : If zero is returned then we assume type unknown.
11885 : : */
11886 : :
11887 : 203402654 : extern "C" unsigned int SymbolTable_GetType (unsigned int Sym)
11888 : : {
11889 : 203402654 : SymbolTable_PtrToSymbol pSym;
11890 : 203402654 : unsigned int type;
11891 : :
11892 : 203402654 : M2Debug_Assert (Sym != SymbolTable_NulSym);
11893 : 203402654 : pSym = GetPsym (Sym);
11894 : 203402654 : switch (pSym->SymbolType)
11895 : : {
11896 : 0 : case SymbolTable_OAFamilySym:
11897 : 0 : type = pSym->OAFamily.SimpleType;
11898 : 0 : break;
11899 : :
11900 : 36992152 : case SymbolTable_VarSym:
11901 : 36992152 : type = GetTypeOfVar (Sym);
11902 : 36992152 : break;
11903 : :
11904 : 12179618 : case SymbolTable_ConstLitSym:
11905 : 12179618 : type = pSym->ConstLit.Type;
11906 : 12179618 : break;
11907 : :
11908 : 11191410 : case SymbolTable_ConstVarSym:
11909 : 11191410 : type = pSym->ConstVar.Type;
11910 : 11191410 : break;
11911 : :
11912 : 4463408 : case SymbolTable_ConstStringSym:
11913 : 4463408 : if (pSym->ConstString.Length == 1)
11914 : : {
11915 : 657284 : type = M2Base_Char;
11916 : : }
11917 : : else
11918 : : {
11919 : : type = SymbolTable_NulSym; /* No type for a string */
11920 : : }
11921 : : break;
11922 : :
11923 : 34138741 : case SymbolTable_TypeSym:
11924 : 34138741 : type = pSym->Type.Type;
11925 : 34138741 : break;
11926 : :
11927 : 39977452 : case SymbolTable_RecordFieldSym:
11928 : 39977452 : type = pSym->RecordField.Type;
11929 : 39977452 : break;
11930 : :
11931 : : case SymbolTable_RecordSym:
11932 : : type = SymbolTable_NulSym; /* No type for a record */
11933 : : break;
11934 : :
11935 : : case SymbolTable_VarientSym:
11936 : : type = SymbolTable_NulSym; /* No type for a record */
11937 : : break;
11938 : :
11939 : 15134553 : case SymbolTable_EnumerationFieldSym:
11940 : 15134553 : type = pSym->EnumerationField.Type; /* No type for a record */
11941 : 15134553 : break;
11942 : :
11943 : : case SymbolTable_EnumerationSym:
11944 : : type = SymbolTable_NulSym; /* No type for enumeration */
11945 : : break;
11946 : :
11947 : 14460780 : case SymbolTable_PointerSym:
11948 : 14460780 : type = pSym->Pointer.Type; /* No type for enumeration */
11949 : 14460780 : break;
11950 : :
11951 : 6184080 : case SymbolTable_ProcedureSym:
11952 : 6184080 : type = pSym->Procedure.ReturnType;
11953 : 6184080 : break;
11954 : :
11955 : 2781073 : case SymbolTable_ProcTypeSym:
11956 : 2781073 : type = pSym->ProcType.ReturnType;
11957 : 2781073 : break;
11958 : :
11959 : 13986529 : case SymbolTable_ParamSym:
11960 : 13986529 : type = pSym->Param.Type;
11961 : 13986529 : break;
11962 : :
11963 : 2006062 : case SymbolTable_VarParamSym:
11964 : 2006062 : type = pSym->VarParam.Type;
11965 : 2006062 : break;
11966 : :
11967 : 2408087 : case SymbolTable_SubrangeSym:
11968 : 2408087 : type = pSym->Subrange.Type;
11969 : 2408087 : break;
11970 : :
11971 : 922182 : case SymbolTable_ArraySym:
11972 : 922182 : type = pSym->Array.Type;
11973 : 922182 : break;
11974 : :
11975 : 865800 : case SymbolTable_SubscriptSym:
11976 : 865800 : type = pSym->Subscript.Type;
11977 : 865800 : break;
11978 : :
11979 : 570972 : case SymbolTable_SetSym:
11980 : 570972 : type = pSym->Set.Type;
11981 : 570972 : break;
11982 : :
11983 : 4222613 : case SymbolTable_UnboundedSym:
11984 : 4222613 : type = pSym->Unbounded.Type;
11985 : 4222613 : break;
11986 : :
11987 : : case SymbolTable_UndefinedSym:
11988 : : type = SymbolTable_NulSym;
11989 : : break;
11990 : :
11991 : 0 : case SymbolTable_PartialUnboundedSym:
11992 : 0 : type = pSym->PartialUnbounded.Type;
11993 : 0 : break;
11994 : :
11995 : : case SymbolTable_ObjectSym:
11996 : : type = SymbolTable_NulSym;
11997 : : break;
11998 : :
11999 : :
12000 : 0 : default:
12001 : 0 : M2Error_InternalError ((const char *) "not implemented yet", 19);
12002 : 203402654 : break;
12003 : : }
12004 : 203402654 : return type;
12005 : : /* static analysis guarentees a RETURN statement will be used before here. */
12006 : : __builtin_unreachable ();
12007 : : }
12008 : :
12009 : :
12010 : : /*
12011 : : SkipType - if sym is a TYPE foo = bar
12012 : : then call SkipType(bar)
12013 : : else return sym
12014 : :
12015 : : it does not skip over hidden types.
12016 : : */
12017 : :
12018 : 35197815 : extern "C" unsigned int SymbolTable_SkipType (unsigned int Sym)
12019 : : {
12020 : 35428535 : if ((((Sym != SymbolTable_NulSym) && (SymbolTable_IsType (Sym))) && (! (SymbolTable_IsHiddenType (Sym)))) && ((SymbolTable_GetType (Sym)) != SymbolTable_NulSym))
12021 : : {
12022 : 230720 : return SymbolTable_SkipType (SymbolTable_GetType (Sym));
12023 : : }
12024 : : else
12025 : : {
12026 : 35197815 : return Sym;
12027 : : }
12028 : : /* static analysis guarentees a RETURN statement will be used before here. */
12029 : : __builtin_unreachable ();
12030 : : }
12031 : :
12032 : :
12033 : : /*
12034 : : SkipTypeAndSubrange - if sym is a TYPE foo = bar OR
12035 : : sym is declared as a subrange of bar
12036 : : then call SkipTypeAndSubrange(bar)
12037 : : else return sym
12038 : :
12039 : : it does not skip over hidden types.
12040 : : */
12041 : :
12042 : 4290 : extern "C" unsigned int SymbolTable_SkipTypeAndSubrange (unsigned int Sym)
12043 : : {
12044 : 4338 : if ((((Sym != SymbolTable_NulSym) && ((SymbolTable_IsType (Sym)) || (SymbolTable_IsSubrange (Sym)))) && (! (SymbolTable_IsHiddenType (Sym)))) && ((SymbolTable_GetType (Sym)) != SymbolTable_NulSym))
12045 : : {
12046 : 48 : return SymbolTable_SkipTypeAndSubrange (SymbolTable_GetType (Sym));
12047 : : }
12048 : : else
12049 : : {
12050 : 4290 : return Sym;
12051 : : }
12052 : : /* static analysis guarentees a RETURN statement will be used before here. */
12053 : : __builtin_unreachable ();
12054 : : }
12055 : :
12056 : :
12057 : : /*
12058 : : GetLowestType - Returns the lowest type in the type chain of
12059 : : symbol Sym.
12060 : : If NulSym is returned then we assume type unknown or
12061 : : you have reqested the type of a base type.
12062 : : */
12063 : :
12064 : 1208230 : extern "C" unsigned int SymbolTable_GetLowestType (unsigned int Sym)
12065 : : {
12066 : 2094129 : SymbolTable_PtrToSymbol pSym;
12067 : 2094129 : unsigned int type;
12068 : :
12069 : 2094129 : M2Debug_Assert (Sym != SymbolTable_NulSym);
12070 : 2094129 : pSym = GetPsym (Sym);
12071 : 2094129 : switch (pSym->SymbolType)
12072 : : {
12073 : 376814 : case SymbolTable_VarSym:
12074 : 376814 : type = pSym->Var.Type;
12075 : 376814 : break;
12076 : :
12077 : 243461 : case SymbolTable_ConstLitSym:
12078 : 243461 : type = pSym->ConstLit.Type;
12079 : 243461 : break;
12080 : :
12081 : 311307 : case SymbolTable_ConstVarSym:
12082 : 311307 : type = pSym->ConstVar.Type;
12083 : 311307 : break;
12084 : :
12085 : : case SymbolTable_ConstStringSym:
12086 : : type = SymbolTable_NulSym; /* No type for a string */
12087 : : break;
12088 : :
12089 : 907762 : case SymbolTable_TypeSym:
12090 : 907762 : type = pSym->Type.Type; /* No type for a string */
12091 : 907762 : break;
12092 : :
12093 : 0 : case SymbolTable_RecordFieldSym:
12094 : 0 : type = pSym->RecordField.Type;
12095 : 0 : break;
12096 : :
12097 : : case SymbolTable_RecordSym:
12098 : : type = SymbolTable_NulSym; /* No type for a record */
12099 : : break;
12100 : :
12101 : 30773 : case SymbolTable_EnumerationFieldSym:
12102 : 30773 : type = pSym->EnumerationField.Type; /* No type for a record */
12103 : 30773 : break;
12104 : :
12105 : : case SymbolTable_EnumerationSym:
12106 : : type = SymbolTable_NulSym; /* No type for enumeration */
12107 : : break;
12108 : :
12109 : : case SymbolTable_PointerSym:
12110 : 21346 : type = Sym; /* we don't go to Pointer.Type */
12111 : : break;
12112 : :
12113 : 44476 : case SymbolTable_ProcedureSym:
12114 : 44476 : type = pSym->Procedure.ReturnType; /* we don't go to Pointer.Type */
12115 : 44476 : break;
12116 : :
12117 : 24 : case SymbolTable_ProcTypeSym:
12118 : 24 : type = pSym->ProcType.ReturnType;
12119 : 24 : break;
12120 : :
12121 : 109930 : case SymbolTable_ParamSym:
12122 : 109930 : type = pSym->Param.Type;
12123 : 109930 : break;
12124 : :
12125 : 5584 : case SymbolTable_VarParamSym:
12126 : 5584 : type = pSym->VarParam.Type;
12127 : 5584 : break;
12128 : :
12129 : 48 : case SymbolTable_SubrangeSym:
12130 : 48 : type = pSym->Subrange.Type;
12131 : 48 : break;
12132 : :
12133 : 24 : case SymbolTable_ArraySym:
12134 : 24 : type = pSym->Array.Type;
12135 : 24 : break;
12136 : :
12137 : 39046 : case SymbolTable_SubscriptSym:
12138 : 39046 : type = pSym->Subscript.Type;
12139 : 39046 : break;
12140 : :
12141 : : case SymbolTable_SetSym:
12142 : 21346 : type = Sym; /* Stop at the set type. */
12143 : : break;
12144 : :
12145 : 0 : case SymbolTable_UnboundedSym:
12146 : 0 : type = pSym->Unbounded.Type; /* Stop at the set type. */
12147 : 0 : break;
12148 : :
12149 : : case SymbolTable_UndefinedSym:
12150 : : type = SymbolTable_NulSym;
12151 : : break;
12152 : :
12153 : : case SymbolTable_DummySym:
12154 : : type = SymbolTable_NulSym;
12155 : : break;
12156 : :
12157 : :
12158 : 0 : default:
12159 : 0 : M2Error_InternalError ((const char *) "not implemented yet", 19);
12160 : 2094129 : break;
12161 : : }
12162 : 2094129 : pSym = GetPsym (Sym);
12163 : 2094129 : if ((pSym->SymbolType == SymbolTable_TypeSym) && (type == SymbolTable_NulSym))
12164 : : {
12165 : : type = Sym; /* Base Type */
12166 : : }
12167 : 1206753 : else if (((type != SymbolTable_NulSym) && (SymbolTable_IsType (type))) && ((SymbolTable_GetAlignment (type)) == SymbolTable_NulSym))
12168 : : {
12169 : : /* avoid dangling else. */
12170 : : type = SymbolTable_GetLowestType (type); /* Type def */
12171 : : }
12172 : 1208230 : return type;
12173 : : /* static analysis guarentees a RETURN statement will be used before here. */
12174 : : __builtin_unreachable ();
12175 : : }
12176 : :
12177 : :
12178 : : /*
12179 : : GetLType - get lowest type. It returns the lowest type
12180 : : of symbol, sym. It skips over type equivalences.
12181 : : It will not skip over base types.
12182 : : */
12183 : :
12184 : 5540299 : extern "C" unsigned int SymbolTable_GetLType (unsigned int sym)
12185 : : {
12186 : : /*
12187 : : Assert (doGetType (sym, TRUE, TRUE, TRUE, FALSE) = GetLowestType (sym)) ;
12188 : : */
12189 : 5540299 : return doGetType (sym, true, true, true, false);
12190 : : /* static analysis guarentees a RETURN statement will be used before here. */
12191 : : __builtin_unreachable ();
12192 : : }
12193 : :
12194 : :
12195 : : /*
12196 : : GetSType - get source type. It returns the type closest
12197 : : to the object. It does not skip over type
12198 : : equivalences. It will skip over base types.
12199 : : */
12200 : :
12201 : 147767669 : extern "C" unsigned int SymbolTable_GetSType (unsigned int sym)
12202 : : {
12203 : 147767669 : M2Debug_Assert ((doGetType (sym, false, false, false, true)) == (SymbolTable_GetType (sym)));
12204 : 147767669 : return doGetType (sym, false, false, false, true);
12205 : : /* static analysis guarentees a RETURN statement will be used before here. */
12206 : : __builtin_unreachable ();
12207 : : }
12208 : :
12209 : :
12210 : : /*
12211 : : GetDType - get gcc declared type. It returns the type
12212 : : of the object which is declared to GCC.
12213 : : It does skip over type equivalences but only
12214 : : if they do not contain a user alignment.
12215 : : It does not skip over hidden types.
12216 : : It does not skip over base types.
12217 : : */
12218 : :
12219 : 11529578 : extern "C" unsigned int SymbolTable_GetDType (unsigned int sym)
12220 : : {
12221 : : /*
12222 : : Assert (doGetType (sym, TRUE, FALSE, FALSE, FALSE) = SkipType(GetType(sym))) ;
12223 : : */
12224 : 11529578 : return doGetType (sym, true, false, false, false);
12225 : : /* static analysis guarentees a RETURN statement will be used before here. */
12226 : : __builtin_unreachable ();
12227 : : }
12228 : :
12229 : :
12230 : : /*
12231 : : GetTypeMode - return the type of sym, it returns Address is the
12232 : : symbol is a LValue.
12233 : : */
12234 : :
12235 : 16250 : extern "C" unsigned int SymbolTable_GetTypeMode (unsigned int sym)
12236 : : {
12237 : 16250 : if ((SymbolTable_GetMode (sym)) == SymbolTable_LeftValue)
12238 : : {
12239 : 90 : return M2System_Address;
12240 : : }
12241 : : else
12242 : : {
12243 : 16160 : return SymbolTable_GetType (sym);
12244 : : }
12245 : : /* static analysis guarentees a RETURN statement will be used before here. */
12246 : : __builtin_unreachable ();
12247 : : }
12248 : :
12249 : :
12250 : : /*
12251 : : GetSym - searches the current scope (and previous scopes if the
12252 : : scope tranparent allows) for a symbol with name.
12253 : : */
12254 : :
12255 : 39373720 : extern "C" unsigned int SymbolTable_GetSym (NameKey_Name name)
12256 : : {
12257 : 39373720 : unsigned int Sym;
12258 : 39373720 : unsigned int OldScopePtr;
12259 : :
12260 : 39373720 : Sym = GetScopeSym (name, true);
12261 : 39373720 : if (Sym == SymbolTable_NulSym)
12262 : : {
12263 : : /* Check default base types for symbol */
12264 : 13889699 : OldScopePtr = ScopePtr; /* Save ScopePtr */
12265 : 13889699 : ScopePtr = BaseScopePtr; /* Alter ScopePtr to point to top of BaseModule */
12266 : 13889699 : Sym = GetScopeSym (name, false); /* Search BaseModule for name */
12267 : 13889699 : ScopePtr = OldScopePtr; /* Restored ScopePtr */
12268 : : }
12269 : 39373720 : return Sym;
12270 : : /* static analysis guarentees a RETURN statement will be used before here. */
12271 : : __builtin_unreachable ();
12272 : : }
12273 : :
12274 : :
12275 : : /*
12276 : : GetDeclareSym - searches for a symbol with a name SymName in the
12277 : : current and previous scopes.
12278 : : If the symbol is found then it is returned
12279 : : else an unknown symbol is returned.
12280 : : This procedure assumes that SymName is being
12281 : : declared at this point and therefore it does
12282 : : not examine the base scope (for pervasive
12283 : : identifiers).
12284 : : */
12285 : :
12286 : 5590885 : extern "C" unsigned int SymbolTable_GetDeclareSym (unsigned int tok, NameKey_Name SymName)
12287 : : {
12288 : 5590885 : unsigned int Sym;
12289 : :
12290 : 5590885 : Sym = GetScopeSym (SymName, false); /* must not be allowed to fetch a symbol through a procedure scope */
12291 : 5590885 : if (Sym == SymbolTable_NulSym) /* must not be allowed to fetch a symbol through a procedure scope */
12292 : : {
12293 : 2234868 : Sym = GetSymFromUnknownTree (SymName);
12294 : 2234868 : if (Sym == SymbolTable_NulSym)
12295 : : {
12296 : : /* Make unknown */
12297 : 2234868 : NewSym (&Sym);
12298 : 2234868 : FillInUnknownFields (tok, Sym, SymName);
12299 : : /*
12300 : : ; WriteKey(SymName) ; WriteString(' unknown demanded') ; WriteLn
12301 : : */
12302 : 2234868 : AddSymToUnknownTree (static_cast<int> (ScopePtr), SymName, Sym);
12303 : : }
12304 : : }
12305 : 5590885 : return Sym;
12306 : : /* static analysis guarentees a RETURN statement will be used before here. */
12307 : : __builtin_unreachable ();
12308 : : }
12309 : :
12310 : :
12311 : : /*
12312 : : GetLocalSym - only searches the scope Sym for a symbol with name
12313 : : and returns the index to the symbol.
12314 : : */
12315 : :
12316 : 117478268 : extern "C" unsigned int SymbolTable_GetLocalSym (unsigned int Sym, NameKey_Name name)
12317 : : {
12318 : 117478268 : SymbolTable_PtrToSymbol pSym;
12319 : 117478268 : unsigned int LocalSym;
12320 : :
12321 : : /*
12322 : : WriteString('Attempting to retrieve symbol from ') ; WriteKey(GetSymName(Sym)) ;
12323 : : WriteString(' local symbol table') ; WriteLn ;
12324 : : */
12325 : 117478268 : pSym = GetPsym (Sym);
12326 : 117478268 : switch (pSym->SymbolType)
12327 : : {
12328 : 29610475 : case SymbolTable_EnumerationSym:
12329 : 29610475 : LocalSym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Enumeration.LocalSymbols, name));
12330 : 29610475 : break;
12331 : :
12332 : 522878 : case SymbolTable_RecordSym:
12333 : 522878 : LocalSym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Record.LocalSymbols, name));
12334 : 522878 : break;
12335 : :
12336 : 30190995 : case SymbolTable_ProcedureSym:
12337 : 30190995 : LocalSym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Procedure.LocalSymbols, name));
12338 : 30190995 : break;
12339 : :
12340 : 15248300 : case SymbolTable_ModuleSym:
12341 : 15248300 : LocalSym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Module.LocalSymbols, name));
12342 : 15248300 : break;
12343 : :
12344 : 41905620 : case SymbolTable_DefImpSym:
12345 : 41905620 : LocalSym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.LocalSymbols, name));
12346 : 41905620 : break;
12347 : :
12348 : :
12349 : 0 : default:
12350 : 0 : M2Error_InternalError ((const char *) "symbol does not have a LocalSymbols field", 41);
12351 : 117478268 : break;
12352 : : }
12353 : 117478268 : return LocalSym;
12354 : : /* static analysis guarentees a RETURN statement will be used before here. */
12355 : : __builtin_unreachable ();
12356 : : }
12357 : :
12358 : :
12359 : : /*
12360 : : GetRecord - fetches the record symbol from the parent of Sym.
12361 : : Sym maybe a varient symbol in which case its parent is searched
12362 : : etc.
12363 : : */
12364 : :
12365 : 29426 : extern "C" unsigned int SymbolTable_GetRecord (unsigned int Sym)
12366 : : {
12367 : 30206 : SymbolTable_PtrToSymbol pSym;
12368 : :
12369 : 30206 : pSym = GetPsym (Sym);
12370 : 30206 : switch (pSym->SymbolType)
12371 : : {
12372 : : case SymbolTable_RecordSym:
12373 : : return Sym;
12374 : 666 : break;
12375 : :
12376 : 666 : case SymbolTable_VarientSym:
12377 : 666 : return SymbolTable_GetRecord (pSym->Varient.Parent);
12378 : 114 : break;
12379 : :
12380 : 114 : case SymbolTable_VarientFieldSym:
12381 : 114 : return SymbolTable_GetRecord (pSym->VarientField.Parent);
12382 : 0 : break;
12383 : :
12384 : :
12385 : 0 : default:
12386 : 0 : M2Error_InternalError ((const char *) "expecting Record or Varient symbol", 34);
12387 : : break;
12388 : : }
12389 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12390 : : __builtin_unreachable ();
12391 : : }
12392 : :
12393 : :
12394 : : /*
12395 : : FromModuleGetSym - attempts to find a symbol of name, n, in the
12396 : : module, mod, scope. An unknown symbol is created
12397 : : at token position tok if necessary.
12398 : : */
12399 : :
12400 : 4659953 : extern "C" unsigned int SymbolTable_FromModuleGetSym (unsigned int tok, NameKey_Name n, unsigned int mod)
12401 : : {
12402 : 4659953 : NameKey_Name n1;
12403 : 4659953 : unsigned int sym;
12404 : 4659953 : unsigned int OldScopePtr;
12405 : :
12406 : 4659953 : OldScopePtr = ScopePtr;
12407 : 4659953 : SymbolTable_StartScope (mod);
12408 : 4659953 : sym = SymbolTable_RequestSym (tok, n);
12409 : 4659953 : SymbolTable_EndScope ();
12410 : 4659953 : if (sym == SymbolTable_NulSym)
12411 : : {
12412 : : /* --fixme-- can sym ever be NulSym? */
12413 : 0 : n1 = SymbolTable_GetSymName (mod);
12414 : 0 : M2Error_WriteFormat2 ((const char *) "cannot find procedure %a in module, %a", 38, (const unsigned char *) &n, (sizeof (n)-1), (const unsigned char *) &n1, (sizeof (n1)-1));
12415 : : }
12416 : 4659953 : ScopePtr = OldScopePtr;
12417 : 4659953 : return sym;
12418 : : /* static analysis guarentees a RETURN statement will be used before here. */
12419 : : __builtin_unreachable ();
12420 : : }
12421 : :
12422 : :
12423 : : /*
12424 : : GetNth - returns the n th symbol in the list associated with the scope
12425 : : of Sym. Sym may be a Module, DefImp, Procedure, Record or
12426 : : Enumeration symbol.
12427 : : */
12428 : :
12429 : 70489867 : extern "C" unsigned int SymbolTable_GetNth (unsigned int Sym, unsigned int n)
12430 : : {
12431 : 70489867 : SymbolTable_PtrToSymbol pSym;
12432 : 70489867 : unsigned int i;
12433 : :
12434 : 70489867 : pSym = GetPsym (Sym);
12435 : 70489867 : switch (pSym->SymbolType)
12436 : : {
12437 : 47642189 : case SymbolTable_RecordSym:
12438 : 47642189 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Record.ListOfSons, n));
12439 : 47642189 : break;
12440 : :
12441 : 84018 : case SymbolTable_VarientSym:
12442 : 84018 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Varient.ListOfSons, n));
12443 : 84018 : break;
12444 : :
12445 : 161658 : case SymbolTable_VarientFieldSym:
12446 : 161658 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->VarientField.ListOfSons, n));
12447 : 161658 : break;
12448 : :
12449 : 21264795 : case SymbolTable_ProcedureSym:
12450 : 21264795 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Procedure.ListOfVars, n));
12451 : 21264795 : break;
12452 : :
12453 : 184991 : case SymbolTable_DefImpSym:
12454 : 184991 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->DefImp.ListOfVars, n));
12455 : 184991 : break;
12456 : :
12457 : 544902 : case SymbolTable_ModuleSym:
12458 : 544902 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Module.ListOfVars, n));
12459 : 544902 : break;
12460 : :
12461 : 37620 : case SymbolTable_TupleSym:
12462 : 37620 : i = GetFromIndex (pSym->Tuple.list, n);
12463 : 37620 : break;
12464 : :
12465 : 569676 : case SymbolTable_VarSym:
12466 : 569676 : i = GetNthFromComponent (Sym, n);
12467 : 569676 : break;
12468 : :
12469 : 18 : case SymbolTable_EnumerationSym:
12470 : 18 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Enumeration.ListOfFields, n));
12471 : 18 : break;
12472 : :
12473 : :
12474 : 0 : default:
12475 : 0 : M2Error_InternalError ((const char *) "cannot GetNth from this symbol", 30);
12476 : 70489867 : break;
12477 : : }
12478 : 70489867 : return i;
12479 : : /* static analysis guarentees a RETURN statement will be used before here. */
12480 : : __builtin_unreachable ();
12481 : : }
12482 : :
12483 : :
12484 : : /*
12485 : : GetNthParam - returns the n th parameter of a procedure Sym.
12486 : : */
12487 : :
12488 : 32197101 : extern "C" unsigned int SymbolTable_GetNthParam (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo)
12489 : : {
12490 : 32197101 : SymbolTable_PtrToSymbol pSym;
12491 : 32197101 : unsigned int i;
12492 : :
12493 : 32197101 : if (ParamNo == 0)
12494 : : {
12495 : : /* The return type of the function */
12496 : 0 : i = SymbolTable_GetType (Sym);
12497 : : }
12498 : : else
12499 : : {
12500 : 32197101 : pSym = GetPsym (Sym);
12501 : 32197101 : switch (pSym->SymbolType)
12502 : : {
12503 : 27444619 : case SymbolTable_ProcedureSym:
12504 : 27444619 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam, ParamNo));
12505 : 27444619 : break;
12506 : :
12507 : 4752482 : case SymbolTable_ProcTypeSym:
12508 : 4752482 : i = static_cast<unsigned int> (Lists_GetItemFromList (pSym->ProcType.ListOfParam, ParamNo));
12509 : 4752482 : break;
12510 : :
12511 : :
12512 : 0 : default:
12513 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym or ProcTypeSym", 37);
12514 : 32197101 : break;
12515 : : }
12516 : : }
12517 : 32197101 : return i;
12518 : : /* static analysis guarentees a RETURN statement will be used before here. */
12519 : : __builtin_unreachable ();
12520 : : }
12521 : :
12522 : :
12523 : : /*
12524 : : GetVarScope - returns the symbol which is the scope of variable Sym.
12525 : : ie a Module, DefImp or Procedure Symbol.
12526 : : */
12527 : :
12528 : 3634 : extern "C" unsigned int SymbolTable_GetVarScope (unsigned int Sym)
12529 : : {
12530 : 3634 : SymbolTable_PtrToSymbol pSym;
12531 : :
12532 : 3634 : pSym = GetPsym (Sym);
12533 : 3634 : switch (pSym->SymbolType)
12534 : : {
12535 : : case SymbolTable_ErrorSym:
12536 : : return SymbolTable_NulSym;
12537 : 3634 : break;
12538 : :
12539 : 3634 : case SymbolTable_VarSym:
12540 : 3634 : return pSym->Var.Scope;
12541 : 0 : break;
12542 : :
12543 : :
12544 : 0 : default:
12545 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
12546 : : break;
12547 : : }
12548 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12549 : : __builtin_unreachable ();
12550 : : }
12551 : :
12552 : :
12553 : : /*
12554 : : GetSubrange - returns HighSym and LowSym - two constants which make up the
12555 : : subrange.
12556 : : */
12557 : :
12558 : 5619190 : extern "C" void SymbolTable_GetSubrange (unsigned int Sym, unsigned int *HighSym, unsigned int *LowSym)
12559 : : {
12560 : 5619190 : SymbolTable_PtrToSymbol pSym;
12561 : :
12562 : 5619190 : pSym = GetPsym (Sym);
12563 : 5619190 : switch (pSym->SymbolType)
12564 : : {
12565 : 5619190 : case SymbolTable_SubrangeSym:
12566 : 5619190 : (*HighSym) = pSym->Subrange.High;
12567 : 5619190 : (*LowSym) = pSym->Subrange.Low;
12568 : 5619190 : break;
12569 : :
12570 : :
12571 : 0 : default:
12572 : 0 : M2Error_InternalError ((const char *) "expecting Subrange symbol", 25);
12573 : 5619190 : break;
12574 : : }
12575 : 5619190 : }
12576 : :
12577 : :
12578 : : /*
12579 : : GetParam - returns the ParamNo parameter from procedure ProcSym
12580 : : */
12581 : :
12582 : 6619467 : extern "C" unsigned int SymbolTable_GetParam (unsigned int Sym, unsigned int ParamNo)
12583 : : {
12584 : 6619467 : AssertInRange (Sym);
12585 : 6619467 : if (ParamNo == 0)
12586 : : {
12587 : : /* Parameter Zero is the return argument for the Function */
12588 : 0 : return SymbolTable_GetType (Sym);
12589 : : }
12590 : : else
12591 : : {
12592 : 6619467 : return SymbolTable_GetNthParamAny (Sym, ParamNo);
12593 : : }
12594 : : /* static analysis guarentees a RETURN statement will be used before here. */
12595 : : __builtin_unreachable ();
12596 : : }
12597 : :
12598 : :
12599 : : /*
12600 : : GetString - returns the contents of the string symbol sym, note that
12601 : : this is not the same as GetName (unless it was a literal).
12602 : : */
12603 : :
12604 : 435744 : extern "C" NameKey_Name SymbolTable_GetString (unsigned int Sym)
12605 : : {
12606 : 435744 : SymbolTable_PtrToSymbol pSym;
12607 : :
12608 : 435744 : pSym = GetPsym (Sym);
12609 : 435744 : switch (pSym->SymbolType)
12610 : : {
12611 : 435744 : case SymbolTable_ConstStringSym:
12612 : 435744 : if (pSym->ConstString.Known)
12613 : : {
12614 : 435744 : return pSym->ConstString.Contents;
12615 : : }
12616 : : else
12617 : : {
12618 : 0 : M2Error_InternalError ((const char *) "const string contents are unknown", 33);
12619 : : }
12620 : 0 : break;
12621 : :
12622 : :
12623 : 0 : default:
12624 : 0 : M2Error_InternalError ((const char *) "expecting ConstString symbol", 28);
12625 : : break;
12626 : : }
12627 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12628 : : __builtin_unreachable ();
12629 : : }
12630 : :
12631 : :
12632 : : /*
12633 : : GetStringLength - returns the length of the string symbol Sym.
12634 : : */
12635 : :
12636 : 898950 : extern "C" unsigned int SymbolTable_GetStringLength (unsigned int tok, unsigned int sym)
12637 : : {
12638 : 898950 : SymbolTable_PtrToSymbol pSym;
12639 : :
12640 : 898950 : pSym = GetPsym (sym);
12641 : 898950 : switch (pSym->SymbolType)
12642 : : {
12643 : 898950 : case SymbolTable_ConstStringSym:
12644 : 898950 : if (pSym->ConstString.Known)
12645 : : {
12646 : 898950 : return pSym->ConstString.Length;
12647 : : }
12648 : : else
12649 : : {
12650 : 0 : M2MetaError_MetaErrorT0 (tok, (const char *) "const string contents are unknown", 33);
12651 : 0 : return 0;
12652 : : }
12653 : 0 : break;
12654 : :
12655 : :
12656 : 0 : default:
12657 : 0 : M2Error_InternalError ((const char *) "expecting ConstString symbol", 28);
12658 : : break;
12659 : : }
12660 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12661 : : __builtin_unreachable ();
12662 : : }
12663 : :
12664 : :
12665 : : /*
12666 : : GetProcedureBuiltin - returns the builtin name for the equivalent procedure, Sym.
12667 : : */
12668 : :
12669 : 17610 : extern "C" NameKey_Name SymbolTable_GetProcedureBuiltin (unsigned int Sym)
12670 : : {
12671 : 17610 : SymbolTable_PtrToSymbol pSym;
12672 : :
12673 : 17610 : pSym = GetPsym (Sym);
12674 : 17610 : switch (pSym->SymbolType)
12675 : : {
12676 : 17610 : case SymbolTable_ProcedureSym:
12677 : 17610 : return pSym->Procedure.BuiltinName;
12678 : 0 : break;
12679 : :
12680 : :
12681 : 0 : default:
12682 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
12683 : : break;
12684 : : }
12685 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12686 : : __builtin_unreachable ();
12687 : : }
12688 : :
12689 : :
12690 : : /*
12691 : : PutProcedureBuiltin - assigns the builtin name for the equivalent procedure, Sym.
12692 : : */
12693 : :
12694 : 101452 : extern "C" void SymbolTable_PutProcedureBuiltin (unsigned int Sym, NameKey_Name name)
12695 : : {
12696 : 101452 : SymbolTable_PtrToSymbol pSym;
12697 : :
12698 : 101452 : pSym = GetPsym (Sym);
12699 : 101452 : switch (pSym->SymbolType)
12700 : : {
12701 : 101452 : case SymbolTable_ProcedureSym:
12702 : 101452 : pSym->Procedure.BuiltinName = name;
12703 : 101452 : pSym->Procedure.IsBuiltin = true;
12704 : : /* we use the same extra pass method as hidden types for builtins */
12705 : 101452 : SymbolTable_PutHiddenTypeDeclared ();
12706 : 101452 : break;
12707 : :
12708 : :
12709 : 0 : default:
12710 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
12711 : 101452 : break;
12712 : : }
12713 : 101452 : }
12714 : :
12715 : :
12716 : : /*
12717 : : IsProcedureBuiltin - returns TRUE if this procedure has a builtin equivalent.
12718 : : */
12719 : :
12720 : 870865 : extern "C" bool SymbolTable_IsProcedureBuiltin (unsigned int Sym)
12721 : : {
12722 : 870865 : SymbolTable_PtrToSymbol pSym;
12723 : :
12724 : 870865 : pSym = GetPsym (Sym);
12725 : 870865 : switch (pSym->SymbolType)
12726 : : {
12727 : 870865 : case SymbolTable_ProcedureSym:
12728 : 870865 : return pSym->Procedure.IsBuiltin;
12729 : 0 : break;
12730 : :
12731 : :
12732 : 0 : default:
12733 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
12734 : : break;
12735 : : }
12736 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12737 : : __builtin_unreachable ();
12738 : : }
12739 : :
12740 : :
12741 : : /*
12742 : : PutProcedureInline - determines that procedure, Sym, has been requested to be inlined.
12743 : : */
12744 : :
12745 : 0 : extern "C" void SymbolTable_PutProcedureInline (unsigned int Sym)
12746 : : {
12747 : 0 : SymbolTable_PtrToSymbol pSym;
12748 : :
12749 : 0 : pSym = GetPsym (Sym);
12750 : 0 : switch (pSym->SymbolType)
12751 : : {
12752 : 0 : case SymbolTable_ProcedureSym:
12753 : 0 : pSym->Procedure.IsInline = true;
12754 : 0 : break;
12755 : :
12756 : :
12757 : 0 : default:
12758 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
12759 : 0 : break;
12760 : : }
12761 : 0 : }
12762 : :
12763 : 65719 : extern "C" bool SymbolTable_IsProcedureInline (unsigned int Sym)
12764 : : {
12765 : 65719 : SymbolTable_PtrToSymbol pSym;
12766 : :
12767 : : /*
12768 : : IsProcedureBuiltin - returns TRUE if this procedure was declared as inlined.
12769 : : */
12770 : 65719 : pSym = GetPsym (Sym);
12771 : 65719 : switch (pSym->SymbolType)
12772 : : {
12773 : 65719 : case SymbolTable_ProcedureSym:
12774 : 65719 : return pSym->Procedure.IsInline;
12775 : 0 : break;
12776 : :
12777 : :
12778 : 0 : default:
12779 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
12780 : : break;
12781 : : }
12782 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12783 : : __builtin_unreachable ();
12784 : : }
12785 : :
12786 : :
12787 : : /*
12788 : : PutExceptionBlock - sets a BOOLEAN in block module/procedure/defimp,
12789 : : sym, indicating that this block as an EXCEPT
12790 : : statement sequence.
12791 : : */
12792 : :
12793 : 180 : extern "C" void SymbolTable_PutExceptionBlock (unsigned int sym)
12794 : : {
12795 : 180 : SymbolTable_PtrToSymbol pSym;
12796 : :
12797 : 180 : pSym = GetPsym (sym);
12798 : 180 : switch (pSym->SymbolType)
12799 : : {
12800 : 132 : case SymbolTable_ProcedureSym:
12801 : 132 : pSym->Procedure.ExceptionBlock = true;
12802 : 132 : break;
12803 : :
12804 : 48 : case SymbolTable_ModuleSym:
12805 : 48 : pSym->Module.ExceptionBlock = true;
12806 : 48 : break;
12807 : :
12808 : 0 : case SymbolTable_DefImpSym:
12809 : 0 : pSym->DefImp.ExceptionBlock = true;
12810 : 0 : break;
12811 : :
12812 : :
12813 : 0 : default:
12814 : 0 : M2Error_InternalError ((const char *) "expecting Procedure", 19);
12815 : 180 : break;
12816 : : }
12817 : 180 : }
12818 : :
12819 : :
12820 : : /*
12821 : : HasExceptionBlock - returns a BOOLEAN determining whether
12822 : : module/procedure/defimp, sym, has
12823 : : an EXCEPT statement sequence.
12824 : : */
12825 : :
12826 : 261414 : extern "C" bool SymbolTable_HasExceptionBlock (unsigned int sym)
12827 : : {
12828 : 261414 : SymbolTable_PtrToSymbol pSym;
12829 : :
12830 : 261414 : pSym = GetPsym (sym);
12831 : 261414 : switch (pSym->SymbolType)
12832 : : {
12833 : 134648 : case SymbolTable_ProcedureSym:
12834 : 134648 : return pSym->Procedure.ExceptionBlock;
12835 : 22544 : break;
12836 : :
12837 : 22544 : case SymbolTable_ModuleSym:
12838 : 22544 : return pSym->Module.ExceptionBlock;
12839 : 104222 : break;
12840 : :
12841 : 104222 : case SymbolTable_DefImpSym:
12842 : 104222 : return pSym->DefImp.ExceptionBlock;
12843 : 0 : break;
12844 : :
12845 : :
12846 : 0 : default:
12847 : 0 : M2Error_InternalError ((const char *) "expecting Procedure", 19);
12848 : : break;
12849 : : }
12850 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12851 : : __builtin_unreachable ();
12852 : : }
12853 : :
12854 : :
12855 : : /*
12856 : : PutExceptionFinally - sets a BOOLEAN in block module/defimp,
12857 : : sym, indicating that this FINALLY block
12858 : : as an EXCEPT statement sequence.
12859 : : */
12860 : :
12861 : 0 : extern "C" void SymbolTable_PutExceptionFinally (unsigned int sym)
12862 : : {
12863 : 0 : SymbolTable_PtrToSymbol pSym;
12864 : :
12865 : 0 : pSym = GetPsym (sym);
12866 : 0 : switch (pSym->SymbolType)
12867 : : {
12868 : 0 : case SymbolTable_ProcedureSym:
12869 : 0 : pSym->Procedure.ExceptionFinally = true;
12870 : 0 : break;
12871 : :
12872 : 0 : case SymbolTable_ModuleSym:
12873 : 0 : pSym->Module.ExceptionFinally = true;
12874 : 0 : break;
12875 : :
12876 : 0 : case SymbolTable_DefImpSym:
12877 : 0 : pSym->DefImp.ExceptionFinally = true;
12878 : 0 : break;
12879 : :
12880 : :
12881 : 0 : default:
12882 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
12883 : 0 : break;
12884 : : }
12885 : 0 : }
12886 : :
12887 : :
12888 : : /*
12889 : : HasExceptionFinally - returns a BOOLEAN determining whether
12890 : : module/defimp, sym, has
12891 : : an EXCEPT statement sequence.
12892 : : */
12893 : :
12894 : 28970 : extern "C" bool SymbolTable_HasExceptionFinally (unsigned int sym)
12895 : : {
12896 : 28970 : SymbolTable_PtrToSymbol pSym;
12897 : :
12898 : 28970 : pSym = GetPsym (sym);
12899 : 28970 : switch (pSym->SymbolType)
12900 : : {
12901 : 0 : case SymbolTable_ProcedureSym:
12902 : 0 : return pSym->Procedure.ExceptionFinally;
12903 : 22400 : break;
12904 : :
12905 : 22400 : case SymbolTable_ModuleSym:
12906 : 22400 : return pSym->Module.ExceptionFinally;
12907 : 6570 : break;
12908 : :
12909 : 6570 : case SymbolTable_DefImpSym:
12910 : 6570 : return pSym->DefImp.ExceptionFinally;
12911 : 0 : break;
12912 : :
12913 : :
12914 : 0 : default:
12915 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
12916 : : break;
12917 : : }
12918 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
12919 : : __builtin_unreachable ();
12920 : : }
12921 : :
12922 : :
12923 : : /*
12924 : : PutVar - gives the VarSym symbol Sym a type Type.
12925 : : */
12926 : :
12927 : 1192687 : extern "C" void SymbolTable_PutVar (unsigned int Sym, unsigned int VarType)
12928 : : {
12929 : 1192687 : SymbolTable_PtrToSymbol pSym;
12930 : :
12931 : 1192687 : pSym = GetPsym (Sym);
12932 : 1192687 : switch (pSym->SymbolType)
12933 : : {
12934 : 475429 : case SymbolTable_VarSym:
12935 : 475429 : pSym->Var.Type = VarType;
12936 : 475429 : M2SymInit_ConfigSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_LeftValue-SymbolTable_RightValue]), Sym);
12937 : 475429 : M2SymInit_ConfigSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_RightValue-SymbolTable_RightValue]), Sym);
12938 : 475429 : break;
12939 : :
12940 : 717258 : case SymbolTable_ConstVarSym:
12941 : 717258 : pSym->ConstVar.Type = VarType;
12942 : 717258 : break;
12943 : :
12944 : :
12945 : 0 : default:
12946 : 0 : M2Error_InternalError ((const char *) "expecting VarSym or ConstVarSym", 31);
12947 : 1192687 : break;
12948 : : }
12949 : 1192687 : }
12950 : :
12951 : :
12952 : : /*
12953 : : PutVarTok - gives the VarSym symbol Sym a type Type at typetok.
12954 : : */
12955 : :
12956 : 6644300 : extern "C" void SymbolTable_PutVarTok (unsigned int Sym, unsigned int VarType, unsigned int typetok)
12957 : : {
12958 : 6644300 : SymbolTable_PtrToSymbol pSym;
12959 : :
12960 : 6644300 : pSym = GetPsym (Sym);
12961 : 6644300 : switch (pSym->SymbolType)
12962 : : {
12963 : 6644288 : case SymbolTable_VarSym:
12964 : 6644288 : pSym->Var.Type = VarType;
12965 : 6644288 : pSym->Var.Declared.TypeTok = typetok;
12966 : 6644288 : M2SymInit_ConfigSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_LeftValue-SymbolTable_RightValue]), Sym);
12967 : 6644288 : M2SymInit_ConfigSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_RightValue-SymbolTable_RightValue]), Sym);
12968 : 6644288 : break;
12969 : :
12970 : 0 : case SymbolTable_ConstVarSym:
12971 : 0 : pSym->ConstVar.Type = VarType;
12972 : 0 : break;
12973 : :
12974 : :
12975 : 12 : default:
12976 : 12 : M2Error_InternalError ((const char *) "expecting VarSym or ConstVarSym", 31);
12977 : 6644288 : break;
12978 : : }
12979 : 6644288 : }
12980 : :
12981 : :
12982 : : /*
12983 : : PutLeftValueFrontBackType - gives the variable symbol a front and backend type.
12984 : : The variable must be a LeftValue.
12985 : : */
12986 : :
12987 : 60122 : extern "C" void SymbolTable_PutLeftValueFrontBackType (unsigned int Sym, unsigned int FrontType, unsigned int BackType)
12988 : : {
12989 : 60122 : SymbolTable_PtrToSymbol pSym;
12990 : :
12991 : 60122 : M2Debug_Assert ((SymbolTable_GetMode (Sym)) == SymbolTable_LeftValue);
12992 : 60122 : pSym = GetPsym (Sym);
12993 : 60122 : switch (pSym->SymbolType)
12994 : : {
12995 : 60122 : case SymbolTable_VarSym:
12996 : 60122 : pSym->Var.Type = FrontType;
12997 : 60122 : pSym->Var.BackType = BackType;
12998 : 60122 : SymbolTable_PushSize (M2System_Address);
12999 : 60122 : M2ALU_PopInto (pSym->Var.Size);
13000 : 60122 : break;
13001 : :
13002 : :
13003 : 0 : default:
13004 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
13005 : 60122 : break;
13006 : : }
13007 : 60122 : }
13008 : :
13009 : :
13010 : : /*
13011 : : GetVarBackEndType - returns the back end type if specified.
13012 : : */
13013 : :
13014 : 1432566 : extern "C" unsigned int SymbolTable_GetVarBackEndType (unsigned int Sym)
13015 : : {
13016 : 1432566 : SymbolTable_PtrToSymbol pSym;
13017 : :
13018 : 1432566 : M2Debug_Assert (Sym != SymbolTable_NulSym);
13019 : 1432566 : pSym = GetPsym (Sym);
13020 : 1432566 : switch (pSym->SymbolType)
13021 : : {
13022 : 1432566 : case SymbolTable_VarSym:
13023 : 1432566 : return pSym->Var.BackType;
13024 : : break;
13025 : :
13026 : :
13027 : : default:
13028 : : return SymbolTable_NulSym;
13029 : : break;
13030 : : }
13031 : : /* static analysis guarentees a RETURN statement will be used before here. */
13032 : : __builtin_unreachable ();
13033 : : }
13034 : :
13035 : :
13036 : : /*
13037 : : PutVarPointerCheck - marks variable, sym, as requiring (or not
13038 : : depending upon the, value), a NIL pointer check
13039 : : when this symbol is dereferenced.
13040 : : */
13041 : :
13042 : 26940 : extern "C" void SymbolTable_PutVarPointerCheck (unsigned int sym, bool value)
13043 : : {
13044 : 26940 : SymbolTable_PtrToSymbol pSym;
13045 : :
13046 : 26940 : if (SymbolTable_IsVar (sym))
13047 : : {
13048 : 26934 : pSym = GetPsym (sym);
13049 : 26934 : pSym->Var.IsPointerCheck = value;
13050 : : }
13051 : 26940 : }
13052 : :
13053 : :
13054 : : /*
13055 : : GetVarPointerCheck - returns TRUE if this symbol is a variable and
13056 : : has been marked as needing a pointer via NIL check.
13057 : : */
13058 : :
13059 : 62403 : extern "C" bool SymbolTable_GetVarPointerCheck (unsigned int sym)
13060 : : {
13061 : 62403 : SymbolTable_PtrToSymbol pSym;
13062 : :
13063 : 62403 : if (SymbolTable_IsVar (sym))
13064 : : {
13065 : 62403 : pSym = GetPsym (sym);
13066 : 62403 : return pSym->Var.IsPointerCheck;
13067 : : }
13068 : : return false;
13069 : : /* static analysis guarentees a RETURN statement will be used before here. */
13070 : : __builtin_unreachable ();
13071 : : }
13072 : :
13073 : :
13074 : : /*
13075 : : PutVarWritten - marks variable, sym, as being written to (or not
13076 : : depending upon the, value).
13077 : : */
13078 : :
13079 : 11882 : extern "C" void SymbolTable_PutVarWritten (unsigned int sym, bool value)
13080 : : {
13081 : 11882 : SymbolTable_PtrToSymbol pSym;
13082 : :
13083 : 11882 : if (SymbolTable_IsVar (sym))
13084 : : {
13085 : 11882 : pSym = GetPsym (sym);
13086 : 11882 : pSym->Var.IsWritten = value;
13087 : : }
13088 : 11882 : }
13089 : :
13090 : :
13091 : : /*
13092 : : GetVarWritten - returns TRUE if this symbol is a variable and
13093 : : has been marked as being written.
13094 : : */
13095 : :
13096 : 72532 : extern "C" bool SymbolTable_GetVarWritten (unsigned int sym)
13097 : : {
13098 : 72532 : SymbolTable_PtrToSymbol pSym;
13099 : :
13100 : 72532 : pSym = GetPsym (sym);
13101 : 72532 : switch (pSym->SymbolType)
13102 : : {
13103 : 72532 : case SymbolTable_VarSym:
13104 : 72532 : return pSym->Var.IsWritten;
13105 : 0 : break;
13106 : :
13107 : :
13108 : 0 : default:
13109 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
13110 : : break;
13111 : : }
13112 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13113 : : __builtin_unreachable ();
13114 : : }
13115 : :
13116 : :
13117 : : /*
13118 : : PutConst - gives the constant symbol Sym a type ConstType.
13119 : : */
13120 : :
13121 : 288742 : extern "C" void SymbolTable_PutConst (unsigned int Sym, unsigned int ConstType)
13122 : : {
13123 : 288742 : SymbolTable_PtrToSymbol pSym;
13124 : :
13125 : 288742 : pSym = GetPsym (Sym);
13126 : 288742 : switch (pSym->SymbolType)
13127 : : {
13128 : 288742 : case SymbolTable_ConstVarSym:
13129 : 288742 : pSym->ConstVar.Type = ConstType;
13130 : 288742 : break;
13131 : :
13132 : :
13133 : 0 : default:
13134 : 0 : M2Error_InternalError ((const char *) "expecting ConstVarSym", 21);
13135 : 288742 : break;
13136 : : }
13137 : 288742 : }
13138 : :
13139 : :
13140 : : /*
13141 : : PutConstSet - informs the const var symbol, sym, that it is or will contain
13142 : : a set value.
13143 : : */
13144 : :
13145 : 32410 : extern "C" void SymbolTable_PutConstSet (unsigned int Sym)
13146 : : {
13147 : 32410 : SymbolTable_PtrToSymbol pSym;
13148 : :
13149 : 32410 : pSym = GetPsym (Sym);
13150 : 32410 : switch (pSym->SymbolType)
13151 : : {
13152 : 32410 : case SymbolTable_ConstVarSym:
13153 : 32410 : pSym->ConstVar.IsSet = true;
13154 : 32410 : break;
13155 : :
13156 : 0 : case SymbolTable_ConstLitSym:
13157 : 0 : pSym->ConstLit.IsSet = true;
13158 : 0 : break;
13159 : :
13160 : :
13161 : 0 : default:
13162 : 0 : M2Error_InternalError ((const char *) "expecting ConstVar symbol", 25);
13163 : 32410 : break;
13164 : : }
13165 : 32410 : }
13166 : :
13167 : :
13168 : : /*
13169 : : IsConstSet - returns TRUE if the constant is declared as a set.
13170 : : */
13171 : :
13172 : 31311455 : extern "C" bool SymbolTable_IsConstSet (unsigned int Sym)
13173 : : {
13174 : 31311455 : SymbolTable_PtrToSymbol pSym;
13175 : :
13176 : 31311455 : pSym = GetPsym (Sym);
13177 : 31311455 : switch (pSym->SymbolType)
13178 : : {
13179 : 4554032 : case SymbolTable_ConstVarSym:
13180 : 4554032 : return pSym->ConstVar.IsSet;
13181 : 9668914 : break;
13182 : :
13183 : 9668914 : case SymbolTable_ConstLitSym:
13184 : 9668914 : return pSym->ConstLit.IsSet;
13185 : : break;
13186 : :
13187 : :
13188 : : default:
13189 : : return false;
13190 : : break;
13191 : : }
13192 : : /* static analysis guarentees a RETURN statement will be used before here. */
13193 : : __builtin_unreachable ();
13194 : : }
13195 : :
13196 : :
13197 : : /*
13198 : : PutConstructor - informs the const var symbol, sym, that it is or
13199 : : will contain a constructor (record, set or array)
13200 : : value.
13201 : : */
13202 : :
13203 : 25958 : extern "C" void SymbolTable_PutConstructor (unsigned int Sym)
13204 : : {
13205 : 25958 : SymbolTable_PtrToSymbol pSym;
13206 : :
13207 : 25958 : pSym = GetPsym (Sym);
13208 : 25958 : switch (pSym->SymbolType)
13209 : : {
13210 : 25958 : case SymbolTable_ConstVarSym:
13211 : 25958 : pSym->ConstVar.IsConstructor = true;
13212 : 25958 : break;
13213 : :
13214 : 0 : case SymbolTable_ConstLitSym:
13215 : 0 : pSym->ConstLit.IsConstructor = true;
13216 : 0 : break;
13217 : :
13218 : :
13219 : 0 : default:
13220 : 0 : M2Error_InternalError ((const char *) "expecting ConstVar or ConstLit symbol", 37);
13221 : 25958 : break;
13222 : : }
13223 : 25958 : }
13224 : :
13225 : :
13226 : : /*
13227 : : PutConstructorFrom - sets the from type field in constructor,
13228 : : Sym, to, from.
13229 : : */
13230 : :
13231 : 21508 : extern "C" void SymbolTable_PutConstructorFrom (unsigned int Sym, unsigned int from)
13232 : : {
13233 : 21508 : SymbolTable_PtrToSymbol pSym;
13234 : :
13235 : 21508 : pSym = GetPsym (Sym);
13236 : 21508 : switch (pSym->SymbolType)
13237 : : {
13238 : 21508 : case SymbolTable_ConstVarSym:
13239 : 21508 : pSym->ConstVar.FromType = from;
13240 : 21508 : pSym->ConstVar.UnresFromType = true;
13241 : 21508 : break;
13242 : :
13243 : 0 : case SymbolTable_ConstLitSym:
13244 : 0 : pSym->ConstLit.FromType = from;
13245 : 0 : pSym->ConstLit.UnresFromType = true;
13246 : 0 : break;
13247 : :
13248 : :
13249 : 0 : default:
13250 : 0 : M2Error_InternalError ((const char *) "expecting ConstVar or ConstLit symbol", 37);
13251 : 21508 : break;
13252 : : }
13253 : 21508 : Lists_IncludeItemIntoList (UnresolvedConstructorType, Sym);
13254 : 21508 : }
13255 : :
13256 : :
13257 : : /*
13258 : : PutFieldRecord - places a field, FieldName and FieldType into a record, Sym.
13259 : : VarSym is a optional varient symbol which can be returned
13260 : : by a call to GetVarient(fieldsymbol). The created field
13261 : : is returned.
13262 : : */
13263 : :
13264 : 316862 : extern "C" unsigned int SymbolTable_PutFieldRecord (unsigned int Sym, NameKey_Name FieldName, unsigned int FieldType, unsigned int VarSym)
13265 : : {
13266 : 316862 : SymbolTable_PtrToSymbol oSym;
13267 : 316862 : SymbolTable_PtrToSymbol pSym;
13268 : 316862 : unsigned int esym;
13269 : 316862 : unsigned int ParSym;
13270 : 316862 : unsigned int SonSym;
13271 : :
13272 : 316862 : NewSym (&SonSym); /* Cannot be used before declared since use occurs */
13273 : : /* ensure that it is connected its parent. */
13274 : 316862 : pSym = GetPsym (Sym);
13275 : 316862 : switch (pSym->SymbolType)
13276 : : {
13277 : 316196 : case SymbolTable_RecordSym:
13278 : 316196 : Lists_PutItemIntoList (pSym->Record.ListOfSons, SonSym);
13279 : 316196 : M2Debug_Assert (Lists_IsItemInList (pSym->Record.ListOfSons, SonSym));
13280 : : /* Ensure that the Field is in the Parents Local Symbols */
13281 : 316196 : if (FieldName != NameKey_NulName)
13282 : : {
13283 : : /* avoid gcc warning by using compound statement even if not strictly necessary. */
13284 : 316166 : if ((SymbolKey_GetSymKey (pSym->Record.LocalSymbols, FieldName)) == SymbolKey_NulKey)
13285 : : {
13286 : 316166 : SymbolKey_PutSymKey (pSym->Record.LocalSymbols, FieldName, SonSym);
13287 : : }
13288 : : else
13289 : : {
13290 : 0 : esym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->Record.LocalSymbols, FieldName));
13291 : 0 : M2MetaError_MetaErrors1 ((const char *) "field record {%1Dad} has already been declared", 46, (const char *) "field record duplicate", 22, esym);
13292 : : }
13293 : : }
13294 : : CheckRecordConsistency (Sym);
13295 : : break;
13296 : :
13297 : 666 : case SymbolTable_VarientFieldSym:
13298 : 666 : Lists_PutItemIntoList (pSym->VarientField.ListOfSons, SonSym);
13299 : 666 : ParSym = SymbolTable_GetRecord (pSym->VarientField.Parent);
13300 : 666 : oSym = GetPsym (ParSym);
13301 : 666 : M2Debug_Assert (oSym->SymbolType == SymbolTable_RecordSym);
13302 : 666 : if (FieldName != NameKey_NulName)
13303 : : {
13304 : 654 : oSym = GetPsym (ParSym);
13305 : 654 : SymbolKey_PutSymKey (oSym->Record.LocalSymbols, FieldName, SonSym);
13306 : : }
13307 : : break;
13308 : :
13309 : :
13310 : 0 : default:
13311 : 0 : M2Error_InternalError ((const char *) "expecting Record symbol", 23);
13312 : 316862 : break;
13313 : : }
13314 : : /* Fill in SonSym */
13315 : 316862 : oSym = GetPsym (SonSym);
13316 : 316862 : oSym->SymbolType = SymbolTable_RecordFieldSym;
13317 : 316862 : oSym->RecordField.Type = FieldType;
13318 : 316862 : oSym->RecordField.name = FieldName;
13319 : 316862 : oSym->RecordField.Tag = false;
13320 : 316862 : oSym->RecordField.Parent = Sym;
13321 : 316862 : oSym->RecordField.Varient = VarSym;
13322 : 316862 : oSym->RecordField.Align = SymbolTable_NulSym;
13323 : 316862 : oSym->RecordField.Used = true;
13324 : 316862 : oSym->RecordField.DeclPacked = false; /* not known as packed (yet). */
13325 : 316862 : oSym->RecordField.DeclResolved = false; /* not known as packed (yet). */
13326 : 316862 : oSym->RecordField.Scope = SymbolTable_GetScope (Sym);
13327 : 316862 : oSym->RecordField.Size = M2ALU_InitValue ();
13328 : 316862 : oSym->RecordField.Offset = M2ALU_InitValue ();
13329 : 316862 : InitWhereDeclared (&oSym->RecordField.At);
13330 : 316862 : return SonSym;
13331 : : /* static analysis guarentees a RETURN statement will be used before here. */
13332 : : __builtin_unreachable ();
13333 : : }
13334 : :
13335 : :
13336 : : /*
13337 : : PutFieldVarient - places the field varient, Field, as a brother to, the
13338 : : varient symbol, sym, and also tells Field that its varient
13339 : : parent is Sym.
13340 : : */
13341 : :
13342 : 1236 : extern "C" void SymbolTable_PutFieldVarient (unsigned int Field, unsigned int Sym)
13343 : : {
13344 : 1236 : SymbolTable_PtrToSymbol pSym;
13345 : :
13346 : 1236 : M2Debug_Assert (SymbolTable_IsVarient (Sym));
13347 : 1236 : M2Debug_Assert (SymbolTable_IsFieldVarient (Field));
13348 : 1236 : pSym = GetPsym (Sym);
13349 : 1236 : switch (pSym->SymbolType)
13350 : : {
13351 : 1236 : case SymbolTable_VarientSym:
13352 : 1236 : Lists_IncludeItemIntoList (pSym->Varient.ListOfSons, Field);
13353 : 1236 : break;
13354 : :
13355 : :
13356 : 0 : default:
13357 : 0 : M2Error_InternalError ((const char *) "expecting Varient symbol", 24);
13358 : 1236 : break;
13359 : : }
13360 : 1236 : pSym = GetPsym (Field);
13361 : 1236 : switch (pSym->SymbolType)
13362 : : {
13363 : 1236 : case SymbolTable_VarientFieldSym:
13364 : 1236 : pSym->VarientField.Varient = Sym;
13365 : 1236 : break;
13366 : :
13367 : :
13368 : 0 : default:
13369 : 0 : M2Error_InternalError ((const char *) "expecting VarientField symbol", 29);
13370 : 1236 : break;
13371 : : }
13372 : 1236 : }
13373 : :
13374 : :
13375 : : /*
13376 : : GetVarient - returns the varient symbol associated with the
13377 : : record or varient field symbol, Field.
13378 : : */
13379 : :
13380 : 36163674 : extern "C" unsigned int SymbolTable_GetVarient (unsigned int Field)
13381 : : {
13382 : 36163674 : SymbolTable_PtrToSymbol pSym;
13383 : :
13384 : 36163674 : pSym = GetPsym (Field);
13385 : 36163674 : switch (pSym->SymbolType)
13386 : : {
13387 : 0 : case SymbolTable_VarientFieldSym:
13388 : 0 : return pSym->VarientField.Varient;
13389 : 36152262 : break;
13390 : :
13391 : 36152262 : case SymbolTable_RecordFieldSym:
13392 : 36152262 : return pSym->RecordField.Varient;
13393 : 11412 : break;
13394 : :
13395 : 11412 : case SymbolTable_VarientSym:
13396 : 11412 : return pSym->Varient.Varient;
13397 : : break;
13398 : :
13399 : :
13400 : : default:
13401 : : return SymbolTable_NulSym;
13402 : : break;
13403 : : }
13404 : : /* static analysis guarentees a RETURN statement will be used before here. */
13405 : : __builtin_unreachable ();
13406 : : }
13407 : :
13408 : :
13409 : : /*
13410 : : IsRecordFieldAVarientTag - returns TRUE if record field, sym, is
13411 : : a varient tag.
13412 : : */
13413 : :
13414 : 2447196 : extern "C" bool SymbolTable_IsRecordFieldAVarientTag (unsigned int sym)
13415 : : {
13416 : 2447196 : SymbolTable_PtrToSymbol pSym;
13417 : :
13418 : 2447196 : if (SymbolTable_IsRecordField (sym))
13419 : : {
13420 : 2447196 : pSym = GetPsym (sym);
13421 : 2447196 : return pSym->RecordField.Tag;
13422 : : }
13423 : : else
13424 : : {
13425 : 0 : M2Error_InternalError ((const char *) "record field symbol expected", 28);
13426 : : }
13427 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13428 : : __builtin_unreachable ();
13429 : : }
13430 : :
13431 : :
13432 : : /*
13433 : : IsEmptyFieldVarient - returns TRUE if the field variant has
13434 : : no fields. This will occur then the
13435 : : compiler constructs 'else end' variants.
13436 : : */
13437 : :
13438 : 0 : extern "C" bool SymbolTable_IsEmptyFieldVarient (unsigned int sym)
13439 : : {
13440 : 0 : SymbolTable_PtrToSymbol pSym;
13441 : :
13442 : 0 : pSym = GetPsym (sym);
13443 : 0 : switch (pSym->SymbolType)
13444 : : {
13445 : 0 : case SymbolTable_VarientFieldSym:
13446 : 0 : return (Lists_NoOfItemsInList (pSym->VarientField.ListOfSons)) == 0;
13447 : 0 : break;
13448 : :
13449 : :
13450 : 0 : default:
13451 : 0 : M2Error_InternalError ((const char *) "varient field symbol expected", 29);
13452 : : break;
13453 : : }
13454 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13455 : : __builtin_unreachable ();
13456 : : }
13457 : :
13458 : :
13459 : : /*
13460 : : GetVarientTag - returns the varient tag from, Sym.
13461 : : */
13462 : :
13463 : 768 : extern "C" unsigned int SymbolTable_GetVarientTag (unsigned int Sym)
13464 : : {
13465 : 768 : SymbolTable_PtrToSymbol pSym;
13466 : :
13467 : 768 : pSym = GetPsym (Sym);
13468 : 768 : switch (pSym->SymbolType)
13469 : : {
13470 : 768 : case SymbolTable_VarientSym:
13471 : 768 : return pSym->Varient.tag;
13472 : 0 : break;
13473 : :
13474 : :
13475 : 0 : default:
13476 : 0 : M2Error_InternalError ((const char *) "varient symbol expected", 23);
13477 : : break;
13478 : : }
13479 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13480 : : __builtin_unreachable ();
13481 : : }
13482 : :
13483 : :
13484 : : /*
13485 : : PutVarientTag - places, Tag, into varient, Sym.
13486 : : */
13487 : :
13488 : 276 : extern "C" void SymbolTable_PutVarientTag (unsigned int Sym, unsigned int Tag)
13489 : : {
13490 : 276 : SymbolTable_PtrToSymbol pSym;
13491 : 276 : unsigned int parent;
13492 : :
13493 : 276 : pSym = GetPsym (Sym);
13494 : 276 : switch (pSym->SymbolType)
13495 : : {
13496 : 276 : case SymbolTable_VarientSym:
13497 : 276 : pSym->Varient.tag = Tag;
13498 : 276 : break;
13499 : :
13500 : :
13501 : 0 : default:
13502 : 0 : M2Error_InternalError ((const char *) "varient symbol expected", 23);
13503 : 276 : break;
13504 : : }
13505 : : /* now ensure that if Tag is a RecordField then it must be
13506 : : placed before the varient symbol in its parent ListOfSons.
13507 : : This allows M2GCCDeclare to declare record fields in order
13508 : : and preserve the order of fields. Otherwise it will add the
13509 : : tag field after the C union. */
13510 : 276 : if (SymbolTable_IsRecordField (Tag))
13511 : : {
13512 : 264 : pSym = GetPsym (Tag);
13513 : 264 : pSym->RecordField.Tag = true;
13514 : 264 : parent = SymbolTable_GetParent (Sym);
13515 : 264 : pSym = GetPsym (parent);
13516 : 264 : switch (pSym->SymbolType)
13517 : : {
13518 : : case SymbolTable_ErrorSym:
13519 : : break;
13520 : :
13521 : 0 : case SymbolTable_VarientSym:
13522 : 0 : EnsureOrder (pSym->Varient.ListOfSons, Tag, Sym);
13523 : 0 : break;
13524 : :
13525 : 36 : case SymbolTable_VarientFieldSym:
13526 : 36 : EnsureOrder (pSym->VarientField.ListOfSons, Tag, Sym);
13527 : 36 : break;
13528 : :
13529 : 228 : case SymbolTable_RecordSym:
13530 : 228 : EnsureOrder (pSym->Record.ListOfSons, Tag, Sym);
13531 : 228 : CheckRecordConsistency (parent);
13532 : 228 : break;
13533 : :
13534 : :
13535 : 0 : default:
13536 : 0 : M2Error_InternalError ((const char *) "not expecting this symbol type", 30);
13537 : : break;
13538 : : }
13539 : : }
13540 : 276 : }
13541 : :
13542 : :
13543 : : /*
13544 : : PutFieldEnumeration - places a field into the enumeration type
13545 : : Sym. The field has a name FieldName and a
13546 : : value FieldVal.
13547 : : */
13548 : :
13549 : 441098 : extern "C" void SymbolTable_PutFieldEnumeration (unsigned int tok, unsigned int Sym, NameKey_Name FieldName)
13550 : : {
13551 : 441098 : SymbolTable_PtrToSymbol oSym;
13552 : 441098 : SymbolTable_PtrToSymbol pSym;
13553 : 441098 : DynamicStrings_String s;
13554 : 441098 : unsigned int Field;
13555 : :
13556 : 441098 : Field = CheckForHiddenType (FieldName);
13557 : 441098 : if (Field == SymbolTable_NulSym)
13558 : : {
13559 : 441098 : Field = DeclareSym (tok, FieldName);
13560 : : }
13561 : 441098 : if (! (SymbolTable_IsError (Field)))
13562 : : {
13563 : 441092 : pSym = GetPsym (Field);
13564 : 441092 : pSym->SymbolType = SymbolTable_EnumerationFieldSym;
13565 : 441092 : pSym->EnumerationField.name = FieldName; /* Index into name array, name */
13566 : : /* of type. */
13567 : 441092 : oSym = GetPsym (Sym);
13568 : 441092 : M2ALU_PushCard (oSym->Enumeration.NoOfElements);
13569 : 441092 : pSym->EnumerationField.Value = M2ALU_InitValue ();
13570 : 441092 : M2ALU_PopInto (pSym->EnumerationField.Value);
13571 : 441092 : pSym->EnumerationField.Type = Sym;
13572 : 441092 : pSym->EnumerationField.Scope = SymbolTable_GetCurrentScope ();
13573 : 441092 : InitWhereDeclaredTok (tok, &pSym->EnumerationField.At); /* Declared here */
13574 : 441092 : pSym = GetPsym (Sym);
13575 : 441092 : switch (pSym->SymbolType)
13576 : : {
13577 : 441092 : case SymbolTable_EnumerationSym:
13578 : 441092 : pSym->Enumeration.NoOfElements += 1;
13579 : 441092 : if ((SymbolKey_GetSymKey (pSym->Enumeration.LocalSymbols, FieldName)) != SymbolTable_NulSym)
13580 : : {
13581 : 0 : s = DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (FieldName)));
13582 : 0 : AlreadyDeclaredError (FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "enumeration field (%s) is already declared elsewhere, use a different name or remove the declaration", 100)), (const unsigned char *) &s, (sizeof (s)-1)), FieldName, SymbolTable_GetDeclaredMod (SymbolKey_GetSymKey (pSym->Enumeration.LocalSymbols, FieldName)));
13583 : : }
13584 : : else
13585 : : {
13586 : 441092 : SymbolKey_PutSymKey (pSym->Enumeration.LocalSymbols, FieldName, Field);
13587 : 441092 : Lists_IncludeItemIntoList (pSym->Enumeration.ListOfFields, Field);
13588 : : }
13589 : : break;
13590 : :
13591 : :
13592 : 0 : default:
13593 : 0 : M2Error_InternalError ((const char *) "expecting Sym=Enumeration", 25);
13594 : : break;
13595 : : }
13596 : : }
13597 : 441098 : }
13598 : :
13599 : :
13600 : : /*
13601 : : PutSubrange - places LowSym and HighSym as two symbols
13602 : : which provide the limits of the range.
13603 : : */
13604 : :
13605 : 162494 : extern "C" void SymbolTable_PutSubrange (unsigned int Sym, unsigned int LowSym, unsigned int HighSym, unsigned int TypeSymbol)
13606 : : {
13607 : 162494 : SymbolTable_PtrToSymbol pSym;
13608 : :
13609 : 162494 : pSym = GetPsym (Sym);
13610 : 162494 : switch (pSym->SymbolType)
13611 : : {
13612 : 162494 : case SymbolTable_SubrangeSym:
13613 : 162494 : pSym->Subrange.Low = LowSym; /* Index to symbol for lower */
13614 : 162494 : pSym->Subrange.High = HighSym; /* Index to symbol for higher */
13615 : 162494 : pSym->Subrange.Type = TypeSymbol; /* Index to type symbol for */
13616 : 162494 : break;
13617 : :
13618 : :
13619 : 0 : default:
13620 : : /* the type of subrange. */
13621 : 0 : M2Error_InternalError ((const char *) "expecting Subrange symbol", 25);
13622 : 162494 : break;
13623 : : }
13624 : 162494 : }
13625 : :
13626 : :
13627 : : /*
13628 : : PutSet - places SimpleType as the type for set, Sym.
13629 : : */
13630 : :
13631 : 58730 : extern "C" void SymbolTable_PutSet (unsigned int Sym, unsigned int SimpleType, bool packed)
13632 : : {
13633 : 58730 : SymbolTable_PtrToSymbol pSym;
13634 : :
13635 : 58730 : pSym = GetPsym (Sym);
13636 : 58730 : switch (pSym->SymbolType)
13637 : : {
13638 : : case SymbolTable_ErrorSym:
13639 : : break;
13640 : :
13641 : 58730 : case SymbolTable_SetSym:
13642 : 58730 : pSym->Set.Type = SimpleType; /* Index to a subrange symbol */
13643 : : /* or an enumeration type. */
13644 : 58730 : pSym->Set.ispacked = packed;
13645 : 58730 : break;
13646 : :
13647 : :
13648 : 0 : default:
13649 : 0 : M2Error_InternalError ((const char *) "expecting a Set symbol", 22);
13650 : 58730 : break;
13651 : : }
13652 : 58730 : }
13653 : :
13654 : :
13655 : : /*
13656 : : IsSetPacked - returns TRUE if Sym is packed.
13657 : : */
13658 : :
13659 : 1736 : extern "C" bool SymbolTable_IsSetPacked (unsigned int Sym)
13660 : : {
13661 : 1736 : SymbolTable_PtrToSymbol pSym;
13662 : :
13663 : 1736 : AssertInRange (Sym);
13664 : 1736 : pSym = GetPsym (Sym);
13665 : 1736 : return (pSym->SymbolType == SymbolTable_SetSym) && pSym->Set.ispacked;
13666 : : /* static analysis guarentees a RETURN statement will be used before here. */
13667 : : __builtin_unreachable ();
13668 : : }
13669 : :
13670 : :
13671 : : /*
13672 : : GetArraySubscript - returns the subscript symbol for array, Sym.
13673 : : */
13674 : :
13675 : 1017462 : extern "C" unsigned int SymbolTable_GetArraySubscript (unsigned int Sym)
13676 : : {
13677 : 1017462 : SymbolTable_PtrToSymbol pSym;
13678 : :
13679 : 1017462 : pSym = GetPsym (Sym);
13680 : 1017462 : switch (pSym->SymbolType)
13681 : : {
13682 : : case SymbolTable_ErrorSym:
13683 : : return SymbolTable_NulSym;
13684 : 1017462 : break;
13685 : :
13686 : 1017462 : case SymbolTable_ArraySym:
13687 : 1017462 : return pSym->Array.Subscript;
13688 : 0 : break;
13689 : :
13690 : :
13691 : 0 : default:
13692 : 0 : M2Error_InternalError ((const char *) "expecting an Array symbol", 25);
13693 : : break;
13694 : : }
13695 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13696 : : __builtin_unreachable ();
13697 : : }
13698 : :
13699 : :
13700 : : /*
13701 : : PutArraySubscript - places an index field into the array Sym. The
13702 : : index field is a subscript sym.
13703 : : */
13704 : :
13705 : 85354 : extern "C" void SymbolTable_PutArraySubscript (unsigned int Sym, unsigned int SubscriptSymbol)
13706 : : {
13707 : 85354 : SymbolTable_PtrToSymbol pSym;
13708 : :
13709 : 85354 : pSym = GetPsym (Sym);
13710 : 85354 : switch (pSym->SymbolType)
13711 : : {
13712 : : case SymbolTable_ErrorSym:
13713 : : break;
13714 : :
13715 : 85354 : case SymbolTable_ArraySym:
13716 : 85354 : pSym->Array.Subscript = SubscriptSymbol;
13717 : 85354 : break;
13718 : :
13719 : :
13720 : 0 : default:
13721 : 0 : M2Error_InternalError ((const char *) "expecting an Array symbol", 25);
13722 : 85354 : break;
13723 : : }
13724 : 85354 : }
13725 : :
13726 : :
13727 : : /*
13728 : : PutType - gives a type symbol Sym type TypeSymbol.
13729 : : */
13730 : :
13731 : 556650 : extern "C" void SymbolTable_PutType (unsigned int Sym, unsigned int TypeSymbol)
13732 : : {
13733 : 556650 : SymbolTable_PtrToSymbol pSym;
13734 : :
13735 : 556650 : if (TypeSymbol == Sym)
13736 : : {
13737 : 0 : M2Error_InternalError ((const char *) "not expecting a type to be declared as itself", 45);
13738 : : }
13739 : 556650 : pSym = GetPsym (Sym);
13740 : 556650 : switch (pSym->SymbolType)
13741 : : {
13742 : : case SymbolTable_ErrorSym:
13743 : : break;
13744 : :
13745 : 556650 : case SymbolTable_TypeSym:
13746 : 556650 : pSym->Type.Type = TypeSymbol;
13747 : 556650 : break;
13748 : :
13749 : :
13750 : 0 : default:
13751 : 0 : M2Error_InternalError ((const char *) "expecting a Type symbol", 23);
13752 : 556650 : break;
13753 : : }
13754 : 556650 : }
13755 : :
13756 : :
13757 : : /*
13758 : : PutFunction - Places a TypeSym as the return type to a procedure Sym.
13759 : : */
13760 : :
13761 : 4165365 : extern "C" void SymbolTable_PutFunction (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int TypeSym)
13762 : : {
13763 : 8323376 : SymbolTable_PtrToSymbol pSym;
13764 : :
13765 : 8323376 : pSym = GetPsym (Sym);
13766 : 8323376 : switch (pSym->SymbolType)
13767 : : {
13768 : : case SymbolTable_ErrorSym:
13769 : : break;
13770 : :
13771 : 4158011 : case SymbolTable_ProcedureSym:
13772 : 4158011 : pSym->Procedure.ReturnType = TypeSym;
13773 : 4158011 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnTypeTok = tok;
13774 : 4158011 : SymbolTable_PutFunction (tok, pSym->Procedure.ProcedureType, kind, TypeSym);
13775 : 4158011 : break;
13776 : :
13777 : 4165365 : case SymbolTable_ProcTypeSym:
13778 : 4165365 : pSym->ProcType.ReturnType = TypeSym;
13779 : 4165365 : pSym->ProcType.ReturnTypeTok = tok;
13780 : 4165365 : break;
13781 : :
13782 : :
13783 : 0 : default:
13784 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
13785 : 4165365 : break;
13786 : : }
13787 : 4165365 : }
13788 : :
13789 : :
13790 : : /*
13791 : : PutOptFunction - places a TypeSym as the optional return type to a procedure Sym.
13792 : : */
13793 : :
13794 : 121146 : extern "C" void SymbolTable_PutOptFunction (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int TypeSym)
13795 : : {
13796 : 242292 : SymbolTable_PtrToSymbol pSym;
13797 : :
13798 : 242292 : pSym = GetPsym (Sym);
13799 : 242292 : switch (pSym->SymbolType)
13800 : : {
13801 : : case SymbolTable_ErrorSym:
13802 : : break;
13803 : :
13804 : 121146 : case SymbolTable_ProcedureSym:
13805 : 121146 : pSym->Procedure.ReturnType = TypeSym;
13806 : 121146 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnOptional = true;
13807 : 121146 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnTypeTok = tok;
13808 : 121146 : SymbolTable_PutOptFunction (tok, pSym->Procedure.ProcedureType, kind, TypeSym);
13809 : 121146 : break;
13810 : :
13811 : 121146 : case SymbolTable_ProcTypeSym:
13812 : 121146 : pSym->ProcType.ReturnType = TypeSym;
13813 : 121146 : pSym->ProcType.ReturnTypeTok = tok;
13814 : 121146 : break;
13815 : :
13816 : :
13817 : 0 : default:
13818 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
13819 : 121146 : break;
13820 : : }
13821 : 121146 : }
13822 : :
13823 : :
13824 : : /*
13825 : : IsReturnOptional - returns TRUE if the return value for, sym, is
13826 : : optional.
13827 : : */
13828 : :
13829 : 538848 : extern "C" bool SymbolTable_IsReturnOptional (unsigned int sym, SymbolTable_ProcedureKind kind)
13830 : : {
13831 : 538848 : SymbolTable_PtrToSymbol pSym;
13832 : :
13833 : 538848 : pSym = GetPsym (sym);
13834 : 538848 : switch (pSym->SymbolType)
13835 : : {
13836 : 509504 : case SymbolTable_ProcedureSym:
13837 : 509504 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnOptional;
13838 : 29344 : break;
13839 : :
13840 : 29344 : case SymbolTable_ProcTypeSym:
13841 : 29344 : return pSym->ProcType.ReturnOptional;
13842 : 0 : break;
13843 : :
13844 : :
13845 : 0 : default:
13846 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
13847 : : break;
13848 : : }
13849 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13850 : : __builtin_unreachable ();
13851 : : }
13852 : :
13853 : :
13854 : : /*
13855 : : IsReturnOptionalAny - returns TRUE if the return value for sym is
13856 : : optional.
13857 : : */
13858 : :
13859 : 6598 : extern "C" bool SymbolTable_IsReturnOptionalAny (unsigned int sym)
13860 : : {
13861 : 6598 : SymbolTable_PtrToSymbol pSym;
13862 : :
13863 : 6598 : pSym = GetPsym (sym);
13864 : 6598 : switch (pSym->SymbolType)
13865 : : {
13866 : 6598 : case SymbolTable_ProcedureSym:
13867 : 6598 : return IsProcedureAnyBoolean (sym, (SymbolTable_ProcAnyBoolean) {(SymbolTable_ProcAnyBoolean_t) SymbolTable_IsReturnOptional});
13868 : 0 : break;
13869 : :
13870 : 0 : case SymbolTable_ProcTypeSym:
13871 : 0 : return pSym->ProcType.ReturnOptional;
13872 : 0 : break;
13873 : :
13874 : :
13875 : 0 : default:
13876 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
13877 : : break;
13878 : : }
13879 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
13880 : : __builtin_unreachable ();
13881 : : }
13882 : :
13883 : :
13884 : : /*
13885 : : PutParam - Places a Non VAR parameter ParamName with type ParamType into
13886 : : procedure Sym:kind. The parameter number is ParamNo.
13887 : : If the procedure Sym already has this parameter then
13888 : : the parameter is checked for consistancy and the
13889 : : consistancy test is returned.
13890 : : */
13891 : :
13892 : 6411965 : extern "C" bool SymbolTable_PutParam (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo, NameKey_Name ParamName, unsigned int ParamType, bool isUnbounded, unsigned int typetok)
13893 : : {
13894 : 6411965 : SymbolTable_PtrToSymbol pSym;
13895 : 6411965 : unsigned int ParSym;
13896 : 6411965 : unsigned int VariableSym;
13897 : :
13898 : 6411965 : if (SymbolTable_GetProcedureParametersDefined (Sym, kind))
13899 : : {
13900 : : /* ParamNo <= NoOfParamAny (Sym) */
13901 : 0 : M2Error_InternalError ((const char *) "why are we trying to put parameters again", 41);
13902 : : }
13903 : : else
13904 : : {
13905 : : /* Add a new parameter */
13906 : 6411965 : NewSym (&ParSym);
13907 : 6411965 : pSym = GetPsym (ParSym);
13908 : 6411965 : pSym->SymbolType = SymbolTable_ParamSym;
13909 : 6411965 : pSym->Param.name = ParamName;
13910 : 6411965 : pSym->Param.Type = ParamType;
13911 : 6411965 : pSym->Param.IsUnbounded = isUnbounded;
13912 : 6411965 : pSym->Param.ShadowVar = SymbolTable_NulSym;
13913 : 6411965 : InitWhereDeclaredTok (tok, &pSym->Param.At);
13914 : 6411965 : AddParameter (Sym, kind, ParSym);
13915 : : /* Only declare a parameter as a local variable if it has not been done before.
13916 : : It might be declared during the definition module, forward declaration or
13917 : : proper procedure. Name mismatches are checked in P2SymBuild.mod. */
13918 : 6411965 : if ((ParamName != NameKey_NulName) && ((SymbolTable_GetNth (Sym, ParamNo)) == SymbolTable_NulSym))
13919 : : {
13920 : 5303000 : VariableSym = MakeVariableForParam (tok, ParamName, Sym, kind, ParamNo, ParamType, typetok);
13921 : 5303000 : if (VariableSym == SymbolTable_NulSym)
13922 : : {
13923 : : return false;
13924 : : }
13925 : : else
13926 : : {
13927 : 5303000 : pSym = GetPsym (ParSym);
13928 : 5303000 : pSym->Param.ShadowVar = VariableSym;
13929 : : }
13930 : : }
13931 : 6411965 : AddProcedureProcTypeParam (Sym, ParamType, isUnbounded, false);
13932 : : }
13933 : 6411965 : return true;
13934 : : /* static analysis guarentees a RETURN statement will be used before here. */
13935 : : __builtin_unreachable ();
13936 : : }
13937 : :
13938 : :
13939 : : /*
13940 : : PutVarParam - Places a Non VAR parameter ParamName with type
13941 : : ParamType into procedure Sym:kind.
13942 : : The parameter number is ParamNo.
13943 : : If the procedure Sym already has this parameter then
13944 : : the parameter is checked for consistancy and the
13945 : : consistancy test is returned.
13946 : : */
13947 : :
13948 : 544872 : extern "C" bool SymbolTable_PutVarParam (unsigned int tok, unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo, NameKey_Name ParamName, unsigned int ParamType, bool isUnbounded, unsigned int typetok)
13949 : : {
13950 : 544872 : SymbolTable_PtrToSymbol pSym;
13951 : 544872 : unsigned int ParSym;
13952 : 544872 : unsigned int VariableSym;
13953 : :
13954 : 544872 : if (SymbolTable_GetProcedureParametersDefined (Sym, kind))
13955 : : {
13956 : 0 : M2Error_InternalError ((const char *) "why are we trying to put parameters again", 41);
13957 : : }
13958 : : else
13959 : : {
13960 : : /* Add a new parameter */
13961 : 544872 : NewSym (&ParSym);
13962 : 544872 : pSym = GetPsym (ParSym);
13963 : 544872 : pSym->SymbolType = SymbolTable_VarParamSym;
13964 : 544872 : pSym->VarParam.name = ParamName;
13965 : 544872 : pSym->VarParam.Type = ParamType;
13966 : 544872 : pSym->VarParam.IsUnbounded = isUnbounded;
13967 : 544872 : pSym->VarParam.ShadowVar = SymbolTable_NulSym;
13968 : 544872 : pSym->VarParam.HeapVar = SymbolTable_NulSym; /* Will contain a pointer value. */
13969 : 544872 : InitWhereDeclaredTok (tok, &pSym->VarParam.At); /* Will contain a pointer value. */
13970 : 544872 : AddParameter (Sym, kind, ParSym);
13971 : : /* Only declare a parameter as a local variable if it has not been done before.
13972 : : It might be declared during the definition module, forward declaration or
13973 : : proper procedure. Name mismatches are checked in P2SymBuild.mod. */
13974 : 544872 : if ((ParamName != NameKey_NulName) && ((SymbolTable_GetNth (Sym, ParamNo)) == SymbolTable_NulSym))
13975 : : {
13976 : 406406 : VariableSym = MakeVariableForParam (tok, ParamName, Sym, kind, ParamNo, ParamType, typetok);
13977 : 406406 : if (VariableSym == SymbolTable_NulSym)
13978 : : {
13979 : : return false;
13980 : : }
13981 : : else
13982 : : {
13983 : 406406 : pSym = GetPsym (ParSym);
13984 : 406406 : pSym->VarParam.ShadowVar = VariableSym;
13985 : : }
13986 : : }
13987 : 544872 : AddProcedureProcTypeParam (Sym, ParamType, isUnbounded, true);
13988 : : }
13989 : 544872 : return true;
13990 : : /* static analysis guarentees a RETURN statement will be used before here. */
13991 : : __builtin_unreachable ();
13992 : : }
13993 : :
13994 : :
13995 : : /*
13996 : : PutParamName - assigns a name to paramater no of procedure ProcSym:kind.
13997 : : */
13998 : :
13999 : 0 : extern "C" void SymbolTable_PutParamName (unsigned int tok, unsigned int ProcSym, SymbolTable_ProcedureKind kind, unsigned int no, NameKey_Name name, unsigned int ParamType, unsigned int typetok)
14000 : : {
14001 : 0 : SymbolTable_PtrToSymbol pSym;
14002 : 0 : unsigned int ParSym;
14003 : :
14004 : 0 : pSym = GetPsym (ProcSym);
14005 : 0 : ParSym = SymbolTable_NulSym;
14006 : 0 : switch (pSym->SymbolType)
14007 : : {
14008 : : case SymbolTable_ErrorSym:
14009 : : return;
14010 : 0 : break;
14011 : :
14012 : 0 : case SymbolTable_ProcedureSym:
14013 : 0 : ParSym = static_cast<unsigned int> (Lists_GetItemFromList (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam, no));
14014 : 0 : break;
14015 : :
14016 : 0 : case SymbolTable_ProcTypeSym:
14017 : 0 : ParSym = static_cast<unsigned int> (Lists_GetItemFromList (pSym->ProcType.ListOfParam, no));
14018 : 0 : break;
14019 : :
14020 : :
14021 : 0 : default:
14022 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
14023 : 0 : break;
14024 : : }
14025 : 0 : pSym = GetPsym (ParSym);
14026 : 0 : switch (pSym->SymbolType)
14027 : : {
14028 : 0 : case SymbolTable_ParamSym:
14029 : 0 : if (pSym->Param.name == NameKey_NulName)
14030 : : {
14031 : 0 : pSym->Param.name = name;
14032 : 0 : pSym->Param.ShadowVar = MakeVariableForParam (tok, name, ProcSym, kind, no, ParamType, typetok);
14033 : : }
14034 : : else
14035 : : {
14036 : 0 : M2Error_InternalError ((const char *) "name of parameter has already been assigned", 43);
14037 : : }
14038 : 0 : break;
14039 : :
14040 : 0 : case SymbolTable_VarParamSym:
14041 : 0 : if (pSym->VarParam.name == NameKey_NulName)
14042 : : {
14043 : 0 : pSym->VarParam.name = name;
14044 : 0 : pSym->VarParam.ShadowVar = MakeVariableForParam (tok, name, ProcSym, kind, no, ParamType, typetok);
14045 : : }
14046 : : else
14047 : : {
14048 : 0 : M2Error_InternalError ((const char *) "name of parameter has already been assigned", 43);
14049 : : }
14050 : 0 : break;
14051 : :
14052 : :
14053 : 0 : default:
14054 : 0 : M2Error_InternalError ((const char *) "expecting a VarParam or Param symbol", 36);
14055 : 0 : break;
14056 : : }
14057 : : }
14058 : :
14059 : :
14060 : : /*
14061 : : PutProcedureReachable - Sets the procedure, Sym, to be reachable by the
14062 : : main Module.
14063 : : */
14064 : :
14065 : 55084 : extern "C" void SymbolTable_PutProcedureReachable (unsigned int Sym)
14066 : : {
14067 : 55084 : SymbolTable_PtrToSymbol pSym;
14068 : :
14069 : 55084 : pSym = GetPsym (Sym);
14070 : 55084 : switch (pSym->SymbolType)
14071 : : {
14072 : : case SymbolTable_ErrorSym:
14073 : : break;
14074 : :
14075 : 55084 : case SymbolTable_ProcedureSym:
14076 : 55084 : pSym->Procedure.Reachable = true;
14077 : 55084 : break;
14078 : :
14079 : :
14080 : 0 : default:
14081 : 0 : M2Error_InternalError ((const char *) "expecting Procedure symbol", 26);
14082 : 55084 : break;
14083 : : }
14084 : 55084 : }
14085 : :
14086 : :
14087 : : /*
14088 : : IsProcedureReachable - Returns true if the procedure, Sym, is
14089 : : reachable from the main Module.
14090 : : */
14091 : :
14092 : 174543 : extern "C" bool SymbolTable_IsProcedureReachable (unsigned int Sym)
14093 : : {
14094 : 174543 : SymbolTable_PtrToSymbol pSym;
14095 : :
14096 : 174543 : pSym = GetPsym (Sym);
14097 : 174543 : switch (pSym->SymbolType)
14098 : : {
14099 : 174543 : case SymbolTable_ProcedureSym:
14100 : 174543 : return pSym->Procedure.Reachable;
14101 : 0 : break;
14102 : :
14103 : :
14104 : 0 : default:
14105 : 0 : M2Error_InternalError ((const char *) "expecting Procedure symbol", 26);
14106 : : break;
14107 : : }
14108 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
14109 : : __builtin_unreachable ();
14110 : : }
14111 : :
14112 : :
14113 : : /*
14114 : : PutProcedureNoReturn - places value into the no return attribute
14115 : : field of procedure sym.
14116 : : */
14117 : :
14118 : 460387 : extern "C" void SymbolTable_PutProcedureNoReturn (unsigned int Sym, SymbolTable_ProcedureKind kind, bool value)
14119 : : {
14120 : 460387 : SymbolTable_PtrToSymbol pSym;
14121 : :
14122 : 460387 : pSym = GetPsym (Sym);
14123 : 460387 : switch (pSym->SymbolType)
14124 : : {
14125 : 460387 : case SymbolTable_ProcedureSym:
14126 : 460387 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].IsNoReturn = value;
14127 : 460387 : break;
14128 : :
14129 : :
14130 : 0 : default:
14131 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
14132 : 460387 : break;
14133 : : }
14134 : 460387 : }
14135 : :
14136 : :
14137 : : /*
14138 : : IsProcedureNoReturn - returns TRUE if this procedure never returns.
14139 : : */
14140 : :
14141 : 1884051 : extern "C" bool SymbolTable_IsProcedureNoReturn (unsigned int Sym, SymbolTable_ProcedureKind kind)
14142 : : {
14143 : 1884051 : SymbolTable_PtrToSymbol pSym;
14144 : :
14145 : 1884051 : pSym = GetPsym (Sym);
14146 : 1884051 : switch (pSym->SymbolType)
14147 : : {
14148 : 1884051 : case SymbolTable_ProcedureSym:
14149 : 1884051 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].IsNoReturn;
14150 : 0 : break;
14151 : :
14152 : :
14153 : 0 : default:
14154 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
14155 : : break;
14156 : : }
14157 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
14158 : : __builtin_unreachable ();
14159 : : }
14160 : :
14161 : :
14162 : : /*
14163 : : GetProcedureProcType - returns the proctype matching procedure sym.
14164 : : */
14165 : :
14166 : 541738 : extern "C" unsigned int SymbolTable_GetProcedureProcType (unsigned int sym)
14167 : : {
14168 : 541738 : SymbolTable_PtrToSymbol pSym;
14169 : :
14170 : 541738 : pSym = GetPsym (sym);
14171 : 541738 : switch (pSym->SymbolType)
14172 : : {
14173 : 541738 : case SymbolTable_ProcedureSym:
14174 : 541738 : return pSym->Procedure.ProcedureType;
14175 : 0 : break;
14176 : :
14177 : :
14178 : 0 : default:
14179 : 0 : M2Error_InternalError ((const char *) "expecting Procedure symbol", 26);
14180 : : break;
14181 : : }
14182 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
14183 : : __builtin_unreachable ();
14184 : : }
14185 : :
14186 : :
14187 : : /*
14188 : : PutModuleStartQuad - Places QuadNumber into the Module symbol, Sym.
14189 : : QuadNumber is the start quad of Module,
14190 : : Sym.
14191 : : */
14192 : :
14193 : 63449 : extern "C" void SymbolTable_PutModuleStartQuad (unsigned int Sym, unsigned int QuadNumber)
14194 : : {
14195 : 63449 : SymbolTable_PtrToSymbol pSym;
14196 : :
14197 : 63449 : pSym = GetPsym (Sym);
14198 : 63449 : switch (pSym->SymbolType)
14199 : : {
14200 : 11338 : case SymbolTable_ModuleSym:
14201 : 11338 : pSym->Module.StartQuad = QuadNumber;
14202 : 11338 : break;
14203 : :
14204 : 52111 : case SymbolTable_DefImpSym:
14205 : 52111 : pSym->DefImp.StartQuad = QuadNumber;
14206 : 52111 : break;
14207 : :
14208 : :
14209 : 0 : default:
14210 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14211 : 63449 : break;
14212 : : }
14213 : 63449 : }
14214 : :
14215 : :
14216 : : /*
14217 : : PutModuleEndQuad - Places QuadNumber into the Module symbol, Sym.
14218 : : QuadNumber is the end quad of Module,
14219 : : Sym.
14220 : : */
14221 : :
14222 : 63317 : extern "C" void SymbolTable_PutModuleEndQuad (unsigned int Sym, unsigned int QuadNumber)
14223 : : {
14224 : 63317 : SymbolTable_PtrToSymbol pSym;
14225 : :
14226 : 63317 : pSym = GetPsym (Sym);
14227 : 63317 : switch (pSym->SymbolType)
14228 : : {
14229 : 11206 : case SymbolTable_ModuleSym:
14230 : 11206 : pSym->Module.EndQuad = QuadNumber;
14231 : 11206 : break;
14232 : :
14233 : 52111 : case SymbolTable_DefImpSym:
14234 : 52111 : pSym->DefImp.EndQuad = QuadNumber;
14235 : 52111 : break;
14236 : :
14237 : :
14238 : 0 : default:
14239 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14240 : 63317 : break;
14241 : : }
14242 : 63317 : }
14243 : :
14244 : :
14245 : : /*
14246 : : PutModuleFinallyStartQuad - Places QuadNumber into the Module symbol, Sym.
14247 : : QuadNumber is the finally start quad of
14248 : : Module, Sym.
14249 : : */
14250 : :
14251 : 14485 : extern "C" void SymbolTable_PutModuleFinallyStartQuad (unsigned int Sym, unsigned int QuadNumber)
14252 : : {
14253 : 14485 : SymbolTable_PtrToSymbol pSym;
14254 : :
14255 : 14485 : pSym = GetPsym (Sym);
14256 : 14485 : switch (pSym->SymbolType)
14257 : : {
14258 : 11200 : case SymbolTable_ModuleSym:
14259 : 11200 : pSym->Module.StartFinishQuad = QuadNumber;
14260 : 11200 : break;
14261 : :
14262 : 3285 : case SymbolTable_DefImpSym:
14263 : 3285 : pSym->DefImp.StartFinishQuad = QuadNumber;
14264 : 3285 : break;
14265 : :
14266 : :
14267 : 0 : default:
14268 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14269 : 14485 : break;
14270 : : }
14271 : 14485 : }
14272 : :
14273 : :
14274 : : /*
14275 : : PutModuleFinallyEndQuad - Places QuadNumber into the Module symbol, Sym.
14276 : : QuadNumber is the end quad of the finally block
14277 : : in Module, Sym.
14278 : : */
14279 : :
14280 : 14485 : extern "C" void SymbolTable_PutModuleFinallyEndQuad (unsigned int Sym, unsigned int QuadNumber)
14281 : : {
14282 : 14485 : SymbolTable_PtrToSymbol pSym;
14283 : :
14284 : 14485 : pSym = GetPsym (Sym);
14285 : 14485 : switch (pSym->SymbolType)
14286 : : {
14287 : 11200 : case SymbolTable_ModuleSym:
14288 : 11200 : pSym->Module.EndFinishQuad = QuadNumber;
14289 : 11200 : break;
14290 : :
14291 : 3285 : case SymbolTable_DefImpSym:
14292 : 3285 : pSym->DefImp.EndFinishQuad = QuadNumber;
14293 : 3285 : break;
14294 : :
14295 : :
14296 : 0 : default:
14297 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14298 : 14485 : break;
14299 : : }
14300 : 14485 : }
14301 : :
14302 : :
14303 : : /*
14304 : : GetModuleQuads - Returns, StartInit EndInit StartFinish EndFinish,
14305 : : Quads of a Module, Sym.
14306 : : Start and End represent the initialization code
14307 : : of the Module, Sym.
14308 : : */
14309 : :
14310 : 0 : extern "C" void SymbolTable_GetModuleQuads (unsigned int Sym, unsigned int *StartInit, unsigned int *EndInit, unsigned int *StartFinish, unsigned int *EndFinish)
14311 : : {
14312 : 0 : SymbolTable_PtrToSymbol pSym;
14313 : :
14314 : 0 : pSym = GetPsym (Sym);
14315 : 0 : switch (pSym->SymbolType)
14316 : : {
14317 : 0 : case SymbolTable_ModuleSym:
14318 : 0 : (*StartInit) = pSym->Module.StartQuad;
14319 : 0 : (*EndInit) = pSym->Module.EndQuad;
14320 : 0 : (*StartFinish) = pSym->Module.StartFinishQuad;
14321 : 0 : (*EndFinish) = pSym->Module.EndFinishQuad;
14322 : 0 : break;
14323 : :
14324 : 0 : case SymbolTable_DefImpSym:
14325 : 0 : (*StartInit) = pSym->DefImp.StartQuad;
14326 : 0 : (*EndInit) = pSym->DefImp.EndQuad;
14327 : 0 : (*StartFinish) = pSym->DefImp.StartFinishQuad;
14328 : 0 : (*EndFinish) = pSym->DefImp.EndFinishQuad;
14329 : 0 : break;
14330 : :
14331 : :
14332 : 0 : default:
14333 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14334 : 0 : break;
14335 : : }
14336 : 0 : }
14337 : :
14338 : :
14339 : : /*
14340 : : PutModuleFinallyFunction - Places Tree, finally, into the Module symbol, Sym.
14341 : : */
14342 : :
14343 : 0 : extern "C" void SymbolTable_PutModuleFinallyFunction (unsigned int Sym, tree finally)
14344 : : {
14345 : 0 : SymbolTable_PtrToSymbol pSym;
14346 : :
14347 : 0 : pSym = GetPsym (Sym);
14348 : 0 : switch (pSym->SymbolType)
14349 : : {
14350 : 0 : case SymbolTable_ModuleSym:
14351 : 0 : pSym->Module.FinallyFunction = finally;
14352 : 0 : break;
14353 : :
14354 : 0 : case SymbolTable_DefImpSym:
14355 : 0 : pSym->DefImp.FinallyFunction = finally;
14356 : 0 : break;
14357 : :
14358 : :
14359 : 0 : default:
14360 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14361 : 0 : break;
14362 : : }
14363 : 0 : }
14364 : :
14365 : :
14366 : : /*
14367 : : GetModuleFinallyFunction - returns the finally tree from the Module symbol, Sym.
14368 : : */
14369 : :
14370 : 0 : extern "C" tree SymbolTable_GetModuleFinallyFunction (unsigned int Sym)
14371 : : {
14372 : 0 : SymbolTable_PtrToSymbol pSym;
14373 : :
14374 : 0 : pSym = GetPsym (Sym);
14375 : 0 : switch (pSym->SymbolType)
14376 : : {
14377 : 0 : case SymbolTable_ModuleSym:
14378 : 0 : return pSym->Module.FinallyFunction;
14379 : 0 : break;
14380 : :
14381 : 0 : case SymbolTable_DefImpSym:
14382 : 0 : return pSym->DefImp.FinallyFunction;
14383 : 0 : break;
14384 : :
14385 : :
14386 : 0 : default:
14387 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
14388 : : break;
14389 : : }
14390 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
14391 : : __builtin_unreachable ();
14392 : : }
14393 : :
14394 : :
14395 : : /*
14396 : : PutProcedureScopeQuad - Places QuadNumber into the Procedure symbol, Sym.
14397 : : QuadNumber is the start quad of scope for procedure,
14398 : : Sym.
14399 : : */
14400 : :
14401 : 67351 : extern "C" void SymbolTable_PutProcedureScopeQuad (unsigned int Sym, unsigned int QuadNumber)
14402 : : {
14403 : 67351 : SymbolTable_PtrToSymbol pSym;
14404 : :
14405 : 67351 : pSym = GetPsym (Sym);
14406 : 67351 : switch (pSym->SymbolType)
14407 : : {
14408 : 67351 : case SymbolTable_ProcedureSym:
14409 : 67351 : pSym->Procedure.ScopeQuad = QuadNumber;
14410 : 67351 : break;
14411 : :
14412 : :
14413 : 0 : default:
14414 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
14415 : 67351 : break;
14416 : : }
14417 : 67351 : }
14418 : :
14419 : :
14420 : : /*
14421 : : PutProcedureStartQuad - Places QuadNumber into the Procedure symbol, Sym.
14422 : : QuadNumber is the start quad of procedure,
14423 : : Sym.
14424 : : */
14425 : :
14426 : 67339 : extern "C" void SymbolTable_PutProcedureStartQuad (unsigned int Sym, unsigned int QuadNumber)
14427 : : {
14428 : 67339 : SymbolTable_PtrToSymbol pSym;
14429 : :
14430 : 67339 : pSym = GetPsym (Sym);
14431 : 67339 : switch (pSym->SymbolType)
14432 : : {
14433 : 67339 : case SymbolTable_ProcedureSym:
14434 : 67339 : pSym->Procedure.StartQuad = QuadNumber;
14435 : 67339 : break;
14436 : :
14437 : :
14438 : 0 : default:
14439 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
14440 : 67339 : break;
14441 : : }
14442 : 67339 : }
14443 : :
14444 : :
14445 : : /*
14446 : : PutProcedureEndQuad - Places QuadNumber into the Procedure symbol, Sym.
14447 : : QuadNumber is the end quad of procedure,
14448 : : Sym.
14449 : : */
14450 : :
14451 : 67309 : extern "C" void SymbolTable_PutProcedureEndQuad (unsigned int Sym, unsigned int QuadNumber)
14452 : : {
14453 : 67309 : SymbolTable_PtrToSymbol pSym;
14454 : :
14455 : 67309 : pSym = GetPsym (Sym);
14456 : 67309 : switch (pSym->SymbolType)
14457 : : {
14458 : 67309 : case SymbolTable_ProcedureSym:
14459 : 67309 : pSym->Procedure.EndQuad = QuadNumber;
14460 : 67309 : break;
14461 : :
14462 : :
14463 : 0 : default:
14464 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
14465 : 67309 : break;
14466 : : }
14467 : 67309 : }
14468 : :
14469 : :
14470 : : /*
14471 : : GetProcedureQuads - Returns, Start and End, Quads of a procedure, Sym.
14472 : : */
14473 : :
14474 : 553168 : extern "C" void SymbolTable_GetProcedureQuads (unsigned int Sym, unsigned int *scope, unsigned int *start, unsigned int *end)
14475 : : {
14476 : 553168 : SymbolTable_PtrToSymbol pSym;
14477 : :
14478 : 553168 : pSym = GetPsym (Sym);
14479 : 553168 : switch (pSym->SymbolType)
14480 : : {
14481 : 553168 : case SymbolTable_ProcedureSym:
14482 : 553168 : (*scope) = pSym->Procedure.ScopeQuad;
14483 : 553168 : (*start) = pSym->Procedure.StartQuad;
14484 : 553168 : (*end) = pSym->Procedure.EndQuad;
14485 : 553168 : break;
14486 : :
14487 : :
14488 : 0 : default:
14489 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
14490 : 553168 : break;
14491 : : }
14492 : 553168 : }
14493 : :
14494 : :
14495 : : /*
14496 : : GetQuads - assigns Start and End to the beginning and end of
14497 : : symbol, Sym, usage.
14498 : : */
14499 : :
14500 : 0 : extern "C" void SymbolTable_GetQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int *Start, unsigned int *End)
14501 : : {
14502 : 0 : unsigned int StartRead;
14503 : 0 : unsigned int EndRead;
14504 : 0 : unsigned int StartWrite;
14505 : 0 : unsigned int EndWrite;
14506 : :
14507 : 0 : SymbolTable_GetReadQuads (Sym, m, &StartRead, &EndRead);
14508 : 0 : SymbolTable_GetWriteQuads (Sym, m, &StartWrite, &EndWrite);
14509 : 0 : if (StartRead == 0)
14510 : : {
14511 : 0 : (*Start) = StartWrite;
14512 : : }
14513 : 0 : else if (StartWrite == 0)
14514 : : {
14515 : : /* avoid dangling else. */
14516 : 0 : (*Start) = StartRead;
14517 : : }
14518 : : else
14519 : : {
14520 : : /* avoid dangling else. */
14521 : 0 : (*Start) = Min (StartRead, StartWrite);
14522 : : }
14523 : 0 : if (EndRead == 0)
14524 : : {
14525 : 0 : (*End) = EndWrite;
14526 : : }
14527 : 0 : else if (EndWrite == 0)
14528 : : {
14529 : : /* avoid dangling else. */
14530 : 0 : (*End) = EndRead;
14531 : : }
14532 : : else
14533 : : {
14534 : : /* avoid dangling else. */
14535 : 0 : (*End) = Max (EndRead, EndWrite);
14536 : : }
14537 : 0 : }
14538 : :
14539 : :
14540 : : /*
14541 : : GetReadQuads - assigns Start and End to the beginning and end of
14542 : : symbol, Sym, read history usage.
14543 : : */
14544 : :
14545 : 0 : extern "C" void SymbolTable_GetReadQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int *Start, unsigned int *End)
14546 : : {
14547 : 0 : SymbolTable_GetReadLimitQuads (Sym, m, 0, 0, Start, End);
14548 : 0 : }
14549 : :
14550 : :
14551 : : /*
14552 : : GetWriteQuads - assigns Start and End to the beginning and end of
14553 : : symbol, Sym, usage.
14554 : : */
14555 : :
14556 : 0 : extern "C" void SymbolTable_GetWriteQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int *Start, unsigned int *End)
14557 : : {
14558 : 0 : SymbolTable_GetWriteLimitQuads (Sym, m, 0, 0, Start, End);
14559 : 0 : }
14560 : :
14561 : :
14562 : : /*
14563 : : PutReadQuad - places Quad into the list of symbol usage.
14564 : : */
14565 : :
14566 : 1325166 : extern "C" void SymbolTable_PutReadQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad)
14567 : : {
14568 : 1325166 : SymbolTable_PtrToSymbol pSym;
14569 : :
14570 : 1325166 : pSym = GetPsym (Sym);
14571 : 1325166 : switch (pSym->SymbolType)
14572 : : {
14573 : 1325166 : case SymbolTable_VarSym:
14574 : 1325166 : Lists_IncludeItemIntoList (static_cast<Lists_List> (pSym->Var.ReadUsageList.array[m-SymbolTable_RightValue]), Quad);
14575 : 1325166 : break;
14576 : :
14577 : :
14578 : 0 : default:
14579 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
14580 : 1325166 : break;
14581 : : }
14582 : 1325166 : }
14583 : :
14584 : :
14585 : : /*
14586 : : RemoveReadQuad - places Quad into the list of symbol usage.
14587 : : */
14588 : :
14589 : 96271 : extern "C" void SymbolTable_RemoveReadQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad)
14590 : : {
14591 : 96271 : SymbolTable_PtrToSymbol pSym;
14592 : :
14593 : 96271 : pSym = GetPsym (Sym);
14594 : 96271 : switch (pSym->SymbolType)
14595 : : {
14596 : 96271 : case SymbolTable_VarSym:
14597 : 96271 : Lists_RemoveItemFromList (static_cast<Lists_List> (pSym->Var.ReadUsageList.array[m-SymbolTable_RightValue]), Quad);
14598 : 96271 : break;
14599 : :
14600 : :
14601 : 0 : default:
14602 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
14603 : 96271 : break;
14604 : : }
14605 : 96271 : }
14606 : :
14607 : :
14608 : : /*
14609 : : PutWriteQuad - places Quad into the list of symbol usage.
14610 : : */
14611 : :
14612 : 867064 : extern "C" void SymbolTable_PutWriteQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad)
14613 : : {
14614 : 867064 : SymbolTable_PtrToSymbol pSym;
14615 : :
14616 : 867064 : pSym = GetPsym (Sym);
14617 : 867064 : switch (pSym->SymbolType)
14618 : : {
14619 : 867064 : case SymbolTable_VarSym:
14620 : 867064 : Lists_IncludeItemIntoList (static_cast<Lists_List> (pSym->Var.WriteUsageList.array[m-SymbolTable_RightValue]), Quad);
14621 : 867064 : break;
14622 : :
14623 : :
14624 : 0 : default:
14625 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
14626 : 867064 : break;
14627 : : }
14628 : 867064 : }
14629 : :
14630 : :
14631 : : /*
14632 : : RemoveWriteQuad - places Quad into the list of symbol usage.
14633 : : */
14634 : :
14635 : 182620 : extern "C" void SymbolTable_RemoveWriteQuad (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int Quad)
14636 : : {
14637 : 182620 : SymbolTable_PtrToSymbol pSym;
14638 : :
14639 : 182620 : pSym = GetPsym (Sym);
14640 : 182620 : switch (pSym->SymbolType)
14641 : : {
14642 : 182620 : case SymbolTable_VarSym:
14643 : 182620 : Lists_RemoveItemFromList (static_cast<Lists_List> (pSym->Var.WriteUsageList.array[m-SymbolTable_RightValue]), Quad);
14644 : 182620 : break;
14645 : :
14646 : :
14647 : 0 : default:
14648 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
14649 : 182620 : break;
14650 : : }
14651 : 182620 : }
14652 : :
14653 : :
14654 : : /*
14655 : : GetReadLimitQuads - returns Start and End which have been assigned
14656 : : the start and end of when the symbol was read
14657 : : to within: StartLimit..EndLimit.
14658 : : */
14659 : :
14660 : 0 : extern "C" void SymbolTable_GetReadLimitQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int StartLimit, unsigned int EndLimit, unsigned int *Start, unsigned int *End)
14661 : : {
14662 : 0 : SymbolTable_PtrToSymbol pSym;
14663 : :
14664 : 0 : pSym = GetPsym (Sym);
14665 : 0 : switch (pSym->SymbolType)
14666 : : {
14667 : 0 : case SymbolTable_VarSym:
14668 : 0 : DoFindLimits (StartLimit, EndLimit, Start, End, static_cast<Lists_List> (pSym->Var.ReadUsageList.array[m-SymbolTable_RightValue]));
14669 : 0 : break;
14670 : :
14671 : :
14672 : 0 : default:
14673 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
14674 : 0 : break;
14675 : : }
14676 : 0 : }
14677 : :
14678 : :
14679 : : /*
14680 : : GetWriteLimitQuads - returns Start and End which have been assigned
14681 : : the start and end of when the symbol was written
14682 : : to within: StartLimit..EndLimit.
14683 : : */
14684 : :
14685 : 30 : extern "C" void SymbolTable_GetWriteLimitQuads (unsigned int Sym, SymbolTable_ModeOfAddr m, unsigned int StartLimit, unsigned int EndLimit, unsigned int *Start, unsigned int *End)
14686 : : {
14687 : 30 : SymbolTable_PtrToSymbol pSym;
14688 : :
14689 : 30 : pSym = GetPsym (Sym);
14690 : 30 : switch (pSym->SymbolType)
14691 : : {
14692 : 30 : case SymbolTable_VarSym:
14693 : 30 : DoFindLimits (StartLimit, EndLimit, Start, End, static_cast<Lists_List> (pSym->Var.WriteUsageList.array[m-SymbolTable_RightValue]));
14694 : 30 : break;
14695 : :
14696 : :
14697 : 0 : default:
14698 : 0 : M2Error_InternalError ((const char *) "expecting a Var symbol", 22);
14699 : 30 : break;
14700 : : }
14701 : 30 : }
14702 : :
14703 : :
14704 : : /*
14705 : : GetNthProcedure - Returns the Nth procedure in Module, Sym.
14706 : : */
14707 : :
14708 : 0 : extern "C" unsigned int SymbolTable_GetNthProcedure (unsigned int Sym, unsigned int n)
14709 : : {
14710 : 0 : SymbolTable_PtrToSymbol pSym;
14711 : :
14712 : 0 : pSym = GetPsym (Sym);
14713 : 0 : switch (pSym->SymbolType)
14714 : : {
14715 : 0 : case SymbolTable_DefImpSym:
14716 : 0 : return static_cast<unsigned int> (Lists_GetItemFromList (pSym->DefImp.ListOfProcs, n));
14717 : 0 : break;
14718 : :
14719 : 0 : case SymbolTable_ModuleSym:
14720 : 0 : return static_cast<unsigned int> (Lists_GetItemFromList (pSym->Module.ListOfProcs, n));
14721 : 0 : break;
14722 : :
14723 : :
14724 : 0 : default:
14725 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
14726 : : break;
14727 : : }
14728 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
14729 : : __builtin_unreachable ();
14730 : : }
14731 : :
14732 : :
14733 : : /*
14734 : : GetDeclaredDef - returns the tokenno where the symbol was declared
14735 : : in the definition module. UnknownTokenNo is returned
14736 : : if no declaration occurred.
14737 : : */
14738 : :
14739 : 66 : extern "C" unsigned int SymbolTable_GetDeclaredDef (unsigned int Sym)
14740 : : {
14741 : 66 : return SymbolTable_GetDeclaredDefinition (Sym);
14742 : : /* static analysis guarentees a RETURN statement will be used before here. */
14743 : : __builtin_unreachable ();
14744 : : }
14745 : :
14746 : :
14747 : : /*
14748 : : GetDeclaredMod - returns the tokenno where the symbol was declared.
14749 : : in the program or implementation module.
14750 : : UnknownTokenNo is returned if no declaration occurred.
14751 : : */
14752 : :
14753 : 18998952 : extern "C" unsigned int SymbolTable_GetDeclaredMod (unsigned int Sym)
14754 : : {
14755 : 18998952 : return SymbolTable_GetDeclaredModule (Sym);
14756 : : /* static analysis guarentees a RETURN statement will be used before here. */
14757 : : __builtin_unreachable ();
14758 : : }
14759 : :
14760 : :
14761 : : /*
14762 : : GetDeclaredFor - returns the token where this forward procedure symbol
14763 : : was declared in the program or implementation module.
14764 : : UnknownTokenNo is returned if no declaration occurred.
14765 : : */
14766 : :
14767 : 0 : extern "C" unsigned int SymbolTable_GetDeclaredFor (unsigned int Sym)
14768 : : {
14769 : 0 : if (SymbolTable_IsProcedure (Sym))
14770 : : {
14771 : 0 : return SymbolTable_GetProcedureDeclaredTok (Sym, SymbolTable_ForwardProcedure);
14772 : : }
14773 : : else
14774 : : {
14775 : : return M2LexBuf_UnknownTokenNo;
14776 : : }
14777 : : /* static analysis guarentees a RETURN statement will be used before here. */
14778 : : __builtin_unreachable ();
14779 : : }
14780 : :
14781 : :
14782 : : /*
14783 : : GetDeclaredDefinition - returns the token where this symbol
14784 : : was declared in the definition module.
14785 : : */
14786 : :
14787 : 20710 : extern "C" unsigned int SymbolTable_GetDeclaredDefinition (unsigned int Sym)
14788 : : {
14789 : 20710 : SymbolTable_PtrToSymbol pSym;
14790 : :
14791 : 20710 : pSym = GetPsym (Sym);
14792 : 20710 : switch (pSym->SymbolType)
14793 : : {
14794 : 0 : case SymbolTable_ErrorSym:
14795 : 0 : return pSym->Error.At.DefDeclared;
14796 : 0 : break;
14797 : :
14798 : 0 : case SymbolTable_ObjectSym:
14799 : 0 : return pSym->Object.At.DefDeclared;
14800 : 0 : break;
14801 : :
14802 : 0 : case SymbolTable_VarientSym:
14803 : 0 : return pSym->Varient.At.DefDeclared;
14804 : 6 : break;
14805 : :
14806 : 6 : case SymbolTable_RecordSym:
14807 : 6 : return pSym->Record.At.DefDeclared;
14808 : 0 : break;
14809 : :
14810 : 0 : case SymbolTable_SubrangeSym:
14811 : 0 : return pSym->Subrange.At.DefDeclared;
14812 : 0 : break;
14813 : :
14814 : 0 : case SymbolTable_EnumerationSym:
14815 : 0 : return pSym->Enumeration.At.DefDeclared;
14816 : 0 : break;
14817 : :
14818 : 0 : case SymbolTable_ArraySym:
14819 : 0 : return pSym->Array.At.DefDeclared;
14820 : 0 : break;
14821 : :
14822 : 0 : case SymbolTable_SubscriptSym:
14823 : 0 : return pSym->Subscript.At.DefDeclared;
14824 : 0 : break;
14825 : :
14826 : 0 : case SymbolTable_UnboundedSym:
14827 : 0 : return pSym->Unbounded.At.DefDeclared;
14828 : 0 : break;
14829 : :
14830 : 0 : case SymbolTable_ProcedureSym:
14831 : 0 : return pSym->Procedure.At.DefDeclared;
14832 : 0 : break;
14833 : :
14834 : 0 : case SymbolTable_ProcTypeSym:
14835 : 0 : return pSym->ProcType.At.DefDeclared;
14836 : 54 : break;
14837 : :
14838 : 54 : case SymbolTable_ParamSym:
14839 : 54 : return pSym->Param.At.DefDeclared;
14840 : 6 : break;
14841 : :
14842 : 6 : case SymbolTable_VarParamSym:
14843 : 6 : return pSym->VarParam.At.DefDeclared;
14844 : 0 : break;
14845 : :
14846 : 0 : case SymbolTable_ConstStringSym:
14847 : 0 : return pSym->ConstString.At.DefDeclared;
14848 : 0 : break;
14849 : :
14850 : 0 : case SymbolTable_ConstLitSym:
14851 : 0 : return pSym->ConstLit.At.DefDeclared;
14852 : 0 : break;
14853 : :
14854 : 0 : case SymbolTable_ConstVarSym:
14855 : 0 : return pSym->ConstVar.At.DefDeclared;
14856 : 0 : break;
14857 : :
14858 : 0 : case SymbolTable_VarSym:
14859 : 0 : return pSym->Var.At.DefDeclared;
14860 : 0 : break;
14861 : :
14862 : 0 : case SymbolTable_TypeSym:
14863 : 0 : return pSym->Type.At.DefDeclared;
14864 : 0 : break;
14865 : :
14866 : 0 : case SymbolTable_PointerSym:
14867 : 0 : return pSym->Pointer.At.DefDeclared;
14868 : 0 : break;
14869 : :
14870 : 0 : case SymbolTable_RecordFieldSym:
14871 : 0 : return pSym->RecordField.At.DefDeclared;
14872 : 0 : break;
14873 : :
14874 : 0 : case SymbolTable_VarientFieldSym:
14875 : 0 : return pSym->VarientField.At.DefDeclared;
14876 : 0 : break;
14877 : :
14878 : 0 : case SymbolTable_EnumerationFieldSym:
14879 : 0 : return pSym->EnumerationField.At.DefDeclared;
14880 : 0 : break;
14881 : :
14882 : 0 : case SymbolTable_SetSym:
14883 : 0 : return pSym->Set.At.DefDeclared;
14884 : 0 : break;
14885 : :
14886 : 0 : case SymbolTable_DefImpSym:
14887 : 0 : return pSym->DefImp.At.DefDeclared;
14888 : 0 : break;
14889 : :
14890 : 0 : case SymbolTable_ModuleSym:
14891 : 0 : return pSym->Module.At.DefDeclared;
14892 : 0 : break;
14893 : :
14894 : 0 : case SymbolTable_UndefinedSym:
14895 : 0 : return SymbolTable_GetFirstUsed (Sym);
14896 : 20644 : break;
14897 : :
14898 : 20644 : case SymbolTable_ImportSym:
14899 : 20644 : return pSym->Import.at.DefDeclared;
14900 : 0 : break;
14901 : :
14902 : 0 : case SymbolTable_ImportStatementSym:
14903 : 0 : return pSym->ImportStatement.at.DefDeclared;
14904 : 0 : break;
14905 : :
14906 : 0 : case SymbolTable_PartialUnboundedSym:
14907 : 0 : return SymbolTable_GetDeclaredDefinition (pSym->PartialUnbounded.Type);
14908 : 0 : break;
14909 : :
14910 : :
14911 : 0 : default:
14912 : 0 : M2Error_InternalError ((const char *) "not expecting this type of symbol", 33);
14913 : : break;
14914 : : }
14915 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
14916 : : __builtin_unreachable ();
14917 : : }
14918 : :
14919 : :
14920 : : /*
14921 : : GetDeclaredModule - returns the token where this symbol was declared
14922 : : in an implementation or program module.
14923 : : */
14924 : :
14925 : 19018134 : extern "C" unsigned int SymbolTable_GetDeclaredModule (unsigned int Sym)
14926 : : {
14927 : 19018134 : SymbolTable_PtrToSymbol pSym;
14928 : :
14929 : 19018134 : pSym = GetPsym (Sym);
14930 : 19018134 : switch (pSym->SymbolType)
14931 : : {
14932 : 0 : case SymbolTable_ErrorSym:
14933 : 0 : return pSym->Error.At.ModDeclared;
14934 : 0 : break;
14935 : :
14936 : 0 : case SymbolTable_ObjectSym:
14937 : 0 : return pSym->Object.At.ModDeclared;
14938 : 552 : break;
14939 : :
14940 : 552 : case SymbolTable_VarientSym:
14941 : 552 : return pSym->Varient.At.ModDeclared;
14942 : 234618 : break;
14943 : :
14944 : 234618 : case SymbolTable_RecordSym:
14945 : 234618 : return pSym->Record.At.ModDeclared;
14946 : 1247966 : break;
14947 : :
14948 : 1247966 : case SymbolTable_SubrangeSym:
14949 : 1247966 : return pSym->Subrange.At.ModDeclared;
14950 : 23650 : break;
14951 : :
14952 : 23650 : case SymbolTable_EnumerationSym:
14953 : 23650 : return pSym->Enumeration.At.ModDeclared;
14954 : 31634 : break;
14955 : :
14956 : 31634 : case SymbolTable_ArraySym:
14957 : 31634 : return pSym->Array.At.ModDeclared;
14958 : 0 : break;
14959 : :
14960 : 0 : case SymbolTable_SubscriptSym:
14961 : 0 : return pSym->Subscript.At.ModDeclared;
14962 : 40404 : break;
14963 : :
14964 : 40404 : case SymbolTable_UnboundedSym:
14965 : 40404 : return pSym->Unbounded.At.ModDeclared;
14966 : 3499570 : break;
14967 : :
14968 : 3499570 : case SymbolTable_ProcedureSym:
14969 : 3499570 : return pSym->Procedure.At.ModDeclared;
14970 : 51840 : break;
14971 : :
14972 : 51840 : case SymbolTable_ProcTypeSym:
14973 : 51840 : return pSym->ProcType.At.ModDeclared;
14974 : 67851 : break;
14975 : :
14976 : 67851 : case SymbolTable_ParamSym:
14977 : 67851 : return pSym->Param.At.ModDeclared;
14978 : 337771 : break;
14979 : :
14980 : 337771 : case SymbolTable_VarParamSym:
14981 : 337771 : return pSym->VarParam.At.ModDeclared;
14982 : 771958 : break;
14983 : :
14984 : 771958 : case SymbolTable_ConstStringSym:
14985 : 771958 : return pSym->ConstString.At.ModDeclared;
14986 : 958914 : break;
14987 : :
14988 : 958914 : case SymbolTable_ConstLitSym:
14989 : 958914 : return pSym->ConstLit.At.ModDeclared;
14990 : 519804 : break;
14991 : :
14992 : 519804 : case SymbolTable_ConstVarSym:
14993 : 519804 : return pSym->ConstVar.At.ModDeclared;
14994 : 5255519 : break;
14995 : :
14996 : 5255519 : case SymbolTable_VarSym:
14997 : 5255519 : return pSym->Var.At.ModDeclared;
14998 : 80003 : break;
14999 : :
15000 : 80003 : case SymbolTable_TypeSym:
15001 : 80003 : return pSym->Type.At.ModDeclared;
15002 : 12 : break;
15003 : :
15004 : 12 : case SymbolTable_PointerSym:
15005 : 12 : return pSym->Pointer.At.ModDeclared;
15006 : 313160 : break;
15007 : :
15008 : 313160 : case SymbolTable_RecordFieldSym:
15009 : 313160 : return pSym->RecordField.At.ModDeclared;
15010 : 1332 : break;
15011 : :
15012 : 1332 : case SymbolTable_VarientFieldSym:
15013 : 1332 : return pSym->VarientField.At.ModDeclared;
15014 : 5346520 : break;
15015 : :
15016 : 5346520 : case SymbolTable_EnumerationFieldSym:
15017 : 5346520 : return pSym->EnumerationField.At.ModDeclared;
15018 : 187854 : break;
15019 : :
15020 : 187854 : case SymbolTable_SetSym:
15021 : 187854 : return pSym->Set.At.ModDeclared;
15022 : 6574 : break;
15023 : :
15024 : 6574 : case SymbolTable_DefImpSym:
15025 : 6574 : return pSym->DefImp.At.ModDeclared;
15026 : 21452 : break;
15027 : :
15028 : 21452 : case SymbolTable_ModuleSym:
15029 : 21452 : return pSym->Module.At.ModDeclared;
15030 : 0 : break;
15031 : :
15032 : 0 : case SymbolTable_UndefinedSym:
15033 : 0 : return SymbolTable_GetFirstUsed (Sym);
15034 : 19176 : break;
15035 : :
15036 : 19176 : case SymbolTable_ImportSym:
15037 : 19176 : return pSym->Import.at.ModDeclared;
15038 : 0 : break;
15039 : :
15040 : 0 : case SymbolTable_ImportStatementSym:
15041 : 0 : return pSym->ImportStatement.at.ModDeclared;
15042 : 0 : break;
15043 : :
15044 : 0 : case SymbolTable_PartialUnboundedSym:
15045 : 0 : return SymbolTable_GetDeclaredModule (pSym->PartialUnbounded.Type);
15046 : 0 : break;
15047 : :
15048 : :
15049 : 0 : default:
15050 : 0 : M2Error_InternalError ((const char *) "not expecting this type of symbol", 33);
15051 : : break;
15052 : : }
15053 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
15054 : : __builtin_unreachable ();
15055 : : }
15056 : :
15057 : :
15058 : : /*
15059 : : PutDeclared - adds an entry to symbol, Sym, indicating that it
15060 : : was declared at, tok. This routine
15061 : : may be called twice, once for definition module
15062 : : partial declaration and once when parsing the
15063 : : implementation module.
15064 : : */
15065 : :
15066 : 18645468 : extern "C" void SymbolTable_PutDeclared (unsigned int tok, unsigned int Sym)
15067 : : {
15068 : 18645468 : if (M2Comp_CompilingDefinitionModule ())
15069 : : {
15070 : 11002327 : PutDeclaredDefinition (tok, Sym);
15071 : : }
15072 : : else
15073 : : {
15074 : 7643141 : PutDeclaredModule (tok, Sym);
15075 : : }
15076 : 18645468 : }
15077 : :
15078 : :
15079 : : /*
15080 : : GetFirstUsed - returns the token where this symbol was first used.
15081 : : */
15082 : :
15083 : 402 : extern "C" unsigned int SymbolTable_GetFirstUsed (unsigned int Sym)
15084 : : {
15085 : 402 : SymbolTable_PtrToSymbol pSym;
15086 : :
15087 : 402 : pSym = GetPsym (Sym);
15088 : 402 : switch (pSym->SymbolType)
15089 : : {
15090 : 0 : case SymbolTable_ErrorSym:
15091 : 0 : return pSym->Error.At.FirstUsed;
15092 : 162 : break;
15093 : :
15094 : 162 : case SymbolTable_ObjectSym:
15095 : 162 : return pSym->Object.At.FirstUsed;
15096 : 222 : break;
15097 : :
15098 : 222 : case SymbolTable_UndefinedSym:
15099 : 222 : return pSym->Undefined.At.FirstUsed;
15100 : 0 : break;
15101 : :
15102 : 0 : case SymbolTable_VarientSym:
15103 : 0 : return pSym->Varient.At.FirstUsed;
15104 : 0 : break;
15105 : :
15106 : 0 : case SymbolTable_RecordSym:
15107 : 0 : return pSym->Record.At.FirstUsed;
15108 : 0 : break;
15109 : :
15110 : 0 : case SymbolTable_SubrangeSym:
15111 : 0 : return pSym->Subrange.At.FirstUsed;
15112 : 0 : break;
15113 : :
15114 : 0 : case SymbolTable_EnumerationSym:
15115 : 0 : return pSym->Enumeration.At.FirstUsed;
15116 : 6 : break;
15117 : :
15118 : 6 : case SymbolTable_ArraySym:
15119 : 6 : return pSym->Array.At.FirstUsed;
15120 : 0 : break;
15121 : :
15122 : 0 : case SymbolTable_SubscriptSym:
15123 : 0 : return pSym->Subscript.At.FirstUsed;
15124 : 0 : break;
15125 : :
15126 : 0 : case SymbolTable_UnboundedSym:
15127 : 0 : return pSym->Unbounded.At.FirstUsed;
15128 : 0 : break;
15129 : :
15130 : 0 : case SymbolTable_ProcedureSym:
15131 : 0 : return pSym->Procedure.At.FirstUsed;
15132 : 0 : break;
15133 : :
15134 : 0 : case SymbolTable_ProcTypeSym:
15135 : 0 : return pSym->ProcType.At.FirstUsed;
15136 : 0 : break;
15137 : :
15138 : 0 : case SymbolTable_ParamSym:
15139 : 0 : return pSym->Param.At.FirstUsed;
15140 : 0 : break;
15141 : :
15142 : 0 : case SymbolTable_VarParamSym:
15143 : 0 : return pSym->VarParam.At.FirstUsed;
15144 : 0 : break;
15145 : :
15146 : 0 : case SymbolTable_ConstStringSym:
15147 : 0 : return pSym->ConstString.At.FirstUsed;
15148 : 0 : break;
15149 : :
15150 : 0 : case SymbolTable_ConstLitSym:
15151 : 0 : return pSym->ConstLit.At.FirstUsed;
15152 : 6 : break;
15153 : :
15154 : 6 : case SymbolTable_ConstVarSym:
15155 : 6 : return pSym->ConstVar.At.FirstUsed;
15156 : 6 : break;
15157 : :
15158 : 6 : case SymbolTable_VarSym:
15159 : 6 : return pSym->Var.At.FirstUsed;
15160 : 0 : break;
15161 : :
15162 : 0 : case SymbolTable_TypeSym:
15163 : 0 : return pSym->Type.At.FirstUsed;
15164 : 0 : break;
15165 : :
15166 : 0 : case SymbolTable_PointerSym:
15167 : 0 : return pSym->Pointer.At.FirstUsed;
15168 : 0 : break;
15169 : :
15170 : 0 : case SymbolTable_RecordFieldSym:
15171 : 0 : return pSym->RecordField.At.FirstUsed;
15172 : 0 : break;
15173 : :
15174 : 0 : case SymbolTable_VarientFieldSym:
15175 : 0 : return pSym->VarientField.At.FirstUsed;
15176 : 0 : break;
15177 : :
15178 : 0 : case SymbolTable_EnumerationFieldSym:
15179 : 0 : return pSym->EnumerationField.At.FirstUsed;
15180 : 0 : break;
15181 : :
15182 : 0 : case SymbolTable_SetSym:
15183 : 0 : return pSym->Set.At.FirstUsed;
15184 : 0 : break;
15185 : :
15186 : 0 : case SymbolTable_DefImpSym:
15187 : 0 : return pSym->DefImp.At.FirstUsed;
15188 : 0 : break;
15189 : :
15190 : 0 : case SymbolTable_ModuleSym:
15191 : 0 : return pSym->Module.At.FirstUsed;
15192 : 0 : break;
15193 : :
15194 : :
15195 : 0 : default:
15196 : 0 : M2Error_InternalError ((const char *) "not expecting this type of symbol", 33);
15197 : : break;
15198 : : }
15199 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
15200 : : __builtin_unreachable ();
15201 : : }
15202 : :
15203 : :
15204 : : /*
15205 : : PutProcedureBegin - assigns begin as the token number matching the
15206 : : procedure BEGIN.
15207 : : */
15208 : :
15209 : 67339 : extern "C" void SymbolTable_PutProcedureBegin (unsigned int Sym, unsigned int begin)
15210 : : {
15211 : 67339 : SymbolTable_PtrToSymbol pSym;
15212 : :
15213 : 67339 : pSym = GetPsym (Sym);
15214 : 67339 : switch (pSym->SymbolType)
15215 : : {
15216 : 67339 : case SymbolTable_ProcedureSym:
15217 : 67339 : pSym->Procedure.Begin = begin;
15218 : 67339 : break;
15219 : :
15220 : :
15221 : 0 : default:
15222 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
15223 : 67339 : break;
15224 : : }
15225 : 67339 : }
15226 : :
15227 : :
15228 : : /*
15229 : : PutProcedureEnd - assigns end as the token number matching the
15230 : : procedure END.
15231 : : */
15232 : :
15233 : 67309 : extern "C" void SymbolTable_PutProcedureEnd (unsigned int Sym, unsigned int end)
15234 : : {
15235 : 67309 : SymbolTable_PtrToSymbol pSym;
15236 : :
15237 : 67309 : pSym = GetPsym (Sym);
15238 : 67309 : switch (pSym->SymbolType)
15239 : : {
15240 : 67309 : case SymbolTable_ProcedureSym:
15241 : 67309 : pSym->Procedure.End = end;
15242 : 67309 : break;
15243 : :
15244 : :
15245 : 0 : default:
15246 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
15247 : 67309 : break;
15248 : : }
15249 : 67309 : }
15250 : :
15251 : :
15252 : : /*
15253 : : GetProcedureBeginEnd - assigns, begin, end, to the stored token values.
15254 : : */
15255 : :
15256 : 2366890 : extern "C" void SymbolTable_GetProcedureBeginEnd (unsigned int Sym, unsigned int *begin, unsigned int *end)
15257 : : {
15258 : 2366890 : SymbolTable_PtrToSymbol pSym;
15259 : :
15260 : 2366890 : pSym = GetPsym (Sym);
15261 : 2366890 : switch (pSym->SymbolType)
15262 : : {
15263 : 2366890 : case SymbolTable_ProcedureSym:
15264 : 2366890 : (*begin) = pSym->Procedure.Begin;
15265 : 2366890 : (*end) = pSym->Procedure.End;
15266 : 2366890 : break;
15267 : :
15268 : :
15269 : 0 : default:
15270 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
15271 : 2366890 : break;
15272 : : }
15273 : 2366890 : }
15274 : :
15275 : :
15276 : : /*
15277 : : ForeachProcedureDo - for each procedure in module, Sym, do procedure, P.
15278 : : */
15279 : :
15280 : 1697157 : extern "C" void SymbolTable_ForeachProcedureDo (unsigned int Sym, SymbolKey_PerformOperation P)
15281 : : {
15282 : 1697157 : SymbolTable_PtrToSymbol pSym;
15283 : :
15284 : 1697157 : pSym = GetPsym (Sym);
15285 : 1697157 : switch (pSym->SymbolType)
15286 : : {
15287 : 313628 : case SymbolTable_DefImpSym:
15288 : 313628 : Lists_ForeachItemInListDo (pSym->DefImp.ListOfProcs, P);
15289 : 313628 : break;
15290 : :
15291 : 104346 : case SymbolTable_ModuleSym:
15292 : 104346 : Lists_ForeachItemInListDo (pSym->Module.ListOfProcs, P);
15293 : 104346 : break;
15294 : :
15295 : 1279183 : case SymbolTable_ProcedureSym:
15296 : 1279183 : Lists_ForeachItemInListDo (pSym->Procedure.ListOfProcs, P);
15297 : 1279183 : break;
15298 : :
15299 : :
15300 : 0 : default:
15301 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
15302 : 1697145 : break;
15303 : : }
15304 : 1697145 : }
15305 : :
15306 : :
15307 : : /*
15308 : : ForeachModuleDo - for each module do procedure, P.
15309 : : */
15310 : :
15311 : 44297 : extern "C" void SymbolTable_ForeachModuleDo (SymbolKey_PerformOperation P)
15312 : : {
15313 : 44297 : SymbolKey_ForeachNodeDo (ModuleTree, P);
15314 : 44297 : }
15315 : :
15316 : :
15317 : : /*
15318 : : ForeachInnerModuleDo - for each inner module in module, Sym,
15319 : : do procedure, P.
15320 : : */
15321 : :
15322 : 2071595 : extern "C" void SymbolTable_ForeachInnerModuleDo (unsigned int Sym, SymbolKey_PerformOperation P)
15323 : : {
15324 : 2071595 : SymbolTable_PtrToSymbol pSym;
15325 : :
15326 : 2071595 : pSym = GetPsym (Sym);
15327 : 2071595 : switch (pSym->SymbolType)
15328 : : {
15329 : 316842 : case SymbolTable_DefImpSym:
15330 : 316842 : Lists_ForeachItemInListDo (pSym->DefImp.ListOfModules, P);
15331 : 316842 : break;
15332 : :
15333 : 157610 : case SymbolTable_ModuleSym:
15334 : 157610 : Lists_ForeachItemInListDo (pSym->Module.ListOfModules, P);
15335 : 157610 : break;
15336 : :
15337 : 1597143 : case SymbolTable_ProcedureSym:
15338 : 1597143 : Lists_ForeachItemInListDo (pSym->Procedure.ListOfModules, P);
15339 : 1597143 : break;
15340 : :
15341 : :
15342 : 0 : default:
15343 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
15344 : 2071595 : break;
15345 : : }
15346 : 2071595 : }
15347 : :
15348 : :
15349 : : /*
15350 : : IsVarParam - Returns a conditional depending whether parameter ParamNo
15351 : : is a VAR parameter.
15352 : : */
15353 : :
15354 : 6956831 : extern "C" bool SymbolTable_IsVarParam (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo)
15355 : : {
15356 : 6956831 : SymbolTable_PtrToSymbol pSym;
15357 : 6956831 : bool IsVar;
15358 : :
15359 : 6956831 : IsVar = false;
15360 : 6956831 : pSym = GetPsym (Sym);
15361 : 6956831 : switch (pSym->SymbolType)
15362 : : {
15363 : : case SymbolTable_ErrorSym:
15364 : : break;
15365 : :
15366 : 6956831 : case SymbolTable_ProcedureSym:
15367 : 6956831 : IsVar = IsNthParamVar (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam, ParamNo);
15368 : 6956831 : break;
15369 : :
15370 : 0 : case SymbolTable_ProcTypeSym:
15371 : 0 : IsVar = IsNthParamVar (pSym->ProcType.ListOfParam, ParamNo);
15372 : 0 : break;
15373 : :
15374 : :
15375 : 0 : default:
15376 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
15377 : 6956831 : break;
15378 : : }
15379 : 6956831 : return IsVar;
15380 : : /* static analysis guarentees a RETURN statement will be used before here. */
15381 : : __builtin_unreachable ();
15382 : : }
15383 : :
15384 : :
15385 : : /*
15386 : : IsVarParamAny - Returns a conditional depending whether parameter ParamNo
15387 : : is a VAR parameter.
15388 : : */
15389 : :
15390 : 7838701 : extern "C" bool SymbolTable_IsVarParamAny (unsigned int Sym, unsigned int ParamNo)
15391 : : {
15392 : 7838701 : SymbolTable_PtrToSymbol pSym;
15393 : 7838701 : SymbolTable_ProcedureKind kind;
15394 : :
15395 : 7838701 : pSym = GetPsym (Sym);
15396 : 7838701 : switch (pSym->SymbolType)
15397 : : {
15398 : : case SymbolTable_ErrorSym:
15399 : : break;
15400 : :
15401 : : case SymbolTable_ProcedureSym:
15402 : 17591833 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
15403 : : {
15404 : 16936198 : if (SymbolTable_GetProcedureDefined (Sym, kind))
15405 : : {
15406 : 6658559 : return IsNthParamVar (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam, ParamNo);
15407 : : }
15408 : : }
15409 : : break;
15410 : :
15411 : 524507 : case SymbolTable_ProcTypeSym:
15412 : 524507 : return IsNthParamVar (pSym->ProcType.ListOfParam, ParamNo);
15413 : 0 : break;
15414 : :
15415 : :
15416 : 0 : default:
15417 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
15418 : : break;
15419 : : }
15420 : : return false;
15421 : : /* static analysis guarentees a RETURN statement will be used before here. */
15422 : : __builtin_unreachable ();
15423 : : }
15424 : :
15425 : :
15426 : : /*
15427 : : IsUnboundedParam - Returns a conditional depending whether parameter
15428 : : ParamNo is an unbounded array procedure parameter.
15429 : : */
15430 : :
15431 : 14300380 : extern "C" bool SymbolTable_IsUnboundedParam (unsigned int Sym, SymbolTable_ProcedureKind kind, unsigned int ParamNo)
15432 : : {
15433 : 14300380 : unsigned int param;
15434 : :
15435 : 14300380 : param = SymbolTable_GetNthParam (Sym, kind, ParamNo);
15436 : 14300380 : return SymbolTable_IsParameterUnbounded (param);
15437 : : /* static analysis guarentees a RETURN statement will be used before here. */
15438 : : __builtin_unreachable ();
15439 : : }
15440 : :
15441 : 12646549 : extern "C" bool SymbolTable_IsUnboundedParamAny (unsigned int Sym, unsigned int ParamNo)
15442 : : {
15443 : 12646549 : SymbolTable_ProcedureKind kind;
15444 : :
15445 : 27012675 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
15446 : : {
15447 : : /*
15448 : : IsUnboundedParam - Returns a conditional depending whether parameter
15449 : : ParamNo is an unbounded array procedure parameter.
15450 : : */
15451 : 27012675 : if (SymbolTable_GetProcedureParametersDefined (Sym, kind))
15452 : : {
15453 : 12646549 : return SymbolTable_IsUnboundedParam (Sym, kind, ParamNo);
15454 : : }
15455 : : }
15456 : 0 : M2Error_InternalError ((const char *) "no procedure kind exists", 24);
15457 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
15458 : : __builtin_unreachable ();
15459 : : }
15460 : :
15461 : :
15462 : : /*
15463 : : IsParameterUnbounded - returns TRUE if parameter, Sym, is
15464 : : unbounded.
15465 : : */
15466 : :
15467 : 14300392 : extern "C" bool SymbolTable_IsParameterUnbounded (unsigned int Sym)
15468 : : {
15469 : 14300392 : SymbolTable_PtrToSymbol pSym;
15470 : :
15471 : 14300392 : pSym = GetPsym (Sym);
15472 : 14300392 : switch (pSym->SymbolType)
15473 : : {
15474 : 12990667 : case SymbolTable_ParamSym:
15475 : 12990667 : return pSym->Param.IsUnbounded;
15476 : 1309725 : break;
15477 : :
15478 : 1309725 : case SymbolTable_VarParamSym:
15479 : 1309725 : return pSym->VarParam.IsUnbounded;
15480 : 0 : break;
15481 : :
15482 : :
15483 : 0 : default:
15484 : 0 : M2Error_InternalError ((const char *) "expecting Param or VarParam symbol", 34);
15485 : : break;
15486 : : }
15487 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
15488 : : __builtin_unreachable ();
15489 : : }
15490 : :
15491 : :
15492 : : /*
15493 : : IsParameterVar - returns true if parameter symbol Sym
15494 : : was declared as a VAR.
15495 : : */
15496 : :
15497 : 312 : extern "C" bool SymbolTable_IsParameterVar (unsigned int Sym)
15498 : : {
15499 : 312 : SymbolTable_PtrToSymbol pSym;
15500 : :
15501 : 312 : pSym = GetPsym (Sym);
15502 : 312 : switch (pSym->SymbolType)
15503 : : {
15504 : : case SymbolTable_ParamSym:
15505 : : return false;
15506 : 78 : break;
15507 : :
15508 : 78 : case SymbolTable_VarParamSym:
15509 : 78 : return true;
15510 : 0 : break;
15511 : :
15512 : :
15513 : 0 : default:
15514 : 0 : M2Error_InternalError ((const char *) "expecting Param or VarParam symbol", 34);
15515 : : break;
15516 : : }
15517 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
15518 : : __builtin_unreachable ();
15519 : : }
15520 : :
15521 : :
15522 : : /*
15523 : : GetParameterShadowVar - returns the local variable associated with the
15524 : : parameter symbol, sym.
15525 : : */
15526 : :
15527 : 300 : extern "C" unsigned int SymbolTable_GetParameterShadowVar (unsigned int sym)
15528 : : {
15529 : 300 : SymbolTable_PtrToSymbol pSym;
15530 : :
15531 : 300 : pSym = GetPsym (sym);
15532 : 300 : switch (pSym->SymbolType)
15533 : : {
15534 : 204 : case SymbolTable_ParamSym:
15535 : 204 : return pSym->Param.ShadowVar;
15536 : 96 : break;
15537 : :
15538 : 96 : case SymbolTable_VarParamSym:
15539 : 96 : return pSym->VarParam.ShadowVar;
15540 : 0 : break;
15541 : :
15542 : :
15543 : 0 : default:
15544 : 0 : M2Error_InternalError ((const char *) "expecting a ParamSym or VarParamSym", 35);
15545 : : break;
15546 : : }
15547 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
15548 : : __builtin_unreachable ();
15549 : : }
15550 : :
15551 : :
15552 : : /*
15553 : : NoOfParam - Returns the number of parameters that procedure Sym contains.
15554 : : */
15555 : :
15556 : 15732414 : extern "C" unsigned int SymbolTable_NoOfParam (unsigned int Sym, SymbolTable_ProcedureKind kind)
15557 : : {
15558 : 15732414 : SymbolTable_PtrToSymbol pSym;
15559 : 15732414 : unsigned int n;
15560 : :
15561 : 15732414 : AssertInRange (Sym);
15562 : 15732414 : pSym = GetPsym (Sym);
15563 : 15732414 : switch (pSym->SymbolType)
15564 : : {
15565 : : case SymbolTable_ErrorSym:
15566 : : n = 0;
15567 : : break;
15568 : :
15569 : 15732414 : case SymbolTable_ProcedureSym:
15570 : 15732414 : n = Lists_NoOfItemsInList (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ListOfParam);
15571 : 15732414 : break;
15572 : :
15573 : 0 : case SymbolTable_ProcTypeSym:
15574 : 0 : n = Lists_NoOfItemsInList (pSym->ProcType.ListOfParam);
15575 : 0 : break;
15576 : :
15577 : :
15578 : 0 : default:
15579 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
15580 : 15732414 : break;
15581 : : }
15582 : 15732414 : return n;
15583 : : /* static analysis guarentees a RETURN statement will be used before here. */
15584 : : __builtin_unreachable ();
15585 : : }
15586 : :
15587 : :
15588 : : /*
15589 : : HasVarParameters - returns TRUE if procedure, p, has any VAR parameters.
15590 : : */
15591 : :
15592 : 0 : extern "C" bool SymbolTable_HasVarParameters (unsigned int p)
15593 : : {
15594 : 0 : unsigned int i;
15595 : 0 : unsigned int n;
15596 : :
15597 : 0 : n = SymbolTable_NoOfParamAny (p);
15598 : 0 : i = 1;
15599 : 0 : while (i <= n)
15600 : : {
15601 : 0 : if (SymbolTable_IsParameterVar (SymbolTable_GetNthParamAny (p, i)))
15602 : : {
15603 : : return true;
15604 : : }
15605 : 0 : i += 1;
15606 : : }
15607 : : return false;
15608 : : /* static analysis guarentees a RETURN statement will be used before here. */
15609 : : __builtin_unreachable ();
15610 : : }
15611 : :
15612 : :
15613 : : /*
15614 : : NoOfLocalVar - returns the number of local variables that exist in
15615 : : procedure Sym. Parameters are NOT included in the
15616 : : count.
15617 : : */
15618 : :
15619 : 30 : extern "C" unsigned int SymbolTable_NoOfLocalVar (unsigned int Sym)
15620 : : {
15621 : 30 : SymbolTable_PtrToSymbol pSym;
15622 : 30 : unsigned int n;
15623 : :
15624 : 30 : pSym = GetPsym (Sym);
15625 : 30 : switch (pSym->SymbolType)
15626 : : {
15627 : : case SymbolTable_ErrorSym:
15628 : : n = 0;
15629 : : break;
15630 : :
15631 : 30 : case SymbolTable_ProcedureSym:
15632 : 30 : n = Lists_NoOfItemsInList (pSym->Procedure.ListOfVars);
15633 : 30 : break;
15634 : :
15635 : :
15636 : 0 : default:
15637 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
15638 : 30 : break;
15639 : : }
15640 : : /*
15641 : : Parameters are actually included in the list of local varaibles,
15642 : : therefore we must subtract the Parameter Number from local variable
15643 : : total.
15644 : : */
15645 : 30 : return n-(SymbolTable_NoOfParamAny (Sym));
15646 : : /* static analysis guarentees a RETURN statement will be used before here. */
15647 : : __builtin_unreachable ();
15648 : : }
15649 : :
15650 : :
15651 : : /*
15652 : : IsDefImp - returns true is the Sym is a DefImp symbol.
15653 : : Definition/Implementation module symbol.
15654 : : */
15655 : :
15656 : 212841867 : extern "C" bool SymbolTable_IsDefImp (unsigned int Sym)
15657 : : {
15658 : 212841867 : SymbolTable_PtrToSymbol pSym;
15659 : :
15660 : 212841867 : pSym = GetPsym (Sym);
15661 : 212841867 : return pSym->SymbolType == SymbolTable_DefImpSym;
15662 : : /* static analysis guarentees a RETURN statement will be used before here. */
15663 : : __builtin_unreachable ();
15664 : : }
15665 : :
15666 : :
15667 : : /*
15668 : : IsModule - returns true is the Sym is a Module symbol.
15669 : : Program module symbol.
15670 : : */
15671 : :
15672 : 176539023 : extern "C" bool SymbolTable_IsModule (unsigned int Sym)
15673 : : {
15674 : 176539023 : SymbolTable_PtrToSymbol pSym;
15675 : :
15676 : 176539023 : pSym = GetPsym (Sym);
15677 : 176539023 : return pSym->SymbolType == SymbolTable_ModuleSym;
15678 : : /* static analysis guarentees a RETURN statement will be used before here. */
15679 : : __builtin_unreachable ();
15680 : : }
15681 : :
15682 : :
15683 : : /*
15684 : : IsInnerModule - returns true if the symbol, Sym, is an inner module.
15685 : : */
15686 : :
15687 : 6426806 : extern "C" bool SymbolTable_IsInnerModule (unsigned int Sym)
15688 : : {
15689 : 6426806 : if (SymbolTable_IsModule (Sym))
15690 : : {
15691 : 203756 : return (SymbolTable_GetScope (Sym)) != SymbolTable_NulSym;
15692 : : }
15693 : : else
15694 : : {
15695 : : return false;
15696 : : }
15697 : : /* static analysis guarentees a RETURN statement will be used before here. */
15698 : : __builtin_unreachable ();
15699 : : }
15700 : :
15701 : :
15702 : : /*
15703 : : GetSymName - returns the symbol name.
15704 : : */
15705 : :
15706 : 780081615 : extern "C" NameKey_Name SymbolTable_GetSymName (unsigned int Sym)
15707 : : {
15708 : 780081615 : SymbolTable_PtrToSymbol pSym;
15709 : 780081615 : NameKey_Name n;
15710 : :
15711 : 780081615 : if (Sym == SymbolTable_NulSym)
15712 : : {
15713 : : n = SymbolKey_NulKey;
15714 : : }
15715 : : else
15716 : : {
15717 : 780081615 : pSym = GetPsym (Sym);
15718 : 780081615 : switch (pSym->SymbolType)
15719 : : {
15720 : 324 : case SymbolTable_ErrorSym:
15721 : 324 : n = pSym->Error.name;
15722 : 324 : break;
15723 : :
15724 : 8728133 : case SymbolTable_ObjectSym:
15725 : 8728133 : n = pSym->Object.name;
15726 : 8728133 : break;
15727 : :
15728 : 5033793 : case SymbolTable_DefImpSym:
15729 : 5033793 : n = pSym->DefImp.name;
15730 : 5033793 : break;
15731 : :
15732 : 441375 : case SymbolTable_ModuleSym:
15733 : 441375 : n = pSym->Module.name;
15734 : 441375 : break;
15735 : :
15736 : 607978739 : case SymbolTable_TypeSym:
15737 : 607978739 : n = pSym->Type.name;
15738 : 607978739 : break;
15739 : :
15740 : 5895557 : case SymbolTable_VarSym:
15741 : 5895557 : n = pSym->Var.name;
15742 : 5895557 : break;
15743 : :
15744 : 13731 : case SymbolTable_ConstLitSym:
15745 : 13731 : n = pSym->ConstLit.name;
15746 : 13731 : break;
15747 : :
15748 : 13111 : case SymbolTable_ConstVarSym:
15749 : 13111 : n = pSym->ConstVar.name;
15750 : 13111 : break;
15751 : :
15752 : 8070 : case SymbolTable_ConstStringSym:
15753 : 8070 : n = pSym->ConstString.name;
15754 : 8070 : break;
15755 : :
15756 : 171200 : case SymbolTable_EnumerationSym:
15757 : 171200 : n = pSym->Enumeration.name;
15758 : 171200 : break;
15759 : :
15760 : 1309292 : case SymbolTable_EnumerationFieldSym:
15761 : 1309292 : n = pSym->EnumerationField.name;
15762 : 1309292 : break;
15763 : :
15764 : 9422612 : case SymbolTable_UndefinedSym:
15765 : 9422612 : n = pSym->Undefined.name;
15766 : 9422612 : break;
15767 : :
15768 : 33958381 : case SymbolTable_ProcedureSym:
15769 : 33958381 : n = pSym->Procedure.name;
15770 : 33958381 : break;
15771 : :
15772 : 209148 : case SymbolTable_ProcTypeSym:
15773 : 209148 : n = pSym->ProcType.name;
15774 : 209148 : break;
15775 : :
15776 : 821226 : case SymbolTable_RecordFieldSym:
15777 : 821226 : n = pSym->RecordField.name;
15778 : 821226 : break;
15779 : :
15780 : 232744 : case SymbolTable_RecordSym:
15781 : 232744 : n = pSym->Record.name;
15782 : 232744 : break;
15783 : :
15784 : : case SymbolTable_VarientSym:
15785 : : n = NameKey_NulName;
15786 : : break;
15787 : :
15788 : 810 : case SymbolTable_VarientFieldSym:
15789 : 810 : n = pSym->VarientField.name;
15790 : 810 : break;
15791 : :
15792 : 7203 : case SymbolTable_VarParamSym:
15793 : 7203 : n = pSym->VarParam.name;
15794 : 7203 : break;
15795 : :
15796 : 67291 : case SymbolTable_ParamSym:
15797 : 67291 : n = pSym->Param.name;
15798 : 67291 : break;
15799 : :
15800 : 41305043 : case SymbolTable_PointerSym:
15801 : 41305043 : n = pSym->Pointer.name;
15802 : 41305043 : break;
15803 : :
15804 : 79748 : case SymbolTable_ArraySym:
15805 : 79748 : n = pSym->Array.name;
15806 : 79748 : break;
15807 : :
15808 : : case SymbolTable_UnboundedSym:
15809 : : n = NameKey_NulName;
15810 : : break;
15811 : :
15812 : 252321 : case SymbolTable_SubrangeSym:
15813 : 252321 : n = pSym->Subrange.name;
15814 : 252321 : break;
15815 : :
15816 : 59561800 : case SymbolTable_SetSym:
15817 : 59561800 : n = pSym->Set.name;
15818 : 59561800 : break;
15819 : :
15820 : : case SymbolTable_SubscriptSym:
15821 : : n = NameKey_NulName;
15822 : : break;
15823 : :
15824 : : case SymbolTable_DummySym:
15825 : : n = NameKey_NulName;
15826 : : break;
15827 : :
15828 : 0 : case SymbolTable_PartialUnboundedSym:
15829 : 0 : n = SymbolTable_GetSymName (pSym->PartialUnbounded.Type);
15830 : 0 : break;
15831 : :
15832 : : case SymbolTable_TupleSym:
15833 : : n = NameKey_NulName;
15834 : : break;
15835 : :
15836 : : case SymbolTable_GnuAsmSym:
15837 : : n = NameKey_NulName;
15838 : : break;
15839 : :
15840 : : case SymbolTable_InterfaceSym:
15841 : : n = NameKey_NulName;
15842 : : break;
15843 : :
15844 : : case SymbolTable_ImportSym:
15845 : : n = NameKey_NulName;
15846 : : break;
15847 : :
15848 : : case SymbolTable_ImportStatementSym:
15849 : : n = NameKey_NulName;
15850 : : break;
15851 : :
15852 : :
15853 : 0 : default:
15854 : 0 : M2Error_InternalError ((const char *) "unexpected symbol type", 22);
15855 : 780081615 : break;
15856 : : }
15857 : : }
15858 : 780081615 : return n;
15859 : : /* static analysis guarentees a RETURN statement will be used before here. */
15860 : : __builtin_unreachable ();
15861 : : }
15862 : :
15863 : :
15864 : : /*
15865 : : RenameSym - renames a symbol, Sym, with SymName.
15866 : : It also checks the unknown tree for a symbol
15867 : : with this new name. Must only be renamed in
15868 : : the same scope of being declared.
15869 : : */
15870 : :
15871 : 0 : extern "C" void SymbolTable_RenameSym (unsigned int Sym, NameKey_Name SymName)
15872 : : {
15873 : 0 : SymbolTable_PtrToSymbol pSym;
15874 : :
15875 : 0 : if ((SymbolTable_GetSymName (Sym)) == NameKey_NulName)
15876 : : {
15877 : 0 : pSym = GetPsym (Sym);
15878 : 0 : switch (pSym->SymbolType)
15879 : : {
15880 : 0 : case SymbolTable_ErrorSym:
15881 : 0 : M2Error_ErrorAbort0 ((const char *) "", 0);
15882 : 0 : break;
15883 : :
15884 : 0 : case SymbolTable_TypeSym:
15885 : 0 : pSym->Type.name = SymName;
15886 : 0 : break;
15887 : :
15888 : 0 : case SymbolTable_VarSym:
15889 : 0 : pSym->Var.name = SymName;
15890 : 0 : break;
15891 : :
15892 : 0 : case SymbolTable_ConstLitSym:
15893 : 0 : pSym->ConstLit.name = SymName;
15894 : 0 : break;
15895 : :
15896 : 0 : case SymbolTable_ConstVarSym:
15897 : 0 : pSym->ConstVar.name = SymName;
15898 : 0 : break;
15899 : :
15900 : 0 : case SymbolTable_UndefinedSym:
15901 : 0 : pSym->Undefined.name = SymName;
15902 : 0 : break;
15903 : :
15904 : 0 : case SymbolTable_RecordSym:
15905 : 0 : pSym->Record.name = SymName;
15906 : 0 : break;
15907 : :
15908 : 0 : case SymbolTable_PointerSym:
15909 : 0 : pSym->Pointer.name = SymName;
15910 : 0 : break;
15911 : :
15912 : :
15913 : 0 : default:
15914 : 0 : M2Error_InternalError ((const char *) "not implemented yet", 19);
15915 : 0 : break;
15916 : : }
15917 : 0 : AddSymToScope (Sym, SymName);
15918 : : }
15919 : : else
15920 : : {
15921 : 0 : M2Error_InternalError ((const char *) "old name of symbol must be nul", 30);
15922 : : }
15923 : 0 : }
15924 : :
15925 : :
15926 : : /*
15927 : : IsUnknown - returns true is the symbol Sym is unknown.
15928 : : */
15929 : :
15930 : 31039921 : extern "C" bool SymbolTable_IsUnknown (unsigned int Sym)
15931 : : {
15932 : 31039921 : SymbolTable_PtrToSymbol pSym;
15933 : :
15934 : 31039921 : AssertInRange (Sym);
15935 : 31039921 : pSym = GetPsym (Sym);
15936 : 31039921 : return pSym->SymbolType == SymbolTable_UndefinedSym;
15937 : : /* static analysis guarentees a RETURN statement will be used before here. */
15938 : : __builtin_unreachable ();
15939 : : }
15940 : :
15941 : :
15942 : : /*
15943 : : IsPartialUnbounded - returns TRUE if, sym, is a partially unbounded symbol.
15944 : : */
15945 : :
15946 : 769869 : extern "C" bool SymbolTable_IsPartialUnbounded (unsigned int sym)
15947 : : {
15948 : 769869 : SymbolTable_PtrToSymbol pSym;
15949 : :
15950 : 769869 : if (sym > 0)
15951 : : {
15952 : 769869 : pSym = GetPsym (sym);
15953 : 769869 : switch (pSym->SymbolType)
15954 : : {
15955 : : case SymbolTable_PartialUnboundedSym:
15956 : : return true;
15957 : : break;
15958 : :
15959 : :
15960 : : default:
15961 : : return false;
15962 : : break;
15963 : : }
15964 : : }
15965 : : else
15966 : : {
15967 : : return false;
15968 : : }
15969 : : /* static analysis guarentees a RETURN statement will be used before here. */
15970 : : __builtin_unreachable ();
15971 : : }
15972 : :
15973 : :
15974 : : /*
15975 : : RequestSym - searches for a symbol with a name SymName in the
15976 : : current and previous scopes.
15977 : : If the symbol is found then it is returned
15978 : : else an unknown symbol is returned create at token
15979 : : position, tok.
15980 : : This procedure does search the base scope (for
15981 : : pervasive identifiers).
15982 : : */
15983 : :
15984 : 26358128 : extern "C" unsigned int SymbolTable_RequestSym (unsigned int tok, NameKey_Name SymName)
15985 : : {
15986 : 26358128 : unsigned int Sym;
15987 : :
15988 : : /*
15989 : : WriteString('RequestSym for: ') ; WriteKey(SymName) ; WriteLn ;
15990 : : */
15991 : 26358128 : Sym = SymbolTable_GetSym (SymName);
15992 : 26358128 : if (Sym == SymbolTable_NulSym)
15993 : : {
15994 : 4036753 : Sym = GetSymFromUnknownTree (SymName);
15995 : 4036753 : if (Sym == SymbolTable_NulSym)
15996 : : {
15997 : : /* Make unknown */
15998 : 4036753 : NewSym (&Sym);
15999 : 4036753 : FillInUnknownFields (tok, Sym, SymName);
16000 : : /*
16001 : : ; WriteKey(SymName) ; WriteString(' unknown demanded') ; WriteLn
16002 : : */
16003 : 4036753 : AddSymToUnknownTree (static_cast<int> (ScopePtr), SymName, Sym);
16004 : : }
16005 : : }
16006 : 26358128 : return Sym;
16007 : : /* static analysis guarentees a RETURN statement will be used before here. */
16008 : : __builtin_unreachable ();
16009 : : }
16010 : :
16011 : :
16012 : : /*
16013 : : PutImported - places a symbol, Sym, into the current main scope.
16014 : : */
16015 : :
16016 : 703963 : extern "C" void SymbolTable_PutImported (unsigned int Sym)
16017 : : {
16018 : 703963 : SymbolTable_PtrToSymbol pSym;
16019 : 703963 : unsigned int ModSym;
16020 : 703963 : NameKey_Name n;
16021 : :
16022 : : /*
16023 : : We have currently imported Sym, now place it into the current module.
16024 : : */
16025 : 703963 : ModSym = SymbolTable_GetCurrentModuleScope ();
16026 : 1407926 : M2Debug_Assert ((SymbolTable_IsDefImp (ModSym)) || (SymbolTable_IsModule (ModSym)));
16027 : 703963 : pSym = GetPsym (ModSym);
16028 : 703963 : switch (pSym->SymbolType)
16029 : : {
16030 : 94737 : case SymbolTable_ModuleSym:
16031 : 94737 : if ((SymbolKey_GetSymKey (pSym->Module.ImportTree, SymbolTable_GetSymName (Sym))) == Sym)
16032 : : {
16033 : : /* avoid dangling else. */
16034 : 90 : if (M2Options_Pedantic)
16035 : : {
16036 : 6 : n = SymbolTable_GetSymName (Sym);
16037 : 6 : M2Error_WriteFormat1 ((const char *) "symbol (%a) has already been imported", 37, (const unsigned char *) &n, (sizeof (n)-1));
16038 : : }
16039 : : }
16040 : 94647 : else if ((SymbolKey_GetSymKey (pSym->Module.ImportTree, SymbolTable_GetSymName (Sym))) == SymbolKey_NulKey)
16041 : : {
16042 : : /* avoid dangling else. */
16043 : 94647 : if ((SymbolKey_GetSymKey (pSym->Module.WhereImported, Sym)) == SymbolKey_NulKey)
16044 : : {
16045 : 94647 : SymbolKey_PutSymKey (pSym->Module.WhereImported, Sym, M2LexBuf_GetTokenNo ());
16046 : : }
16047 : 94647 : SymbolKey_PutSymKey (pSym->Module.ImportTree, SymbolTable_GetSymName (Sym), Sym);
16048 : 94647 : SymbolTable_AddSymToModuleScope (ModSym, Sym);
16049 : : }
16050 : : else
16051 : : {
16052 : : /* avoid dangling else. */
16053 : 0 : n = SymbolTable_GetSymName (Sym);
16054 : 0 : M2Error_WriteFormat1 ((const char *) "name clash when trying to import (%a)", 37, (const unsigned char *) &n, (sizeof (n)-1));
16055 : : }
16056 : : break;
16057 : :
16058 : 609226 : case SymbolTable_DefImpSym:
16059 : 609226 : if ((SymbolKey_GetSymKey (pSym->DefImp.ImportTree, SymbolTable_GetSymName (Sym))) == Sym)
16060 : : {
16061 : : /* avoid dangling else. */
16062 : 78 : if (M2Options_Pedantic)
16063 : : {
16064 : 0 : n = SymbolTable_GetSymName (Sym);
16065 : 0 : M2Error_WriteFormat1 ((const char *) "symbol (%a) has already been imported", 37, (const unsigned char *) &n, (sizeof (n)-1));
16066 : : }
16067 : : }
16068 : 609148 : else if ((SymbolKey_GetSymKey (pSym->DefImp.ImportTree, SymbolTable_GetSymName (Sym))) == SymbolKey_NulKey)
16069 : : {
16070 : : /* avoid dangling else. */
16071 : 609148 : if ((SymbolKey_GetSymKey (pSym->DefImp.WhereImported, Sym)) == SymbolKey_NulKey)
16072 : : {
16073 : 609148 : SymbolKey_PutSymKey (pSym->DefImp.WhereImported, Sym, M2LexBuf_GetTokenNo ());
16074 : : }
16075 : 609148 : SymbolKey_PutSymKey (pSym->DefImp.ImportTree, SymbolTable_GetSymName (Sym), Sym);
16076 : 609148 : SymbolTable_AddSymToModuleScope (ModSym, Sym);
16077 : : }
16078 : : else
16079 : : {
16080 : : /* avoid dangling else. */
16081 : 0 : n = SymbolTable_GetSymName (Sym);
16082 : 0 : M2Error_WriteFormat1 ((const char *) "name clash when trying to import (%a)", 37, (const unsigned char *) &n, (sizeof (n)-1));
16083 : : }
16084 : : break;
16085 : :
16086 : :
16087 : 0 : default:
16088 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
16089 : 703963 : break;
16090 : : }
16091 : 703963 : }
16092 : :
16093 : :
16094 : : /*
16095 : : PutIncluded - places a symbol, Sym, into the included list of the
16096 : : current module.
16097 : : Symbols that are placed in this list are indirectly declared
16098 : : by:
16099 : :
16100 : : IMPORT modulename ;
16101 : :
16102 : : modulename.identifier
16103 : : */
16104 : :
16105 : 358194 : extern "C" void SymbolTable_PutIncluded (unsigned int Sym)
16106 : : {
16107 : 358194 : SymbolTable_PtrToSymbol pSym;
16108 : 358194 : unsigned int ModSym;
16109 : 358194 : NameKey_Name n1;
16110 : 358194 : NameKey_Name n2;
16111 : :
16112 : : /*
16113 : : We have referenced Sym, via modulename.Sym
16114 : : now place it into the current module include list.
16115 : : */
16116 : 358194 : ModSym = SymbolTable_GetCurrentModuleScope ();
16117 : 716388 : M2Debug_Assert ((SymbolTable_IsDefImp (ModSym)) || (SymbolTable_IsModule (ModSym)));
16118 : 358194 : if (DebugUnknowns)
16119 : : {
16120 : : n1 = SymbolTable_GetSymName (Sym);
16121 : : n2 = SymbolTable_GetSymName (ModSym);
16122 : : M2Printf_printf2 ((const char *) "including %a into scope %a\\n", 28, (const unsigned char *) &n1, (sizeof (n1)-1), (const unsigned char *) &n2, (sizeof (n2)-1));
16123 : : }
16124 : 358194 : pSym = GetPsym (ModSym);
16125 : 358194 : switch (pSym->SymbolType)
16126 : : {
16127 : 552 : case SymbolTable_ModuleSym:
16128 : 552 : Lists_IncludeItemIntoList (pSym->Module.IncludeList, Sym);
16129 : 552 : break;
16130 : :
16131 : 357642 : case SymbolTable_DefImpSym:
16132 : 357642 : Lists_IncludeItemIntoList (pSym->DefImp.IncludeList, Sym);
16133 : 357642 : break;
16134 : :
16135 : :
16136 : 0 : default:
16137 : 0 : M2Error_InternalError ((const char *) "expecting a Module or DefImp symbol", 35);
16138 : 358194 : break;
16139 : : }
16140 : 358194 : }
16141 : :
16142 : :
16143 : : /*
16144 : : PutExported - places a symbol, Sym into the next level out module.
16145 : : Sym is also placed in the ExportTree of the current inner
16146 : : module.
16147 : : */
16148 : :
16149 : 276 : extern "C" void SymbolTable_PutExported (unsigned int Sym)
16150 : : {
16151 : 276 : SymbolTable_PtrToSymbol pSym;
16152 : :
16153 : : /*
16154 : : WriteString('PutExported') ; WriteLn ;
16155 : : */
16156 : 276 : SymbolTable_AddSymToModuleScope (GetLastModuleOrProcedureScope (), Sym);
16157 : 276 : pSym = GetPsym (SymbolTable_GetCurrentModuleScope ());
16158 : 276 : switch (pSym->SymbolType)
16159 : : {
16160 : 276 : case SymbolTable_ModuleSym:
16161 : 276 : SymbolKey_PutSymKey (pSym->Module.ExportTree, SymbolTable_GetSymName (Sym), Sym);
16162 : 276 : if (SymbolTable_IsUnknown (Sym))
16163 : : {
16164 : 276 : PutExportUndeclared (SymbolTable_GetCurrentModuleScope (), Sym);
16165 : : }
16166 : : /*
16167 : : ; WriteKey(Module.name) ; WriteString(' exports ') ;
16168 : : ; WriteKey(GetSymName(Sym)) ; WriteLn ;
16169 : : */
16170 : 276 : break;
16171 : :
16172 : :
16173 : 0 : default:
16174 : 0 : M2Error_InternalError ((const char *) "expecting a Module symbol", 25);
16175 : 276 : break;
16176 : : }
16177 : 276 : }
16178 : :
16179 : :
16180 : : /*
16181 : : PutExportQualified - places a symbol with the name, SymName,
16182 : : into the export tree of the
16183 : : Definition module being compiled.
16184 : : The symbol with name has been EXPORT QUALIFIED
16185 : : by the definition module and therefore any reference
16186 : : to this symbol in the code generation phase
16187 : : will be in the form _Module_Name.
16188 : : */
16189 : :
16190 : 2602342 : extern "C" void SymbolTable_PutExportQualified (unsigned int tokenno, NameKey_Name SymName)
16191 : : {
16192 : 2602342 : SymbolTable_PtrToSymbol pSym;
16193 : 2602342 : NameKey_Name n;
16194 : 2602342 : unsigned int Sym;
16195 : 2602342 : unsigned int ModSym;
16196 : :
16197 : 2602342 : ModSym = SymbolTable_GetCurrentModule ();
16198 : 2602342 : M2Debug_Assert (SymbolTable_IsDefImp (ModSym));
16199 : 5204684 : M2Debug_Assert ((M2Comp_CompilingDefinitionModule ()) || ((SymbolTable_GetSymName (ModSym)) == (NameKey_MakeKey ((const char *) "SYSTEM", 6))));
16200 : : /*
16201 : : WriteString('1st MODULE ') ; WriteKey(GetSymName(ModSym)) ;
16202 : : WriteString(' identifier ') ; WriteKey(SymName) ; WriteLn ;
16203 : : */
16204 : 2602342 : pSym = GetPsym (ModSym);
16205 : 2602342 : switch (pSym->SymbolType)
16206 : : {
16207 : 2602342 : case SymbolTable_DefImpSym:
16208 : 2602342 : if (((SymbolKey_GetSymKey (pSym->DefImp.ExportQualifiedTree, SymName)) != SymbolKey_NulKey) && ((SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName)) == SymbolKey_NulKey))
16209 : : {
16210 : 6 : n = SymbolTable_GetSymName (ModSym);
16211 : 6 : M2Error_WriteFormat2 ((const char *) "identifier (%a) has already been exported from MODULE %a", 56, (const unsigned char *) &SymName, (sizeof (SymName)-1), (const unsigned char *) &n, (sizeof (n)-1));
16212 : : }
16213 : 2602336 : else if ((SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName)) != SymbolKey_NulKey)
16214 : : {
16215 : : /* avoid dangling else. */
16216 : 248659 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName));
16217 : 248659 : SymbolKey_DelSymKey (pSym->DefImp.ExportRequest, SymName);
16218 : 248659 : SymbolKey_PutSymKey (pSym->DefImp.ExportQualifiedTree, SymName, Sym);
16219 : 248659 : PutExportUndeclared (ModSym, Sym);
16220 : : }
16221 : : else
16222 : : {
16223 : : /* avoid dangling else. */
16224 : 2353677 : Sym = SymbolTable_GetDeclareSym (tokenno, SymName);
16225 : 2353677 : SymbolKey_PutSymKey (pSym->DefImp.ExportQualifiedTree, SymName, Sym);
16226 : 2353677 : PutExportUndeclared (ModSym, Sym);
16227 : : }
16228 : 2602342 : break;
16229 : :
16230 : :
16231 : 0 : default:
16232 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16233 : 2602342 : break;
16234 : : }
16235 : 2602342 : }
16236 : :
16237 : :
16238 : : /*
16239 : : PutExportUnQualified - places a symbol with the name, SymName,
16240 : : into the export tree of the
16241 : : Definition module being compiled.
16242 : : The symbol with Name has been EXPORT UNQUALIFIED
16243 : : by the definition module and therefore any reference
16244 : : to this symbol in the code generation phase
16245 : : will be in the form _Name.
16246 : : */
16247 : :
16248 : 391320 : extern "C" void SymbolTable_PutExportUnQualified (unsigned int tokenno, NameKey_Name SymName)
16249 : : {
16250 : 391320 : SymbolTable_PtrToSymbol pSym;
16251 : 391320 : NameKey_Name n;
16252 : 391320 : unsigned int Sym;
16253 : 391320 : unsigned int ModSym;
16254 : :
16255 : 391320 : ModSym = SymbolTable_GetCurrentModule ();
16256 : 391320 : M2Debug_Assert (SymbolTable_IsDefImp (ModSym));
16257 : 782640 : M2Debug_Assert ((M2Comp_CompilingDefinitionModule ()) || ((SymbolTable_GetSymName (ModSym)) == (NameKey_MakeKey ((const char *) "SYSTEM", 6))));
16258 : 391320 : pSym = GetPsym (ModSym);
16259 : 391320 : switch (pSym->SymbolType)
16260 : : {
16261 : 391320 : case SymbolTable_DefImpSym:
16262 : 391320 : if (((SymbolKey_GetSymKey (pSym->DefImp.ExportUnQualifiedTree, SymName)) != SymbolKey_NulKey) && ((SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName)) == SymbolKey_NulKey))
16263 : : {
16264 : 0 : n = SymbolTable_GetSymName (ModSym);
16265 : 0 : M2Error_WriteFormat2 ((const char *) "identifier (%a) has already been exported from MODULE %a", 56, (const unsigned char *) &SymName, (sizeof (SymName)-1), (const unsigned char *) &n, (sizeof (n)-1));
16266 : : }
16267 : 391320 : else if ((SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName)) != SymbolKey_NulKey)
16268 : : {
16269 : : /* avoid dangling else. */
16270 : 25596 : Sym = static_cast<unsigned int> (SymbolKey_GetSymKey (pSym->DefImp.ExportRequest, SymName));
16271 : 25596 : SymbolKey_DelSymKey (pSym->DefImp.ExportRequest, SymName);
16272 : 25596 : SymbolKey_PutSymKey (pSym->DefImp.ExportUnQualifiedTree, SymName, Sym);
16273 : 25596 : PutExportUndeclared (ModSym, Sym);
16274 : : }
16275 : : else
16276 : : {
16277 : : /* avoid dangling else. */
16278 : 365724 : Sym = SymbolTable_GetDeclareSym (tokenno, SymName);
16279 : 365724 : SymbolKey_PutSymKey (pSym->DefImp.ExportUnQualifiedTree, SymName, Sym);
16280 : 365724 : PutExportUndeclared (ModSym, Sym);
16281 : : }
16282 : 391320 : break;
16283 : :
16284 : :
16285 : 0 : default:
16286 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16287 : 391320 : break;
16288 : : }
16289 : 391320 : }
16290 : :
16291 : :
16292 : : /*
16293 : : PutExportUnImplemented - places a symbol, Sym, into the currently compiled
16294 : : DefImp module NeedToBeImplemented list.
16295 : : */
16296 : :
16297 : 1949622 : extern "C" void SymbolTable_PutExportUnImplemented (unsigned int tokenno, unsigned int Sym)
16298 : : {
16299 : 1949622 : SymbolTable_PtrToSymbol pSym;
16300 : :
16301 : 1949622 : pSym = GetPsym (CurrentModule);
16302 : 1949622 : switch (pSym->SymbolType)
16303 : : {
16304 : 1949622 : case SymbolTable_DefImpSym:
16305 : 1949622 : if ((SymbolKey_GetSymKey (pSym->DefImp.NeedToBeImplemented, SymbolTable_GetSymName (Sym))) == Sym)
16306 : : {
16307 : : /*
16308 : : n1 := GetSymName (Sym) ;
16309 : : n2 := GetSymName (CurrentModule) ;
16310 : : WriteFormat2 ('symbol (%a) already exported from module (%a)', n1, n2)
16311 : : */
16312 : 0 : M2MetaError_MetaErrorT2 (tokenno, (const char *) "symbol {%1a} is already exported from module {%2a}", 50, Sym, CurrentModule);
16313 : : }
16314 : : else
16315 : : {
16316 : 1949622 : SymbolKey_PutSymKey (pSym->DefImp.NeedToBeImplemented, SymbolTable_GetSymName (Sym), Sym);
16317 : : }
16318 : 1949622 : break;
16319 : :
16320 : :
16321 : 0 : default:
16322 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16323 : 1949622 : break;
16324 : : }
16325 : 1949622 : }
16326 : :
16327 : :
16328 : : /*
16329 : : GetExported - returns the symbol which has a name SymName,
16330 : : and is exported from the definition module ModSym.
16331 : :
16332 : : */
16333 : :
16334 : 1972239 : extern "C" unsigned int SymbolTable_GetExported (unsigned int tokenno, unsigned int ModSym, NameKey_Name SymName)
16335 : : {
16336 : 1972239 : SymbolTable_PtrToSymbol pSym;
16337 : 1972239 : unsigned int Sym;
16338 : :
16339 : 1972239 : pSym = GetPsym (ModSym);
16340 : 1972239 : switch (pSym->SymbolType)
16341 : : {
16342 : 1972131 : case SymbolTable_DefImpSym:
16343 : 1972131 : Sym = RequestFromDefinition (tokenno, ModSym, SymName);
16344 : 1972131 : break;
16345 : :
16346 : 108 : case SymbolTable_ModuleSym:
16347 : 108 : Sym = RequestFromModule (tokenno, ModSym, SymName);
16348 : 108 : break;
16349 : :
16350 : :
16351 : 0 : default:
16352 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16353 : 1972239 : break;
16354 : : }
16355 : 1972239 : return Sym;
16356 : : /* static analysis guarentees a RETURN statement will be used before here. */
16357 : : __builtin_unreachable ();
16358 : : }
16359 : :
16360 : :
16361 : : /*
16362 : : GetFromOuterModule - returns a symbol with name, SymName, which comes
16363 : : from outside the current module.
16364 : : */
16365 : :
16366 : 324 : extern "C" unsigned int SymbolTable_GetFromOuterModule (unsigned int tokenno, NameKey_Name SymName)
16367 : : {
16368 : 324 : SymbolTable_PtrToCallFrame pCall;
16369 : 324 : unsigned int ScopeId;
16370 : 324 : unsigned int Sym;
16371 : 324 : unsigned int ScopeSym;
16372 : :
16373 : 324 : ScopeId = ScopePtr;
16374 : 324 : pCall = GetPcall (ScopeId);
16375 : 672 : while ((! (SymbolTable_IsModule (pCall->Search))) && (! (SymbolTable_IsDefImp (pCall->Search))))
16376 : : {
16377 : 24 : M2Debug_Assert (ScopeId > 0);
16378 : 24 : ScopeId -= 1;
16379 : 24 : pCall = GetPcall (ScopeId);
16380 : : }
16381 : 324 : ScopeId -= 1;
16382 : : /* we are now below the current module */
16383 : 480 : while (ScopeId > 0)
16384 : : {
16385 : 480 : pCall = GetPcall (ScopeId);
16386 : 480 : ScopeSym = pCall->Search;
16387 : 480 : if (ScopeSym != SymbolTable_NulSym)
16388 : : {
16389 : 480 : Sym = SymbolTable_GetLocalSym (ScopeSym, SymName);
16390 : 480 : if (Sym == SymbolTable_NulSym)
16391 : : {
16392 : : /* avoid dangling else. */
16393 : 168 : if (((SymbolTable_IsModule (ScopeSym)) || (SymbolTable_IsProcedure (ScopeSym))) || (SymbolTable_IsDefImp (ScopeSym)))
16394 : : {
16395 : 132 : if (Sym == SymbolTable_NulSym)
16396 : : {
16397 : 132 : Sym = ExamineUnresolvedTree (ScopeSym, SymName);
16398 : 132 : if (Sym != SymbolTable_NulSym)
16399 : : {
16400 : : return Sym;
16401 : : }
16402 : : }
16403 : : }
16404 : : }
16405 : : else
16406 : : {
16407 : : return Sym;
16408 : : }
16409 : : }
16410 : 156 : ScopeId -= 1;
16411 : 156 : pCall = GetPcall (ScopeId);
16412 : : }
16413 : : /* at this point we force an unknown from the last module scope */
16414 : 0 : return RequestFromModule (tokenno, SymbolTable_GetLastModuleScope (), SymName);
16415 : : /* static analysis guarentees a RETURN statement will be used before here. */
16416 : : __builtin_unreachable ();
16417 : : }
16418 : :
16419 : :
16420 : : /*
16421 : : TryMoveUndeclaredSymToInnerModule - attempts to move a symbol of
16422 : : name, name, which is
16423 : : currently undefined in the
16424 : : outer scope to the inner scope.
16425 : : If successful then the symbol is
16426 : : returned otherwise NulSym is
16427 : : returned.
16428 : : */
16429 : :
16430 : 234 : extern "C" unsigned int SymbolTable_TryMoveUndeclaredSymToInnerModule (unsigned int OuterScope, unsigned int InnerScope, NameKey_Name name)
16431 : : {
16432 : 234 : SymbolTable_PtrToSymbol pSym;
16433 : 234 : unsigned int sym;
16434 : :
16435 : : /* assume this should not be called if OuterScope was a procedure
16436 : : as this case is handled by the caller (P1SymBuild)
16437 : : */
16438 : 468 : M2Debug_Assert ((SymbolTable_IsModule (OuterScope)) || (SymbolTable_IsDefImp (OuterScope)));
16439 : 234 : sym = GetExportUndeclared (OuterScope, name);
16440 : 234 : if (sym != SymbolTable_NulSym)
16441 : : {
16442 : 18 : M2Debug_Assert (SymbolTable_IsUnknown (sym));
16443 : 18 : RemoveExportUndeclared (OuterScope, sym);
16444 : 18 : SymbolTable_AddSymToModuleScope (OuterScope, sym);
16445 : 18 : AddVarToScopeList (OuterScope, sym);
16446 : 18 : pSym = GetPsym (OuterScope);
16447 : 18 : switch (pSym->SymbolType)
16448 : : {
16449 : 0 : case SymbolTable_DefImpSym:
16450 : 0 : if ((SymbolKey_GetSymKey (pSym->DefImp.Unresolved, name)) == sym)
16451 : : {
16452 : 0 : SymbolKey_DelSymKey (pSym->DefImp.Unresolved, name);
16453 : : }
16454 : : break;
16455 : :
16456 : 18 : case SymbolTable_ModuleSym:
16457 : 18 : if ((SymbolKey_GetSymKey (pSym->Module.Unresolved, name)) == sym)
16458 : : {
16459 : 18 : SymbolKey_DelSymKey (pSym->Module.Unresolved, name);
16460 : : }
16461 : : break;
16462 : :
16463 : :
16464 : 0 : default:
16465 : 0 : M2Error_InternalError ((const char *) "expecting DefImp, Module symbol", 31);
16466 : 18 : break;
16467 : : }
16468 : 18 : AddSymToUnknown (InnerScope, name, sym);
16469 : 18 : PutExportUndeclared (InnerScope, sym);
16470 : : }
16471 : 234 : return sym;
16472 : : /* static analysis guarentees a RETURN statement will be used before here. */
16473 : : __builtin_unreachable ();
16474 : : }
16475 : :
16476 : :
16477 : : /*
16478 : : IsExportQualified - returns true if a symbol, Sym, was defined as
16479 : : being EXPORT QUALIFIED.
16480 : : Sym is expected to be either a procedure or a
16481 : : variable.
16482 : : */
16483 : :
16484 : 5589211 : extern "C" bool SymbolTable_IsExportQualified (unsigned int Sym)
16485 : : {
16486 : 5589211 : SymbolTable_PtrToSymbol pSym;
16487 : 5589211 : unsigned int OuterModule;
16488 : :
16489 : 5589211 : OuterModule = Sym;
16490 : 6132972 : do {
16491 : 6132972 : OuterModule = SymbolTable_GetScope (OuterModule);
16492 : 6132972 : } while (! ((SymbolTable_GetScope (OuterModule)) == SymbolTable_NulSym));
16493 : 5589211 : pSym = GetPsym (OuterModule);
16494 : 5589211 : switch (pSym->SymbolType)
16495 : : {
16496 : : case SymbolTable_ModuleSym:
16497 : : return false;
16498 : 5165861 : break;
16499 : :
16500 : 5165861 : case SymbolTable_DefImpSym:
16501 : 5165861 : return (SymbolKey_GetSymKey (pSym->DefImp.ExportQualifiedTree, SymbolTable_GetSymName (Sym))) == Sym;
16502 : 0 : break;
16503 : :
16504 : :
16505 : 0 : default:
16506 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16507 : : break;
16508 : : }
16509 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
16510 : : __builtin_unreachable ();
16511 : : }
16512 : :
16513 : :
16514 : : /*
16515 : : IsExportUnQualified - returns true if a symbol, Sym, was defined as
16516 : : being EXPORT UNQUALIFIED.
16517 : : */
16518 : :
16519 : 2533333 : extern "C" bool SymbolTable_IsExportUnQualified (unsigned int Sym)
16520 : : {
16521 : 2533333 : SymbolTable_PtrToSymbol pSym;
16522 : 2533333 : unsigned int OuterModule;
16523 : :
16524 : 2533333 : OuterModule = Sym;
16525 : 2533333 : do {
16526 : 2533333 : OuterModule = SymbolTable_GetScope (OuterModule);
16527 : 2533333 : } while (! ((SymbolTable_GetScope (OuterModule)) == SymbolTable_NulSym));
16528 : 2533333 : pSym = GetPsym (OuterModule);
16529 : 2533333 : switch (pSym->SymbolType)
16530 : : {
16531 : : case SymbolTable_ModuleSym:
16532 : : return false;
16533 : 2460498 : break;
16534 : :
16535 : 2460498 : case SymbolTable_DefImpSym:
16536 : 2460498 : return (SymbolKey_GetSymKey (pSym->DefImp.ExportUnQualifiedTree, SymbolTable_GetSymName (Sym))) == Sym;
16537 : 0 : break;
16538 : :
16539 : :
16540 : 0 : default:
16541 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16542 : : break;
16543 : : }
16544 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
16545 : : __builtin_unreachable ();
16546 : : }
16547 : :
16548 : :
16549 : : /*
16550 : : IsExported - returns true if a symbol, Sym, is exported
16551 : : from module, ModSym.
16552 : : If ModSym is a DefImp symbol then its
16553 : : ExportQualified and ExportUnQualified lists are examined.
16554 : : */
16555 : :
16556 : 4826962 : extern "C" bool SymbolTable_IsExported (unsigned int ModSym, unsigned int Sym)
16557 : : {
16558 : 4826962 : SymbolTable_PtrToSymbol pSym;
16559 : 4826962 : NameKey_Name SymName;
16560 : :
16561 : 4826962 : SymName = SymbolTable_GetSymName (Sym);
16562 : 4826962 : pSym = GetPsym (ModSym);
16563 : 4826962 : switch (pSym->SymbolType)
16564 : : {
16565 : 4373663 : case SymbolTable_DefImpSym:
16566 : 4373663 : return ((SymbolKey_GetSymKey (pSym->DefImp.ExportQualifiedTree, SymName)) == Sym) || ((SymbolKey_GetSymKey (pSym->DefImp.ExportUnQualifiedTree, SymName)) == Sym);
16567 : 453299 : break;
16568 : :
16569 : 453299 : case SymbolTable_ModuleSym:
16570 : 453299 : return (SymbolKey_GetSymKey (pSym->Module.ExportTree, SymName)) == Sym;
16571 : 0 : break;
16572 : :
16573 : :
16574 : 0 : default:
16575 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16576 : : break;
16577 : : }
16578 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
16579 : : __builtin_unreachable ();
16580 : : }
16581 : :
16582 : :
16583 : : /*
16584 : : IsImplicityExported - returns TRUE if, Sym, is implicitly exported from module, ModSym.
16585 : : ModSym must be a defimp symbol.
16586 : : */
16587 : :
16588 : 84 : extern "C" bool SymbolTable_IsImplicityExported (unsigned int ModSym, unsigned int Sym)
16589 : : {
16590 : 84 : unsigned int type;
16591 : 84 : SymbolTable_PtrToSymbol pSym;
16592 : :
16593 : 84 : if ((SymbolTable_IsDefImp (ModSym)) && (SymbolTable_IsFieldEnumeration (Sym)))
16594 : : {
16595 : 66 : pSym = GetPsym (ModSym);
16596 : 66 : type = SymbolTable_SkipType (SymbolTable_GetType (Sym));
16597 : 66 : return Lists_IsItemInList (pSym->DefImp.EnumerationScopeList, type);
16598 : : }
16599 : : return false;
16600 : : /* static analysis guarentees a RETURN statement will be used before here. */
16601 : : __builtin_unreachable ();
16602 : : }
16603 : :
16604 : :
16605 : : /*
16606 : : IsImported - returns true if a symbol, Sym, in module, ModSym,
16607 : : was imported.
16608 : : */
16609 : :
16610 : 7411109 : extern "C" bool SymbolTable_IsImported (unsigned int ModSym, unsigned int Sym)
16611 : : {
16612 : 7411109 : SymbolTable_PtrToSymbol pSym;
16613 : 7411109 : NameKey_Name SymName;
16614 : :
16615 : 7411109 : SymName = SymbolTable_GetSymName (Sym);
16616 : 7411109 : pSym = GetPsym (ModSym);
16617 : 7411109 : switch (pSym->SymbolType)
16618 : : {
16619 : 790782 : case SymbolTable_DefImpSym:
16620 : 790782 : return ((SymbolKey_GetSymKey (pSym->DefImp.ImportTree, SymName)) == Sym) || (Lists_IsItemInList (pSym->DefImp.IncludeList, Sym));
16621 : 6620327 : break;
16622 : :
16623 : 6620327 : case SymbolTable_ModuleSym:
16624 : 6620327 : return ((SymbolKey_GetSymKey (pSym->Module.ImportTree, SymName)) == Sym) || (Lists_IsItemInList (pSym->Module.IncludeList, Sym));
16625 : 0 : break;
16626 : :
16627 : :
16628 : 0 : default:
16629 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16630 : : break;
16631 : : }
16632 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
16633 : : __builtin_unreachable ();
16634 : : }
16635 : :
16636 : :
16637 : : /*
16638 : : PutIncludedByDefinition - places a module symbol, Sym, into the
16639 : : included list of the current definition module.
16640 : : */
16641 : :
16642 : 9166 : extern "C" void SymbolTable_PutIncludedByDefinition (unsigned int Sym)
16643 : : {
16644 : 9166 : SymbolTable_PtrToSymbol pSym;
16645 : 9166 : unsigned int ModSym;
16646 : :
16647 : 9166 : ModSym = SymbolTable_GetCurrentModuleScope ();
16648 : 9166 : M2Debug_Assert (SymbolTable_IsDefImp (ModSym));
16649 : 9166 : M2Debug_Assert (SymbolTable_IsDefImp (Sym));
16650 : 9166 : pSym = GetPsym (ModSym);
16651 : 9166 : switch (pSym->SymbolType)
16652 : : {
16653 : 9166 : case SymbolTable_DefImpSym:
16654 : 9166 : Lists_IncludeItemIntoList (pSym->DefImp.DefIncludeList, Sym);
16655 : 9166 : break;
16656 : :
16657 : :
16658 : 0 : default:
16659 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16660 : 9166 : break;
16661 : : }
16662 : 9166 : }
16663 : :
16664 : :
16665 : : /*
16666 : : IsIncludedByDefinition - returns TRUE if definition module symbol, Sym, was included
16667 : : by ModSym's definition module.
16668 : : */
16669 : :
16670 : 12 : extern "C" bool SymbolTable_IsIncludedByDefinition (unsigned int ModSym, unsigned int Sym)
16671 : : {
16672 : 12 : SymbolTable_PtrToSymbol pSym;
16673 : :
16674 : 12 : M2Debug_Assert (SymbolTable_IsDefImp (ModSym));
16675 : 12 : M2Debug_Assert (SymbolTable_IsDefImp (Sym));
16676 : 12 : pSym = GetPsym (ModSym);
16677 : 12 : switch (pSym->SymbolType)
16678 : : {
16679 : 12 : case SymbolTable_DefImpSym:
16680 : 12 : return Lists_IsItemInList (pSym->DefImp.DefIncludeList, Sym);
16681 : 0 : break;
16682 : :
16683 : :
16684 : 0 : default:
16685 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16686 : : break;
16687 : : }
16688 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
16689 : : __builtin_unreachable ();
16690 : : }
16691 : :
16692 : :
16693 : : /*
16694 : : ForeachImportedDo - calls a procedure, P, foreach imported symbol
16695 : : in module, ModSym.
16696 : : */
16697 : :
16698 : 13681 : extern "C" void SymbolTable_ForeachImportedDo (unsigned int ModSym, SymbolKey_PerformOperation P)
16699 : : {
16700 : 13681 : SymbolTable_PtrToSymbol pSym;
16701 : :
16702 : 13681 : pSym = GetPsym (ModSym);
16703 : 13681 : switch (pSym->SymbolType)
16704 : : {
16705 : 3285 : case SymbolTable_DefImpSym:
16706 : 3285 : SymbolKey_ForeachNodeDo (pSym->DefImp.ImportTree, P);
16707 : 3285 : Lists_ForeachItemInListDo (pSym->DefImp.IncludeList, P);
16708 : 3285 : break;
16709 : :
16710 : 10396 : case SymbolTable_ModuleSym:
16711 : 10396 : SymbolKey_ForeachNodeDo (pSym->Module.ImportTree, P);
16712 : 10396 : Lists_ForeachItemInListDo (pSym->Module.IncludeList, P);
16713 : 10396 : break;
16714 : :
16715 : :
16716 : 0 : default:
16717 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16718 : 13681 : break;
16719 : : }
16720 : 13681 : }
16721 : :
16722 : :
16723 : : /*
16724 : : ForeachExportedDo - calls a procedure, P, foreach imported symbol
16725 : : in module, ModSym.
16726 : : */
16727 : :
16728 : 8069 : extern "C" void SymbolTable_ForeachExportedDo (unsigned int ModSym, SymbolKey_PerformOperation P)
16729 : : {
16730 : 8069 : SymbolTable_PtrToSymbol pSym;
16731 : :
16732 : 8069 : pSym = GetPsym (ModSym);
16733 : 8069 : switch (pSym->SymbolType)
16734 : : {
16735 : 2808 : case SymbolTable_DefImpSym:
16736 : 2808 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportQualifiedTree, P);
16737 : 2808 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportUnQualifiedTree, P);
16738 : 2808 : break;
16739 : :
16740 : 5261 : case SymbolTable_ModuleSym:
16741 : 5261 : SymbolKey_ForeachNodeDo (pSym->Module.ExportTree, P);
16742 : 5261 : break;
16743 : :
16744 : :
16745 : 0 : default:
16746 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16747 : 8069 : break;
16748 : : }
16749 : 8069 : }
16750 : :
16751 : :
16752 : : /*
16753 : : CheckForExportedImplementation - checks to see whether an implementation
16754 : : module is currently being compiled, if so,
16755 : : symbol, Sym, is removed from the
16756 : : NeedToBeImplemented list.
16757 : : This procedure is called whenever a symbol
16758 : : is declared, thus attempting to reduce
16759 : : the NeedToBeImplemented list.
16760 : : Only needs to be called when a TYPE or
16761 : : PROCEDURE is built since the implementation
16762 : : module can only implement these objects
16763 : : declared in the definition module.
16764 : :
16765 : : It also checks whether a definition module
16766 : : is currently being compiled and, if so,
16767 : : it will ensure that symbol, Sym, is removed
16768 : : from the ExportRequest list. If Sym is an
16769 : : enumerated type it ensures that its fields
16770 : : are also removed.
16771 : : */
16772 : :
16773 : 1326757 : extern "C" void SymbolTable_CheckForExportedImplementation (unsigned int Sym)
16774 : : {
16775 : 1326757 : if (M2Comp_CompilingImplementationModule ())
16776 : : {
16777 : 1202095 : RemoveExportUnImplemented (SymbolTable_GetCurrentModule (), Sym);
16778 : : }
16779 : 1326757 : if ((M2Comp_CompilingDefinitionModule ()) && (SymbolTable_IsEnumeration (Sym)))
16780 : : {
16781 : 13024 : RemoveEnumerationFromExportRequest (SymbolTable_GetCurrentModule (), Sym);
16782 : : }
16783 : 1326757 : }
16784 : :
16785 : :
16786 : : /*
16787 : : CheckForUnImplementedExports - displays an error and the offending symbols
16788 : : which have been exported but not implemented
16789 : : from the current compiled module.
16790 : : */
16791 : :
16792 : 52171 : extern "C" void SymbolTable_CheckForUnImplementedExports (void)
16793 : : {
16794 : 52171 : SymbolTable_PtrToSymbol pSym;
16795 : :
16796 : : /* WriteString('Inside CheckForImplementedExports') ; WriteLn ; */
16797 : 52171 : pSym = GetPsym (CurrentModule);
16798 : 52171 : switch (pSym->SymbolType)
16799 : : {
16800 : 52171 : case SymbolTable_DefImpSym:
16801 : 52171 : if (! (SymbolKey_IsEmptyTree (pSym->DefImp.NeedToBeImplemented)))
16802 : : {
16803 : 0 : CurrentError = M2Error_NewError (M2LexBuf_GetTokenNo ());
16804 : 0 : M2Error_ErrorFormat1 (CurrentError, (const char *) "unimplemented identifier(s) in EXPORT list of DEFINITION MODULE %a\\nthe implementation module fails to implement the following exported identifier(s)", 149, (const unsigned char *) &pSym->DefImp.name, (sizeof (pSym->DefImp.name)-1));
16805 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.NeedToBeImplemented, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) UnImplementedSymbolError});
16806 : : }
16807 : 52171 : break;
16808 : :
16809 : :
16810 : 0 : default:
16811 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16812 : 52171 : break;
16813 : : }
16814 : 52171 : }
16815 : :
16816 : :
16817 : : /*
16818 : : CheckForUndeclaredExports - displays an error and the offending symbols
16819 : : which have been exported but not declared
16820 : : from module, ModSym.
16821 : : */
16822 : :
16823 : 126482 : extern "C" void SymbolTable_CheckForUndeclaredExports (unsigned int ModSym)
16824 : : {
16825 : 126482 : SymbolTable_PtrToSymbol pSym;
16826 : :
16827 : : /* WriteString('Inside CheckForUndeclaredExports') ; WriteLn ; */
16828 : 126482 : pSym = GetPsym (ModSym);
16829 : 126482 : switch (pSym->SymbolType)
16830 : : {
16831 : 11494 : case SymbolTable_ModuleSym:
16832 : 11494 : if (! (SymbolKey_IsEmptyTree (pSym->Module.ExportUndeclared)))
16833 : : {
16834 : 0 : M2MetaError_MetaError1 ((const char *) "undeclared identifier(s) in EXPORT list of {%1ERd} {%1a}", 56, ModSym);
16835 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.ExportUndeclared, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) UndeclaredSymbolError});
16836 : : }
16837 : : break;
16838 : :
16839 : 114988 : case SymbolTable_DefImpSym:
16840 : 114988 : if (! (SymbolKey_IsEmptyTree (pSym->DefImp.ExportUndeclared)))
16841 : : {
16842 : 0 : if (SymbolTable_DoesNotNeedExportList (ModSym))
16843 : : {
16844 : 0 : M2MetaError_MetaError1 ((const char *) "undeclared identifier(s) in {%1ERd} {%1a}", 41, ModSym);
16845 : : }
16846 : : else
16847 : : {
16848 : 0 : M2MetaError_MetaError1 ((const char *) "undeclared identifier(s) in export list of {%1ERd} {%1a}", 56, ModSym);
16849 : : }
16850 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportUndeclared, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) UndeclaredSymbolError});
16851 : : }
16852 : : break;
16853 : :
16854 : :
16855 : 0 : default:
16856 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16857 : 126482 : break;
16858 : : }
16859 : 126482 : }
16860 : :
16861 : :
16862 : : /*
16863 : : CheckForUnknownInModule - checks for any unknown symbols in the
16864 : : current module.
16865 : : If any unknown symbols are found then
16866 : : an error message is displayed.
16867 : : */
16868 : :
16869 : 355692 : extern "C" void SymbolTable_CheckForUnknownInModule (void)
16870 : : {
16871 : 355692 : SymbolTable_PtrToSymbol pSym;
16872 : :
16873 : 355692 : pSym = GetPsym (SymbolTable_GetCurrentModuleScope ());
16874 : 355692 : switch (pSym->SymbolType)
16875 : : {
16876 : 333022 : case SymbolTable_DefImpSym:
16877 : 333022 : CheckForUnknowns (pSym->DefImp.name, pSym->DefImp.ExportQualifiedTree, (const char *) "EXPORT QUALIFIED", 16);
16878 : 333022 : CheckForUnknowns (pSym->DefImp.name, pSym->DefImp.ExportUnQualifiedTree, (const char *) "EXPORT UNQUALIFIED", 18);
16879 : 333022 : CheckForSymbols (pSym->DefImp.ExportRequest, (const char *) "requested by another modules import (symbols have not been exported by the appropriate definition module)", 105);
16880 : 333022 : CheckForUnknowns (pSym->DefImp.name, pSym->DefImp.Unresolved, (const char *) "unresolved", 10);
16881 : 333022 : CheckForUnknowns (pSym->DefImp.name, pSym->DefImp.LocalSymbols, (const char *) "locally used", 12);
16882 : 333022 : break;
16883 : :
16884 : 22670 : case SymbolTable_ModuleSym:
16885 : 22670 : CheckForUnknowns (pSym->Module.name, pSym->Module.Unresolved, (const char *) "unresolved", 10);
16886 : 22670 : CheckForUnknowns (pSym->Module.name, pSym->Module.ExportUndeclared, (const char *) "exported but undeclared", 23);
16887 : 22670 : CheckForUnknowns (pSym->Module.name, pSym->Module.ExportTree, (const char *) "exported but undeclared", 23);
16888 : 22670 : CheckForUnknowns (pSym->Module.name, pSym->Module.LocalSymbols, (const char *) "locally used", 12);
16889 : 22670 : break;
16890 : :
16891 : :
16892 : 0 : default:
16893 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
16894 : 355692 : break;
16895 : : }
16896 : 355692 : }
16897 : :
16898 : :
16899 : : /*
16900 : : UnknownReported - if sym is an unknown symbol and has not been reported
16901 : : then include it into the set of reported unknowns.
16902 : : */
16903 : :
16904 : 0 : extern "C" void SymbolTable_UnknownReported (unsigned int sym)
16905 : : {
16906 : 0 : if (IsUnreportedUnknown (sym))
16907 : : {
16908 : 0 : Sets_IncludeElementIntoSet (ReportedUnknowns, sym);
16909 : : }
16910 : 0 : }
16911 : :
16912 : :
16913 : : /*
16914 : : IsReallyPointer - returns TRUE is sym is a pointer, address or a
16915 : : type declared as a pointer or address.
16916 : : */
16917 : :
16918 : 445524 : extern "C" bool SymbolTable_IsReallyPointer (unsigned int Sym)
16919 : : {
16920 : 445524 : if (SymbolTable_IsVar (Sym))
16921 : : {
16922 : 159072 : Sym = SymbolTable_GetType (Sym);
16923 : : }
16924 : 445524 : Sym = SymbolTable_SkipType (Sym);
16925 : 445524 : return ((SymbolTable_IsPointer (Sym)) || (Sym == M2System_Address)) || (SymbolTable_IsHiddenReallyPointer (Sym));
16926 : : /* static analysis guarentees a RETURN statement will be used before here. */
16927 : : __builtin_unreachable ();
16928 : : }
16929 : :
16930 : :
16931 : : /*
16932 : : CheckHiddenTypeAreAddress - checks to see that any hidden types
16933 : : which we have declared are actually
16934 : : of type ADDRESS or map onto a POINTER type.
16935 : : */
16936 : :
16937 : 13345 : extern "C" void SymbolTable_CheckHiddenTypeAreAddress (void)
16938 : : {
16939 : 13345 : NameKey_Name name;
16940 : 13345 : M2Error_Error e;
16941 : 13345 : unsigned int sym;
16942 : 13345 : unsigned int i;
16943 : 13345 : unsigned int n;
16944 : :
16945 : 13345 : i = 1;
16946 : 13345 : n = Lists_NoOfItemsInList (AddressTypes);
16947 : 46603 : while (i <= n)
16948 : : {
16949 : 19913 : sym = static_cast<unsigned int> (Lists_GetItemFromList (AddressTypes, i));
16950 : 19913 : if (! (SymbolTable_IsHiddenReallyPointer (sym)))
16951 : : {
16952 : 6 : name = SymbolTable_GetSymName (sym);
16953 : 6 : e = M2Error_NewError (SymbolTable_GetDeclaredDef (sym));
16954 : 6 : M2Error_ErrorFormat1 (e, (const char *) "opaque type (%a) should be equivalent to a POINTER or an ADDRESS", 64, (const unsigned char *) &name, (sizeof (name)-1));
16955 : 6 : e = M2Error_NewError (SymbolTable_GetDeclaredMod (sym));
16956 : 6 : M2Error_ErrorFormat0 (e, (const char *) "if you really need a non POINTER type use the -fextended-opaque switch", 70);
16957 : : }
16958 : 19913 : i += 1;
16959 : : }
16960 : 13345 : }
16961 : :
16962 : :
16963 : : /*
16964 : : PutDefinitionForC - sets a flag in the current compiled module which
16965 : : indicates that this module is a wrapper for a C
16966 : : file. Parameters passes to procedures in this module
16967 : : will adopt the C calling convention.
16968 : : */
16969 : :
16970 : 15528 : extern "C" void SymbolTable_PutDefinitionForC (unsigned int Sym)
16971 : : {
16972 : 15528 : SymbolTable_PtrToSymbol pSym;
16973 : :
16974 : 15528 : pSym = GetPsym (Sym);
16975 : 15528 : switch (pSym->SymbolType)
16976 : : {
16977 : 15528 : case SymbolTable_DefImpSym:
16978 : 15528 : pSym->DefImp.ForC = true;
16979 : 15528 : break;
16980 : :
16981 : :
16982 : 0 : default:
16983 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
16984 : 15528 : break;
16985 : : }
16986 : 15528 : }
16987 : :
16988 : :
16989 : : /*
16990 : : IsDefinitionForC - returns true if this definition module was declared
16991 : : as a DEFINITION MODULE FOR "C".
16992 : : */
16993 : :
16994 : 849570 : extern "C" bool SymbolTable_IsDefinitionForC (unsigned int Sym)
16995 : : {
16996 : 849570 : SymbolTable_PtrToSymbol pSym;
16997 : :
16998 : 849570 : pSym = GetPsym (Sym);
16999 : 849570 : switch (pSym->SymbolType)
17000 : : {
17001 : 849570 : case SymbolTable_DefImpSym:
17002 : 849570 : return pSym->DefImp.ForC;
17003 : 0 : break;
17004 : :
17005 : :
17006 : 0 : default:
17007 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
17008 : : break;
17009 : : }
17010 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17011 : : __builtin_unreachable ();
17012 : : }
17013 : :
17014 : :
17015 : : /*
17016 : : PutDoesNeedExportList - sets a flag in module, Sym, which
17017 : : indicates that this module requires an explicit
17018 : : EXPORT QUALIFIED or UNQUALIFIED list. PIM-2
17019 : : */
17020 : :
17021 : 67330 : extern "C" void SymbolTable_PutDoesNeedExportList (unsigned int Sym)
17022 : : {
17023 : 67330 : SymbolTable_PtrToSymbol pSym;
17024 : :
17025 : 67330 : pSym = GetPsym (Sym);
17026 : 67330 : switch (pSym->SymbolType)
17027 : : {
17028 : 67330 : case SymbolTable_DefImpSym:
17029 : 67330 : pSym->DefImp.NeedExportList = true;
17030 : 67330 : break;
17031 : :
17032 : :
17033 : 0 : default:
17034 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
17035 : 67330 : break;
17036 : : }
17037 : 67330 : }
17038 : :
17039 : :
17040 : : /*
17041 : : PutDoesNotNeedExportList - sets a flag in module, Sym, which
17042 : : indicates that this module does not require an explicit
17043 : : EXPORT QUALIFIED or UNQUALIFIED list. PIM-3|4
17044 : : */
17045 : :
17046 : 115120 : extern "C" void SymbolTable_PutDoesNotNeedExportList (unsigned int Sym)
17047 : : {
17048 : 115120 : SymbolTable_PtrToSymbol pSym;
17049 : :
17050 : 115120 : pSym = GetPsym (Sym);
17051 : 115120 : switch (pSym->SymbolType)
17052 : : {
17053 : 115120 : case SymbolTable_DefImpSym:
17054 : 115120 : pSym->DefImp.NeedExportList = false;
17055 : 115120 : break;
17056 : :
17057 : :
17058 : 0 : default:
17059 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
17060 : 115120 : break;
17061 : : }
17062 : 115120 : }
17063 : :
17064 : :
17065 : : /*
17066 : : DoesNotNeedExportList - returns TRUE if module, Sym, does not require an explicit
17067 : : EXPORT QUALIFIED list.
17068 : : */
17069 : :
17070 : 2602743 : extern "C" bool SymbolTable_DoesNotNeedExportList (unsigned int Sym)
17071 : : {
17072 : 2602743 : SymbolTable_PtrToSymbol pSym;
17073 : :
17074 : 2602743 : pSym = GetPsym (Sym);
17075 : 2602743 : switch (pSym->SymbolType)
17076 : : {
17077 : 2602743 : case SymbolTable_DefImpSym:
17078 : 2602743 : return ! pSym->DefImp.NeedExportList;
17079 : 0 : break;
17080 : :
17081 : :
17082 : 0 : default:
17083 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
17084 : : break;
17085 : : }
17086 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17087 : : __builtin_unreachable ();
17088 : : }
17089 : :
17090 : :
17091 : : /*
17092 : : CheckForEnumerationInCurrentModule - checks to see whether the enumeration
17093 : : type symbol, Sym, has been entered into
17094 : : the current modules scope list.
17095 : : */
17096 : :
17097 : 1183404 : extern "C" void SymbolTable_CheckForEnumerationInCurrentModule (unsigned int Sym)
17098 : : {
17099 : 1183404 : SymbolTable_PtrToSymbol pSym;
17100 : 1183404 : unsigned int ModSym;
17101 : :
17102 : 1183404 : if (((SymbolTable_SkipType (Sym)) != SymbolTable_NulSym) && (SymbolTable_IsEnumeration (SymbolTable_SkipType (Sym))))
17103 : : {
17104 : 11900 : Sym = SymbolTable_SkipType (Sym);
17105 : : }
17106 : 1183404 : if (SymbolTable_IsEnumeration (Sym))
17107 : : {
17108 : 11900 : ModSym = SymbolTable_GetCurrentModuleScope ();
17109 : 11900 : pSym = GetPsym (ModSym);
17110 : 11900 : switch (pSym->SymbolType)
17111 : : {
17112 : 11534 : case SymbolTable_DefImpSym:
17113 : 11534 : CheckEnumerationInList (pSym->DefImp.EnumerationScopeList, Sym);
17114 : 11534 : break;
17115 : :
17116 : 366 : case SymbolTable_ModuleSym:
17117 : 366 : CheckEnumerationInList (pSym->Module.EnumerationScopeList, Sym);
17118 : 366 : break;
17119 : :
17120 : :
17121 : 0 : default:
17122 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
17123 : : break;
17124 : : }
17125 : : }
17126 : 1183404 : }
17127 : :
17128 : :
17129 : : /*
17130 : : SanityCheckConstants - must only be called once all constants, types, procedures
17131 : : have been declared. It checks to see that constants are
17132 : : not used as procedure parameter types.
17133 : : */
17134 : :
17135 : 13951 : extern "C" void SymbolTable_SanityCheckConstants (void)
17136 : : {
17137 : 13951 : SymbolTable_ForeachModuleDo ((SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) SanityCheckModule});
17138 : 13951 : ForeachSymbolDo ((SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) SanityCheckArray});
17139 : 13951 : }
17140 : :
17141 : :
17142 : : /*
17143 : : ForeachLocalSymDo - foreach local symbol in module, Sym, or procedure, Sym,
17144 : : perform the procedure, P.
17145 : : */
17146 : :
17147 : 3790600 : extern "C" void SymbolTable_ForeachLocalSymDo (unsigned int Sym, SymbolKey_PerformOperation P)
17148 : : {
17149 : 3790600 : SymbolTable_PtrToSymbol pSym;
17150 : :
17151 : 3790600 : pSym = GetPsym (Sym);
17152 : 3790600 : switch (pSym->SymbolType)
17153 : : {
17154 : 409630 : case SymbolTable_DefImpSym:
17155 : 409630 : SymbolKey_ForeachNodeDo (pSym->DefImp.LocalSymbols, P);
17156 : 409630 : break;
17157 : :
17158 : 87717 : case SymbolTable_ModuleSym:
17159 : 87717 : SymbolKey_ForeachNodeDo (pSym->Module.LocalSymbols, P);
17160 : 87717 : break;
17161 : :
17162 : 200945 : case SymbolTable_ProcedureSym:
17163 : 200945 : SymbolKey_ForeachNodeDo (pSym->Procedure.LocalSymbols, P);
17164 : 200945 : break;
17165 : :
17166 : 0 : case SymbolTable_RecordSym:
17167 : 0 : SymbolKey_ForeachNodeDo (pSym->Record.LocalSymbols, P);
17168 : 0 : break;
17169 : :
17170 : 3092308 : case SymbolTable_EnumerationSym:
17171 : 3092308 : SymbolKey_ForeachNodeDo (pSym->Enumeration.LocalSymbols, P);
17172 : 3092308 : break;
17173 : :
17174 : :
17175 : 0 : default:
17176 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp, Module or Procedure symbol", 46);
17177 : 3790600 : break;
17178 : : }
17179 : 3790600 : }
17180 : :
17181 : :
17182 : : /*
17183 : : ForeachParamSymDo - foreach parameter symbol in procedure Sym
17184 : : perform the procedure P. Each symbol
17185 : : looked up will be VarParam or Param
17186 : : (not the shadow variable). Every parameter
17187 : : from each KindProcedure is iterated over.
17188 : : */
17189 : :
17190 : 947488 : extern "C" void SymbolTable_ForeachParamSymDo (unsigned int Sym, SymbolKey_PerformOperation P)
17191 : : {
17192 : 947488 : SymbolTable_ProcedureKind kind;
17193 : 947488 : unsigned int param;
17194 : 947488 : unsigned int p;
17195 : 947488 : unsigned int i;
17196 : :
17197 : 947488 : if (SymbolTable_IsProcedure (Sym))
17198 : : {
17199 : 3782516 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
17200 : : {
17201 : 2836887 : p = SymbolTable_NoOfParam (Sym, kind);
17202 : 2836887 : i = p;
17203 : 8768541 : while (i > 0)
17204 : : {
17205 : 3094767 : param = SymbolTable_GetNthParam (Sym, kind, i);
17206 : 3094767 : (*P.proc) (param);
17207 : 3094767 : i -= 1;
17208 : : }
17209 : : }
17210 : : }
17211 : 947488 : }
17212 : :
17213 : :
17214 : : /*
17215 : : ForeachFieldEnumerationDo - for each field in enumeration, Sym,
17216 : : do procedure, P. Each call to P contains
17217 : : an enumeration field, the order is alphabetical.
17218 : : Use ForeachLocalSymDo for declaration order.
17219 : : */
17220 : :
17221 : 60209 : extern "C" void SymbolTable_ForeachFieldEnumerationDo (unsigned int Sym, SymbolKey_PerformOperation P)
17222 : : {
17223 : 60209 : SymbolTable_PtrToSymbol pSym;
17224 : :
17225 : 60209 : pSym = GetPsym (Sym);
17226 : 60209 : switch (pSym->SymbolType)
17227 : : {
17228 : 60209 : case SymbolTable_EnumerationSym:
17229 : 60209 : SymbolKey_ForeachNodeDo (pSym->Enumeration.LocalSymbols, P);
17230 : 60209 : break;
17231 : :
17232 : :
17233 : 0 : default:
17234 : 0 : M2Error_InternalError ((const char *) "expecting Enumeration symbol", 28);
17235 : 60209 : break;
17236 : : }
17237 : 60209 : }
17238 : :
17239 : :
17240 : : /*
17241 : : IsType - returns true if the Sym is a type symbol.
17242 : : */
17243 : :
17244 : 434010605 : extern "C" bool SymbolTable_IsType (unsigned int Sym)
17245 : : {
17246 : 434010605 : SymbolTable_PtrToSymbol pSym;
17247 : :
17248 : 434010605 : pSym = GetPsym (Sym);
17249 : 434010605 : return pSym->SymbolType == SymbolTable_TypeSym;
17250 : : /* static analysis guarentees a RETURN statement will be used before here. */
17251 : : __builtin_unreachable ();
17252 : : }
17253 : :
17254 : :
17255 : : /*
17256 : : IsProcedure - returns true if Sym is a procedure symbol.
17257 : : */
17258 : :
17259 : 239509030 : extern "C" bool SymbolTable_IsProcedure (unsigned int Sym)
17260 : : {
17261 : 239509030 : SymbolTable_PtrToSymbol pSym;
17262 : :
17263 : 239509030 : AssertInRange (Sym);
17264 : 239509030 : pSym = GetPsym (Sym);
17265 : 239509030 : return pSym->SymbolType == SymbolTable_ProcedureSym;
17266 : : /* static analysis guarentees a RETURN statement will be used before here. */
17267 : : __builtin_unreachable ();
17268 : : }
17269 : :
17270 : :
17271 : : /*
17272 : : IsParameter - returns true if Sym is a parameter symbol.
17273 : : */
17274 : :
17275 : 61564355 : extern "C" bool SymbolTable_IsParameter (unsigned int Sym)
17276 : : {
17277 : 61564355 : SymbolTable_PtrToSymbol pSym;
17278 : :
17279 : 61564355 : pSym = GetPsym (Sym);
17280 : 61564355 : switch (pSym->SymbolType)
17281 : : {
17282 : : case SymbolTable_ParamSym:
17283 : : case SymbolTable_VarParamSym:
17284 : : return true;
17285 : 50865075 : break;
17286 : :
17287 : :
17288 : 50865075 : default:
17289 : 50865075 : return false;
17290 : : break;
17291 : : }
17292 : : /* static analysis guarentees a RETURN statement will be used before here. */
17293 : : __builtin_unreachable ();
17294 : : }
17295 : :
17296 : :
17297 : : /*
17298 : : GetProcedureKind - returns the procedure kind given the declaration tok.
17299 : : The declaration tok must match the ident tok in the
17300 : : procedure name. It is only safe to call this
17301 : : procedure function during pass 2 onwards.
17302 : : */
17303 : :
17304 : 17121885 : extern "C" SymbolTable_ProcedureKind SymbolTable_GetProcedureKind (unsigned int sym, unsigned int tok)
17305 : : {
17306 : 17121885 : SymbolTable_ProcedureKind kind;
17307 : 17121885 : SymbolTable_PtrToSymbol pSym;
17308 : :
17309 : 17121885 : pSym = GetPsym (sym);
17310 : 17121885 : switch (pSym->SymbolType)
17311 : : {
17312 : : case SymbolTable_ProcedureSym:
17313 : 39484061 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
17314 : : {
17315 : 39484061 : if (pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ProcedureTok == tok)
17316 : : {
17317 : : return kind;
17318 : : }
17319 : : }
17320 : 0 : break;
17321 : :
17322 : : case SymbolTable_ProcTypeSym:
17323 : : return SymbolTable_ProperProcedure;
17324 : 0 : break;
17325 : :
17326 : :
17327 : 0 : default:
17328 : 0 : M2Error_InternalError ((const char *) "expecting ProcedureSym symbol", 29);
17329 : 0 : break;
17330 : : }
17331 : 0 : M2Error_InternalError ((const char *) "ProcedureSym kind has not yet been declared", 43);
17332 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17333 : : __builtin_unreachable ();
17334 : : }
17335 : :
17336 : :
17337 : : /*
17338 : : GetProcedureDeclaredTok - return the token where the
17339 : : declaration of procedure sym:kind
17340 : : occurred.
17341 : : */
17342 : :
17343 : 36 : extern "C" unsigned int SymbolTable_GetProcedureDeclaredTok (unsigned int sym, SymbolTable_ProcedureKind kind)
17344 : : {
17345 : 36 : SymbolTable_PtrToSymbol pSym;
17346 : :
17347 : 36 : pSym = GetPsym (sym);
17348 : 36 : switch (pSym->SymbolType)
17349 : : {
17350 : 36 : case SymbolTable_ProcedureSym:
17351 : 36 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ProcedureTok;
17352 : 0 : break;
17353 : :
17354 : :
17355 : 0 : default:
17356 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
17357 : : break;
17358 : : }
17359 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17360 : : __builtin_unreachable ();
17361 : : }
17362 : :
17363 : :
17364 : : /*
17365 : : PutProcedureDeclaredTok - places the tok where the
17366 : : declaration of procedure sym:kind
17367 : : occurred.
17368 : : */
17369 : :
17370 : 3065811 : extern "C" void SymbolTable_PutProcedureDeclaredTok (unsigned int sym, SymbolTable_ProcedureKind kind, unsigned int tok)
17371 : : {
17372 : 3065811 : SymbolTable_PtrToSymbol pSym;
17373 : :
17374 : 3065811 : pSym = GetPsym (sym);
17375 : 3065811 : switch (pSym->SymbolType)
17376 : : {
17377 : 3065811 : case SymbolTable_ProcedureSym:
17378 : 3065811 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ProcedureTok = tok;
17379 : 3065811 : break;
17380 : :
17381 : :
17382 : 0 : default:
17383 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
17384 : 3065811 : break;
17385 : : }
17386 : 3065811 : }
17387 : :
17388 : :
17389 : : /*
17390 : : GetReturnTypeTok - return the token where the
17391 : : return type procedure sym:kind or proctype
17392 : : was defined.
17393 : : */
17394 : :
17395 : 6 : extern "C" unsigned int SymbolTable_GetReturnTypeTok (unsigned int sym, SymbolTable_ProcedureKind kind)
17396 : : {
17397 : 6 : SymbolTable_PtrToSymbol pSym;
17398 : :
17399 : 6 : pSym = GetPsym (sym);
17400 : 6 : switch (pSym->SymbolType)
17401 : : {
17402 : 6 : case SymbolTable_ProcedureSym:
17403 : 6 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnTypeTok;
17404 : 0 : break;
17405 : :
17406 : 0 : case SymbolTable_ProcTypeSym:
17407 : 0 : return pSym->ProcType.ReturnTypeTok;
17408 : 0 : break;
17409 : :
17410 : :
17411 : 0 : default:
17412 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
17413 : : break;
17414 : : }
17415 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17416 : : __builtin_unreachable ();
17417 : : }
17418 : :
17419 : :
17420 : : /*
17421 : : PutReturnTypeTok - places the tok where the
17422 : : return type of procedure sym:kind or proctype
17423 : : was defined.
17424 : : */
17425 : :
17426 : 0 : extern "C" void SymbolTable_PutReturnTypeTok (unsigned int sym, SymbolTable_ProcedureKind kind, unsigned int tok)
17427 : : {
17428 : 0 : SymbolTable_PtrToSymbol pSym;
17429 : :
17430 : 0 : pSym = GetPsym (sym);
17431 : 0 : switch (pSym->SymbolType)
17432 : : {
17433 : 0 : case SymbolTable_ProcedureSym:
17434 : 0 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnTypeTok = tok;
17435 : 0 : break;
17436 : :
17437 : 0 : case SymbolTable_ProcTypeSym:
17438 : 0 : pSym->ProcType.ReturnTypeTok = tok;
17439 : 0 : break;
17440 : :
17441 : :
17442 : 0 : default:
17443 : 0 : M2Error_InternalError ((const char *) "expecting procedure symbol", 26);
17444 : 0 : break;
17445 : : }
17446 : 0 : }
17447 : :
17448 : :
17449 : : /*
17450 : : PutProcedureParametersDefined - the procedure symbol sym:kind
17451 : : parameters have been defined.
17452 : : */
17453 : :
17454 : 6000542 : extern "C" void SymbolTable_PutProcedureParametersDefined (unsigned int sym, SymbolTable_ProcedureKind kind)
17455 : : {
17456 : 6000542 : SymbolTable_PtrToSymbol pSym;
17457 : :
17458 : 6000542 : AssertInRange (sym);
17459 : 6000542 : pSym = GetPsym (sym);
17460 : 6000542 : switch (pSym->SymbolType)
17461 : : {
17462 : : case SymbolTable_ErrorSym:
17463 : : break;
17464 : :
17465 : 6000542 : case SymbolTable_ProcedureSym:
17466 : 6000542 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ParamDefined = true;
17467 : 6000542 : pSym->Procedure.BuildProcType = false;
17468 : 6000542 : break;
17469 : :
17470 : : case SymbolTable_ProcTypeSym:
17471 : : break;
17472 : :
17473 : :
17474 : 0 : default:
17475 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
17476 : 6000542 : break;
17477 : : }
17478 : 6000542 : }
17479 : :
17480 : :
17481 : : /*
17482 : : GetProcedureParametersDefined - returns true if procedure symbol sym:kind
17483 : : parameters are defined.
17484 : : */
17485 : :
17486 : 115335947 : extern "C" bool SymbolTable_GetProcedureParametersDefined (unsigned int sym, SymbolTable_ProcedureKind kind)
17487 : : {
17488 : 115335947 : SymbolTable_PtrToSymbol pSym;
17489 : :
17490 : 115335947 : AssertInRange (sym);
17491 : 115335947 : pSym = GetPsym (sym);
17492 : 115335947 : switch (pSym->SymbolType)
17493 : : {
17494 : : case SymbolTable_ErrorSym:
17495 : : return false;
17496 : 110568793 : break;
17497 : :
17498 : 110568793 : case SymbolTable_ProcedureSym:
17499 : 110568793 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ParamDefined;
17500 : 4767154 : break;
17501 : :
17502 : 4767154 : case SymbolTable_ProcTypeSym:
17503 : 4767154 : return true;
17504 : 0 : break;
17505 : :
17506 : :
17507 : 0 : default:
17508 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
17509 : : break;
17510 : : }
17511 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17512 : : __builtin_unreachable ();
17513 : : }
17514 : :
17515 : :
17516 : : /*
17517 : : PutProcedureDefined - the procedure symbol sym:kind is defined.
17518 : : */
17519 : :
17520 : 2985088 : extern "C" void SymbolTable_PutProcedureDefined (unsigned int sym, SymbolTable_ProcedureKind kind)
17521 : : {
17522 : 2985088 : SymbolTable_PtrToSymbol pSym;
17523 : :
17524 : 2985088 : AssertInRange (sym);
17525 : 2985088 : pSym = GetPsym (sym);
17526 : 2985088 : switch (pSym->SymbolType)
17527 : : {
17528 : : case SymbolTable_ErrorSym:
17529 : : break;
17530 : :
17531 : 2985088 : case SymbolTable_ProcedureSym:
17532 : 2985088 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].Defined = true;
17533 : 2985088 : break;
17534 : :
17535 : :
17536 : 0 : default:
17537 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
17538 : 2985088 : break;
17539 : : }
17540 : 2985088 : }
17541 : :
17542 : :
17543 : : /*
17544 : : GetProcedureDefined - returns true if procedure symbol sym:kind
17545 : : is defined.
17546 : : */
17547 : :
17548 : 25355784 : extern "C" bool SymbolTable_GetProcedureDefined (unsigned int sym, SymbolTable_ProcedureKind kind)
17549 : : {
17550 : 25355784 : SymbolTable_PtrToSymbol pSym;
17551 : :
17552 : 25355784 : AssertInRange (sym);
17553 : 25355784 : pSym = GetPsym (sym);
17554 : 25355784 : switch (pSym->SymbolType)
17555 : : {
17556 : : case SymbolTable_ErrorSym:
17557 : : return false;
17558 : 25355784 : break;
17559 : :
17560 : 25355784 : case SymbolTable_ProcedureSym:
17561 : 25355784 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].Defined;
17562 : 0 : break;
17563 : :
17564 : :
17565 : 0 : default:
17566 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure symbol", 28);
17567 : : break;
17568 : : }
17569 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17570 : : __builtin_unreachable ();
17571 : : }
17572 : :
17573 : :
17574 : : /*
17575 : : PutUseVarArgs - tell the symbol table that this procedure, Sym,
17576 : : uses varargs.
17577 : : The procedure _must_ be declared inside a
17578 : : DEFINITION FOR "C"
17579 : :
17580 : : */
17581 : :
17582 : 10740 : extern "C" void SymbolTable_PutUseVarArgs (unsigned int Sym)
17583 : : {
17584 : 10740 : SymbolTable_PtrToSymbol pSym;
17585 : :
17586 : 10740 : AssertInRange (Sym);
17587 : 10740 : pSym = GetPsym (Sym);
17588 : 10740 : switch (pSym->SymbolType)
17589 : : {
17590 : : case SymbolTable_ErrorSym:
17591 : : break;
17592 : :
17593 : 10740 : case SymbolTable_ProcedureSym:
17594 : : /* Currently can only declare var args in a definition module. */
17595 : 10740 : pSym->Procedure.Decl.array[SymbolTable_DefProcedure-SymbolTable_ProperProcedure].HasVarArgs = true;
17596 : 10740 : break;
17597 : :
17598 : 0 : case SymbolTable_ProcTypeSym:
17599 : 0 : pSym->ProcType.HasVarArgs = true;
17600 : 0 : break;
17601 : :
17602 : :
17603 : 0 : default:
17604 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
17605 : 10740 : break;
17606 : : }
17607 : 10740 : }
17608 : :
17609 : :
17610 : : /*
17611 : : UsesVarArgs - returns TRUE if procedure, Sym, uses varargs.
17612 : : The procedure _must_ be declared inside a
17613 : : DEFINITION FOR "C"
17614 : : */
17615 : :
17616 : 2277444 : extern "C" bool SymbolTable_UsesVarArgs (unsigned int Sym)
17617 : : {
17618 : 2277444 : SymbolTable_PtrToSymbol pSym;
17619 : :
17620 : 2277444 : AssertInRange (Sym);
17621 : 2277444 : pSym = GetPsym (Sym);
17622 : 2277444 : switch (pSym->SymbolType)
17623 : : {
17624 : : case SymbolTable_ErrorSym:
17625 : : return false;
17626 : 2225604 : break;
17627 : :
17628 : 2225604 : case SymbolTable_ProcedureSym:
17629 : : /* Currently can only declare var args in a definition module. */
17630 : 2225604 : return pSym->Procedure.Decl.array[SymbolTable_DefProcedure-SymbolTable_ProperProcedure].HasVarArgs;
17631 : 51840 : break;
17632 : :
17633 : 51840 : case SymbolTable_ProcTypeSym:
17634 : 51840 : return pSym->ProcType.HasVarArgs;
17635 : 0 : break;
17636 : :
17637 : :
17638 : 0 : default:
17639 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
17640 : : break;
17641 : : }
17642 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17643 : : __builtin_unreachable ();
17644 : : }
17645 : :
17646 : :
17647 : : /*
17648 : : PutUseOptArg - tell the symbol table that this procedure, Sym,
17649 : : uses an optarg.
17650 : : */
17651 : :
17652 : 16743 : extern "C" void SymbolTable_PutUseOptArg (unsigned int Sym, SymbolTable_ProcedureKind kind)
17653 : : {
17654 : 16743 : SymbolTable_PtrToSymbol pSym;
17655 : :
17656 : 16743 : AssertInRange (Sym);
17657 : 16743 : pSym = GetPsym (Sym);
17658 : 16743 : switch (pSym->SymbolType)
17659 : : {
17660 : : case SymbolTable_ErrorSym:
17661 : : break;
17662 : :
17663 : 16743 : case SymbolTable_ProcedureSym:
17664 : 16743 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].HasOptArg = true;
17665 : 16743 : break;
17666 : :
17667 : 0 : case SymbolTable_ProcTypeSym:
17668 : 0 : pSym->ProcType.HasOptArg = true;
17669 : 0 : break;
17670 : :
17671 : :
17672 : 0 : default:
17673 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
17674 : 16743 : break;
17675 : : }
17676 : 16743 : }
17677 : :
17678 : :
17679 : : /*
17680 : : UsesOptArg - returns TRUE if procedure, Sym, uses varargs.
17681 : : */
17682 : :
17683 : 179557 : extern "C" bool SymbolTable_UsesOptArg (unsigned int Sym, SymbolTable_ProcedureKind kind)
17684 : : {
17685 : 179557 : SymbolTable_PtrToSymbol pSym;
17686 : :
17687 : 179557 : AssertInRange (Sym);
17688 : 179557 : pSym = GetPsym (Sym);
17689 : 179557 : switch (pSym->SymbolType)
17690 : : {
17691 : : case SymbolTable_ErrorSym:
17692 : : return false;
17693 : 179557 : break;
17694 : :
17695 : 179557 : case SymbolTable_ProcedureSym:
17696 : 179557 : return pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].HasOptArg;
17697 : 0 : break;
17698 : :
17699 : 0 : case SymbolTable_ProcTypeSym:
17700 : 0 : return pSym->ProcType.HasOptArg;
17701 : 0 : break;
17702 : :
17703 : :
17704 : 0 : default:
17705 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
17706 : : break;
17707 : : }
17708 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
17709 : : __builtin_unreachable ();
17710 : : }
17711 : :
17712 : :
17713 : : /*
17714 : : PutOptArgInit - makes symbol, Sym, the initializer value to
17715 : : procedure, ProcSym.
17716 : : */
17717 : :
17718 : 13983 : extern "C" void SymbolTable_PutOptArgInit (unsigned int ProcSym, unsigned int Sym)
17719 : : {
17720 : 13983 : SymbolTable_PtrToSymbol pSym;
17721 : :
17722 : 13983 : AssertInRange (Sym);
17723 : 13983 : if (! (SymbolTable_IsError (ProcSym)))
17724 : : {
17725 : 13983 : pSym = GetPsym (ProcSym);
17726 : 13983 : switch (pSym->SymbolType)
17727 : : {
17728 : : case SymbolTable_ErrorSym:
17729 : : break;
17730 : :
17731 : 13983 : case SymbolTable_ProcedureSym:
17732 : 13983 : pSym->Procedure.OptArgInit = Sym;
17733 : 13983 : break;
17734 : :
17735 : 0 : case SymbolTable_ProcTypeSym:
17736 : 0 : pSym->ProcType.OptArgInit = Sym;
17737 : 0 : break;
17738 : :
17739 : :
17740 : 0 : default:
17741 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
17742 : : break;
17743 : : }
17744 : : }
17745 : 13983 : }
17746 : :
17747 : :
17748 : : /*
17749 : : GetOptArgInit - returns the initializer value to the optional parameter in
17750 : : procedure, ProcSym.
17751 : : */
17752 : :
17753 : 2578 : extern "C" unsigned int SymbolTable_GetOptArgInit (unsigned int ProcSym)
17754 : : {
17755 : 2578 : SymbolTable_PtrToSymbol pSym;
17756 : :
17757 : 2578 : if (! (SymbolTable_IsError (ProcSym)))
17758 : : {
17759 : 2578 : pSym = GetPsym (ProcSym);
17760 : 2578 : switch (pSym->SymbolType)
17761 : : {
17762 : : case SymbolTable_ErrorSym:
17763 : : break;
17764 : :
17765 : 2578 : case SymbolTable_ProcedureSym:
17766 : 2578 : return pSym->Procedure.OptArgInit;
17767 : 0 : break;
17768 : :
17769 : 0 : case SymbolTable_ProcTypeSym:
17770 : 0 : return pSym->ProcType.OptArgInit;
17771 : 0 : break;
17772 : :
17773 : :
17774 : 0 : default:
17775 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
17776 : : break;
17777 : : }
17778 : : }
17779 : : return SymbolTable_NulSym;
17780 : : /* static analysis guarentees a RETURN statement will be used before here. */
17781 : : __builtin_unreachable ();
17782 : : }
17783 : :
17784 : :
17785 : : /*
17786 : : MakePointer - returns a pointer symbol with PointerName.
17787 : : */
17788 : :
17789 : 137050 : extern "C" unsigned int SymbolTable_MakePointer (unsigned int tok, NameKey_Name PointerName)
17790 : : {
17791 : 137050 : unsigned int oaf;
17792 : 137050 : unsigned int sym;
17793 : :
17794 : 137050 : tok = CheckTok (tok, (const char *) "pointer", 7);
17795 : 137050 : sym = HandleHiddenOrDeclare (tok, PointerName, &oaf);
17796 : 137050 : FillInPointerFields (sym, PointerName, SymbolTable_GetCurrentScope (), oaf);
17797 : 137050 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
17798 : 137050 : return sym;
17799 : : /* static analysis guarentees a RETURN statement will be used before here. */
17800 : : __builtin_unreachable ();
17801 : : }
17802 : :
17803 : :
17804 : : /*
17805 : : PutPointer - gives a pointer symbol a type, PointerType.
17806 : : */
17807 : :
17808 : 168426 : extern "C" void SymbolTable_PutPointer (unsigned int Sym, unsigned int PointerType)
17809 : : {
17810 : 168426 : SymbolTable_PtrToSymbol pSym;
17811 : :
17812 : 168426 : pSym = GetPsym (Sym);
17813 : 168426 : switch (pSym->SymbolType)
17814 : : {
17815 : : case SymbolTable_ErrorSym:
17816 : : break;
17817 : :
17818 : 168426 : case SymbolTable_PointerSym:
17819 : 168426 : pSym->Pointer.Type = PointerType;
17820 : 168426 : break;
17821 : :
17822 : :
17823 : 0 : default:
17824 : 0 : M2Error_InternalError ((const char *) "expecting a Pointer symbol", 26);
17825 : 168426 : break;
17826 : : }
17827 : 168426 : }
17828 : :
17829 : :
17830 : : /*
17831 : : IsPointer - returns true is Sym is a pointer type symbol.
17832 : : */
17833 : :
17834 : 120366329 : extern "C" bool SymbolTable_IsPointer (unsigned int Sym)
17835 : : {
17836 : 120366329 : SymbolTable_PtrToSymbol pSym;
17837 : :
17838 : 120366329 : AssertInRange (Sym);
17839 : 120366329 : pSym = GetPsym (Sym);
17840 : 120366329 : return pSym->SymbolType == SymbolTable_PointerSym;
17841 : : /* static analysis guarentees a RETURN statement will be used before here. */
17842 : : __builtin_unreachable ();
17843 : : }
17844 : :
17845 : :
17846 : : /*
17847 : : IsRecord - returns true is Sym is a record type symbol.
17848 : : */
17849 : :
17850 : 139268071 : extern "C" bool SymbolTable_IsRecord (unsigned int Sym)
17851 : : {
17852 : 139268071 : SymbolTable_PtrToSymbol pSym;
17853 : :
17854 : 139268071 : AssertInRange (Sym);
17855 : 139268065 : pSym = GetPsym (Sym);
17856 : 139268065 : return pSym->SymbolType == SymbolTable_RecordSym;
17857 : : /* static analysis guarentees a RETURN statement will be used before here. */
17858 : : __builtin_unreachable ();
17859 : : }
17860 : :
17861 : :
17862 : : /*
17863 : : IsVarient - returns true if the symbol, Sym, is a
17864 : : varient symbol.
17865 : : */
17866 : :
17867 : 95927648 : extern "C" bool SymbolTable_IsVarient (unsigned int Sym)
17868 : : {
17869 : 95927648 : SymbolTable_PtrToSymbol pSym;
17870 : :
17871 : 95927648 : pSym = GetPsym (Sym);
17872 : 95927648 : return pSym->SymbolType == SymbolTable_VarientSym;
17873 : : /* static analysis guarentees a RETURN statement will be used before here. */
17874 : : __builtin_unreachable ();
17875 : : }
17876 : :
17877 : :
17878 : : /*
17879 : : IsFieldVarient - returns true if the symbol, Sym, is a
17880 : : varient field.
17881 : : */
17882 : :
17883 : 65295616 : extern "C" bool SymbolTable_IsFieldVarient (unsigned int Sym)
17884 : : {
17885 : 65295616 : SymbolTable_PtrToSymbol pSym;
17886 : :
17887 : 65295616 : pSym = GetPsym (Sym);
17888 : 65295616 : return pSym->SymbolType == SymbolTable_VarientFieldSym;
17889 : : /* static analysis guarentees a RETURN statement will be used before here. */
17890 : : __builtin_unreachable ();
17891 : : }
17892 : :
17893 : :
17894 : : /*
17895 : : IsFieldEnumeration - returns true if the symbol, Sym, is an
17896 : : enumeration field.
17897 : : */
17898 : :
17899 : 5556782 : extern "C" bool SymbolTable_IsFieldEnumeration (unsigned int Sym)
17900 : : {
17901 : 5556782 : SymbolTable_PtrToSymbol pSym;
17902 : :
17903 : 5556782 : pSym = GetPsym (Sym);
17904 : 5556782 : return pSym->SymbolType == SymbolTable_EnumerationFieldSym;
17905 : : /* static analysis guarentees a RETURN statement will be used before here. */
17906 : : __builtin_unreachable ();
17907 : : }
17908 : :
17909 : :
17910 : : /*
17911 : : IsArray - returns true is Sym is an array type symbol.
17912 : : */
17913 : :
17914 : 132217850 : extern "C" bool SymbolTable_IsArray (unsigned int Sym)
17915 : : {
17916 : 132217850 : SymbolTable_PtrToSymbol pSym;
17917 : :
17918 : 132217850 : AssertInRange (Sym);
17919 : 132217850 : pSym = GetPsym (Sym);
17920 : 132217850 : return pSym->SymbolType == SymbolTable_ArraySym;
17921 : : /* static analysis guarentees a RETURN statement will be used before here. */
17922 : : __builtin_unreachable ();
17923 : : }
17924 : :
17925 : :
17926 : : /*
17927 : : IsEnumeration - returns true if Sym is an enumeration symbol.
17928 : : */
17929 : :
17930 : 123158300 : extern "C" bool SymbolTable_IsEnumeration (unsigned int Sym)
17931 : : {
17932 : 123158300 : SymbolTable_PtrToSymbol pSym;
17933 : :
17934 : 123158300 : AssertInRange (Sym);
17935 : 123158300 : pSym = GetPsym (Sym);
17936 : 123158300 : return pSym->SymbolType == SymbolTable_EnumerationSym;
17937 : : /* static analysis guarentees a RETURN statement will be used before here. */
17938 : : __builtin_unreachable ();
17939 : : }
17940 : :
17941 : :
17942 : : /*
17943 : : IsSet - returns TRUE if Sym is a set symbol.
17944 : : */
17945 : :
17946 : 57585426 : extern "C" bool SymbolTable_IsSet (unsigned int Sym)
17947 : : {
17948 : 57585426 : SymbolTable_PtrToSymbol pSym;
17949 : :
17950 : 57585426 : AssertInRange (Sym);
17951 : 57585426 : pSym = GetPsym (Sym);
17952 : 57585426 : return pSym->SymbolType == SymbolTable_SetSym;
17953 : : /* static analysis guarentees a RETURN statement will be used before here. */
17954 : : __builtin_unreachable ();
17955 : : }
17956 : :
17957 : :
17958 : : /*
17959 : : IsHiddenType - returns TRUE if, Sym, is a Type and is also declared as a hidden type.
17960 : : */
17961 : :
17962 : 15916535 : extern "C" bool SymbolTable_IsHiddenType (unsigned int Sym)
17963 : : {
17964 : 15916535 : SymbolTable_PtrToSymbol pSym;
17965 : :
17966 : 15916535 : pSym = GetPsym (Sym);
17967 : 15916535 : switch (pSym->SymbolType)
17968 : : {
17969 : 15892719 : case SymbolTable_TypeSym:
17970 : 15892719 : return pSym->Type.IsHidden;
17971 : : break;
17972 : :
17973 : :
17974 : : default:
17975 : : return false;
17976 : : break;
17977 : : }
17978 : : /* static analysis guarentees a RETURN statement will be used before here. */
17979 : : __builtin_unreachable ();
17980 : : }
17981 : :
17982 : :
17983 : : /*
17984 : : IsOAFamily - returns TRUE if, Sym, is an OAFamily symbol.
17985 : : */
17986 : :
17987 : 0 : extern "C" bool SymbolTable_IsOAFamily (unsigned int Sym)
17988 : : {
17989 : 0 : SymbolTable_PtrToSymbol pSym;
17990 : :
17991 : 0 : AssertInRange (Sym);
17992 : 0 : pSym = GetPsym (Sym);
17993 : 0 : return pSym->SymbolType == SymbolTable_OAFamilySym;
17994 : : /* static analysis guarentees a RETURN statement will be used before here. */
17995 : : __builtin_unreachable ();
17996 : : }
17997 : :
17998 : :
17999 : : /*
18000 : : GetDimension - return the number of dimensions associated with
18001 : : this unbounded ARRAY parameter.
18002 : : */
18003 : :
18004 : 245586 : extern "C" unsigned int SymbolTable_GetDimension (unsigned int sym)
18005 : : {
18006 : 420880 : SymbolTable_PtrToSymbol pSym;
18007 : :
18008 : 420880 : pSym = GetPsym (sym);
18009 : 420880 : switch (pSym->SymbolType)
18010 : : {
18011 : 0 : case SymbolTable_PartialUnboundedSym:
18012 : 0 : return pSym->PartialUnbounded.NDim;
18013 : 239220 : break;
18014 : :
18015 : 239220 : case SymbolTable_UnboundedSym:
18016 : 239220 : return pSym->Unbounded.Dimensions;
18017 : 0 : break;
18018 : :
18019 : 0 : case SymbolTable_OAFamilySym:
18020 : 0 : return pSym->OAFamily.MaxDimensions;
18021 : 104164 : break;
18022 : :
18023 : 104164 : case SymbolTable_ParamSym:
18024 : 104164 : if (pSym->Param.IsUnbounded)
18025 : : {
18026 : 104164 : return SymbolTable_GetDimension (SymbolTable_GetType (sym));
18027 : : }
18028 : : else
18029 : : {
18030 : 0 : M2Error_InternalError ((const char *) "expecting unbounded paramater", 29);
18031 : : }
18032 : 71094 : break;
18033 : :
18034 : 71094 : case SymbolTable_VarParamSym:
18035 : 71094 : if (pSym->VarParam.IsUnbounded)
18036 : : {
18037 : 71094 : return SymbolTable_GetDimension (SymbolTable_GetType (sym));
18038 : : }
18039 : : else
18040 : : {
18041 : 0 : M2Error_InternalError ((const char *) "expecting unbounded paramater", 29);
18042 : : }
18043 : 6366 : break;
18044 : :
18045 : 6366 : case SymbolTable_ArraySym:
18046 : 6366 : return GetArrayDimension (sym);
18047 : 0 : break;
18048 : :
18049 : 0 : case SymbolTable_TypeSym:
18050 : 0 : return SymbolTable_GetDimension (SymbolTable_GetType (sym));
18051 : 36 : break;
18052 : :
18053 : 36 : case SymbolTable_VarSym:
18054 : 36 : return SymbolTable_GetDimension (SymbolTable_GetType (sym));
18055 : 0 : break;
18056 : :
18057 : :
18058 : 0 : default:
18059 : 0 : M2Error_InternalError ((const char *) "expecting PartialUnbounded", 26);
18060 : : break;
18061 : : }
18062 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18063 : : __builtin_unreachable ();
18064 : : }
18065 : :
18066 : :
18067 : : /*
18068 : : MakeOAFamily - makes an OAFamily symbol based on SimpleType.
18069 : : It returns the OAFamily symbol. A new symbol
18070 : : is created if one does not already exist for
18071 : : SimpleType.
18072 : : */
18073 : :
18074 : 500621 : extern "C" unsigned int SymbolTable_MakeOAFamily (unsigned int SimpleType)
18075 : : {
18076 : 500621 : SymbolTable_PtrToSymbol pSym;
18077 : 500621 : unsigned int sym;
18078 : :
18079 : 500621 : sym = SymbolTable_GetOAFamily (SimpleType);
18080 : 500621 : if (sym == SymbolTable_NulSym)
18081 : : {
18082 : 31316 : NewSym (&sym);
18083 : 31316 : pSym = GetPsym (sym);
18084 : 31316 : pSym->SymbolType = SymbolTable_OAFamilySym;
18085 : 31316 : pSym->OAFamily.MaxDimensions = 0;
18086 : 31316 : pSym->OAFamily.SimpleType = SimpleType;
18087 : 31316 : pSym->OAFamily.Dimensions = Indexing_InitIndex (1);
18088 : 31316 : PutOAFamily (SimpleType, sym);
18089 : : }
18090 : 500621 : return sym;
18091 : : /* static analysis guarentees a RETURN statement will be used before here. */
18092 : : __builtin_unreachable ();
18093 : : }
18094 : :
18095 : :
18096 : : /*
18097 : : GetOAFamily - returns the oafamily symbol associated with
18098 : : SimpleType.
18099 : : */
18100 : :
18101 : 92333067 : extern "C" unsigned int SymbolTable_GetOAFamily (unsigned int SimpleType)
18102 : : {
18103 : 92333067 : SymbolTable_PtrToSymbol pSym;
18104 : :
18105 : 92333067 : pSym = GetPsym (SimpleType);
18106 : 92333067 : switch (pSym->SymbolType)
18107 : : {
18108 : : case SymbolTable_ErrorSym:
18109 : : return SymbolTable_NulSym;
18110 : 6020463 : break;
18111 : :
18112 : 6020463 : case SymbolTable_RecordSym:
18113 : 6020463 : return pSym->Record.oafamily;
18114 : 1137005 : break;
18115 : :
18116 : 1137005 : case SymbolTable_SubrangeSym:
18117 : 1137005 : return pSym->Subrange.oafamily;
18118 : 2559549 : break;
18119 : :
18120 : 2559549 : case SymbolTable_EnumerationSym:
18121 : 2559549 : return pSym->Enumeration.oafamily;
18122 : 562008 : break;
18123 : :
18124 : 562008 : case SymbolTable_ArraySym:
18125 : 562008 : return pSym->Array.oafamily;
18126 : 2312271 : break;
18127 : :
18128 : 2312271 : case SymbolTable_ProcTypeSym:
18129 : 2312271 : return pSym->ProcType.oafamily;
18130 : 20067963 : break;
18131 : :
18132 : 20067963 : case SymbolTable_TypeSym:
18133 : 20067963 : return pSym->Type.oafamily;
18134 : 9329273 : break;
18135 : :
18136 : 9329273 : case SymbolTable_PointerSym:
18137 : 9329273 : return pSym->Pointer.oafamily;
18138 : 1078554 : break;
18139 : :
18140 : 1078554 : case SymbolTable_SetSym:
18141 : 1078554 : return pSym->Set.oafamily;
18142 : 95675 : break;
18143 : :
18144 : 95675 : case SymbolTable_UndefinedSym:
18145 : 95675 : return pSym->Undefined.oafamily;
18146 : : break;
18147 : :
18148 : :
18149 : : default:
18150 : : return SymbolTable_NulSym;
18151 : : break;
18152 : : }
18153 : : /* static analysis guarentees a RETURN statement will be used before here. */
18154 : : __builtin_unreachable ();
18155 : : }
18156 : :
18157 : :
18158 : : /*
18159 : : ForeachOAFamily - call, p[oaf, ndim, symbol] for every unbounded symbol,
18160 : : sym, in the oaf.
18161 : : */
18162 : :
18163 : 91832446 : extern "C" void SymbolTable_ForeachOAFamily (unsigned int sym, SymbolTable_FamilyOperation p)
18164 : : {
18165 : 91832446 : typedef unsigned int *ForeachOAFamily__T1;
18166 : :
18167 : 91832446 : SymbolTable_PtrToSymbol pSym;
18168 : 91832446 : unsigned int h;
18169 : 91832446 : unsigned int i;
18170 : 91832446 : ForeachOAFamily__T1 pc;
18171 : :
18172 : 91832446 : if (sym != SymbolTable_NulSym)
18173 : : {
18174 : 3780807 : pSym = GetPsym (sym);
18175 : 3780807 : switch (pSym->SymbolType)
18176 : : {
18177 : 3780807 : case SymbolTable_OAFamilySym:
18178 : 3780807 : h = Indexing_HighIndice (pSym->OAFamily.Dimensions);
18179 : 3780807 : i = 1;
18180 : 11382609 : while (i <= h)
18181 : : {
18182 : 3820995 : pc = static_cast<ForeachOAFamily__T1> (Indexing_GetIndice (pSym->OAFamily.Dimensions, i));
18183 : 3820995 : if (pc != NULL)
18184 : : {
18185 : 3820995 : (*p.proc) (sym, i, (*pc));
18186 : : }
18187 : 3820995 : i += 1;
18188 : : }
18189 : : break;
18190 : :
18191 : :
18192 : 0 : default:
18193 : 0 : M2Error_InternalError ((const char *) "expecting OAFamily symbol", 25);
18194 : : break;
18195 : : }
18196 : : }
18197 : 91832446 : }
18198 : :
18199 : :
18200 : : /*
18201 : : IsUnbounded - returns true if Sym is an unbounded symbol.
18202 : : */
18203 : :
18204 : 65687145 : extern "C" bool SymbolTable_IsUnbounded (unsigned int Sym)
18205 : : {
18206 : 65687145 : SymbolTable_PtrToSymbol pSym;
18207 : :
18208 : 65687145 : AssertInRange (Sym);
18209 : 65687145 : pSym = GetPsym (Sym);
18210 : 65687145 : return pSym->SymbolType == SymbolTable_UnboundedSym;
18211 : : /* static analysis guarentees a RETURN statement will be used before here. */
18212 : : __builtin_unreachable ();
18213 : : }
18214 : :
18215 : :
18216 : : /*
18217 : : GetUnbounded - returns the unbounded symbol associated with
18218 : : the OAFamily symbol, oaf, and the number of
18219 : : dimensions, ndim, of the open array.
18220 : : */
18221 : :
18222 : 500621 : extern "C" unsigned int SymbolTable_GetUnbounded (unsigned int oaf, unsigned int ndim)
18223 : : {
18224 : 500621 : SymbolTable_PtrToSymbol pSym;
18225 : :
18226 : 500621 : pSym = GetPsym (oaf);
18227 : 500621 : switch (pSym->SymbolType)
18228 : : {
18229 : 500621 : case SymbolTable_OAFamilySym:
18230 : 500621 : if (ndim > pSym->OAFamily.MaxDimensions)
18231 : : {
18232 : : return SymbolTable_NulSym;
18233 : : }
18234 : : else
18235 : : {
18236 : 469245 : return GetFromIndex (pSym->OAFamily.Dimensions, ndim);
18237 : : }
18238 : 0 : break;
18239 : :
18240 : :
18241 : 0 : default:
18242 : 0 : M2Error_InternalError ((const char *) "expecting OAFamily symbol", 25);
18243 : : break;
18244 : : }
18245 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18246 : : __builtin_unreachable ();
18247 : : }
18248 : :
18249 : :
18250 : : /*
18251 : : GetUnboundedRecordType - returns the record type used to
18252 : : implement the unbounded array.
18253 : : */
18254 : :
18255 : 4094527 : extern "C" unsigned int SymbolTable_GetUnboundedRecordType (unsigned int Sym)
18256 : : {
18257 : 4094527 : SymbolTable_PtrToSymbol pSym;
18258 : :
18259 : 4094527 : pSym = GetPsym (Sym);
18260 : 4094527 : switch (pSym->SymbolType)
18261 : : {
18262 : 4094527 : case SymbolTable_UnboundedSym:
18263 : 4094527 : return pSym->Unbounded.RecordType;
18264 : 0 : break;
18265 : :
18266 : :
18267 : 0 : default:
18268 : 0 : M2Error_InternalError ((const char *) "expecting an UnBounded symbol", 29);
18269 : : break;
18270 : : }
18271 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18272 : : __builtin_unreachable ();
18273 : : }
18274 : :
18275 : :
18276 : : /*
18277 : : GetUnboundedAddressOffset - returns the offset of the address field
18278 : : inside the record used to implement the
18279 : : unbounded type.
18280 : : */
18281 : :
18282 : 62418 : extern "C" unsigned int SymbolTable_GetUnboundedAddressOffset (unsigned int sym)
18283 : : {
18284 : 62418 : unsigned int field;
18285 : 62418 : unsigned int rec;
18286 : :
18287 : 62418 : rec = SymbolTable_GetUnboundedRecordType (sym);
18288 : 62418 : if (rec == SymbolTable_NulSym)
18289 : : {
18290 : 0 : M2Error_InternalError ((const char *) "expecting record type to be declared", 36);
18291 : : }
18292 : : else
18293 : : {
18294 : 62418 : field = SymbolTable_GetLocalSym (rec, NameKey_MakeKey ((const char *) "_m2_contents", 12));
18295 : 62418 : if (field == SymbolTable_NulSym)
18296 : : {
18297 : 0 : M2Error_InternalError ((const char *) "expecting address field to be present inside unbounded record", 61);
18298 : : }
18299 : : else
18300 : : {
18301 : 62418 : return field;
18302 : : }
18303 : : }
18304 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18305 : : __builtin_unreachable ();
18306 : : }
18307 : :
18308 : :
18309 : : /*
18310 : : GetUnboundedHighOffset - returns the offset of the high field
18311 : : inside the record used to implement the
18312 : : unbounded type.
18313 : : */
18314 : :
18315 : 84958 : extern "C" unsigned int SymbolTable_GetUnboundedHighOffset (unsigned int sym, unsigned int ndim)
18316 : : {
18317 : 84958 : unsigned int rec;
18318 : :
18319 : 84958 : rec = SymbolTable_GetUnboundedRecordType (sym);
18320 : 84958 : if (rec == SymbolTable_NulSym)
18321 : : {
18322 : 0 : M2Error_InternalError ((const char *) "expecting record type to be declared", 36);
18323 : : }
18324 : : else
18325 : : {
18326 : 84958 : return SymbolTable_GetLocalSym (rec, NameKey_makekey (DynamicStrings_string (DynamicStrings_Mark (FormatStrings_Sprintf1 (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "_m2_high_%d", 11)), (const unsigned char *) &ndim, (sizeof (ndim)-1))))));
18327 : : }
18328 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18329 : : __builtin_unreachable ();
18330 : : }
18331 : :
18332 : :
18333 : : /*
18334 : : MakeSubscript - makes a subscript Symbol.
18335 : : No name is required.
18336 : : */
18337 : :
18338 : 85354 : extern "C" unsigned int SymbolTable_MakeSubscript (void)
18339 : : {
18340 : 85354 : SymbolTable_PtrToSymbol pSym;
18341 : 85354 : unsigned int Sym;
18342 : :
18343 : 85354 : NewSym (&Sym);
18344 : 85354 : pSym = GetPsym (Sym);
18345 : 85354 : pSym->SymbolType = SymbolTable_SubscriptSym;
18346 : 85354 : pSym->Subscript.Type = SymbolTable_NulSym; /* Index to a subrange symbol. */
18347 : 85354 : pSym->Subscript.Size = M2ALU_InitValue (); /* Size of this indice in*Size */
18348 : 85354 : pSym->Subscript.Offset = M2ALU_InitValue (); /* Offset at runtime of symbol */
18349 : 85354 : InitWhereDeclared (&pSym->Subscript.At); /* Declared here */
18350 : 85354 : return Sym;
18351 : : /* static analysis guarentees a RETURN statement will be used before here. */
18352 : : __builtin_unreachable ();
18353 : : }
18354 : :
18355 : :
18356 : : /*
18357 : : PutSubscript - gives a subscript symbol a type, SimpleType.
18358 : : */
18359 : :
18360 : 85354 : extern "C" void SymbolTable_PutSubscript (unsigned int Sym, unsigned int SimpleType)
18361 : : {
18362 : 85354 : SymbolTable_PtrToSymbol pSym;
18363 : :
18364 : 85354 : pSym = GetPsym (Sym);
18365 : 85354 : switch (pSym->SymbolType)
18366 : : {
18367 : : case SymbolTable_ErrorSym:
18368 : : break;
18369 : :
18370 : 85354 : case SymbolTable_SubscriptSym:
18371 : 85354 : pSym->Subscript.Type = SimpleType;
18372 : 85354 : break;
18373 : :
18374 : :
18375 : 0 : default:
18376 : 0 : M2Error_InternalError ((const char *) "expecting a SubScript symbol", 28);
18377 : 85354 : break;
18378 : : }
18379 : 85354 : }
18380 : :
18381 : :
18382 : : /*
18383 : : MakeUnbounded - makes an unbounded array Symbol.
18384 : : ndim is the number of dimensions required.
18385 : : No name is required.
18386 : : */
18387 : :
18388 : 500621 : extern "C" unsigned int SymbolTable_MakeUnbounded (unsigned int tok, unsigned int SimpleType, unsigned int ndim)
18389 : : {
18390 : 500621 : unsigned int sym;
18391 : 500621 : unsigned int oaf;
18392 : :
18393 : 500621 : tok = CheckTok (tok, (const char *) "unbounded", 9);
18394 : 500621 : oaf = SymbolTable_MakeOAFamily (SimpleType);
18395 : 500621 : sym = SymbolTable_GetUnbounded (oaf, ndim);
18396 : 500621 : if (sym == SymbolTable_NulSym)
18397 : : {
18398 : 31376 : NewSym (&sym);
18399 : 31376 : if (SymbolTable_IsUnknown (SimpleType))
18400 : : {
18401 : 0 : PutPartialUnbounded (sym, SimpleType, ndim);
18402 : : }
18403 : : else
18404 : : {
18405 : 31376 : FillInUnboundedFields (tok, sym, SimpleType, ndim);
18406 : : }
18407 : 31376 : PutUnbounded (oaf, sym, ndim);
18408 : : }
18409 : 500621 : return sym;
18410 : : /* static analysis guarentees a RETURN statement will be used before here. */
18411 : : __builtin_unreachable ();
18412 : : }
18413 : :
18414 : :
18415 : : /*
18416 : : NoOfElements - Returns the number of elements in array Sym,
18417 : : or the number of elements in an enumeration Sym or
18418 : : the number of interface symbols in an Interface list.
18419 : : */
18420 : :
18421 : 244 : extern "C" unsigned int SymbolTable_NoOfElements (unsigned int Sym)
18422 : : {
18423 : 244 : SymbolTable_PtrToSymbol pSym;
18424 : 244 : unsigned int n;
18425 : :
18426 : 244 : pSym = GetPsym (Sym);
18427 : 244 : switch (pSym->SymbolType)
18428 : : {
18429 : : case SymbolTable_ErrorSym:
18430 : : n = 0;
18431 : : break;
18432 : :
18433 : 244 : case SymbolTable_EnumerationSym:
18434 : : /*
18435 : : ArraySym ,
18436 : : UnboundedSym : n := 1 | Standard language limitation
18437 : : */
18438 : 244 : n = pSym->Enumeration.NoOfElements;
18439 : 244 : break;
18440 : :
18441 : 0 : case SymbolTable_InterfaceSym:
18442 : 0 : n = Indexing_HighIndice (pSym->Interface.Parameters);
18443 : 0 : break;
18444 : :
18445 : :
18446 : 0 : default:
18447 : 0 : M2Error_InternalError ((const char *) "expecting an Array or UnBounded symbol", 38);
18448 : 244 : break;
18449 : : }
18450 : 244 : return n;
18451 : : /* static analysis guarentees a RETURN statement will be used before here. */
18452 : : __builtin_unreachable ();
18453 : : }
18454 : :
18455 : :
18456 : : /*
18457 : : PutArray - places a type symbol into an arraysym.
18458 : : */
18459 : :
18460 : 85354 : extern "C" void SymbolTable_PutArray (unsigned int arraysym, unsigned int typesym)
18461 : : {
18462 : 85354 : SymbolTable_PtrToSymbol pSym;
18463 : :
18464 : 85354 : pSym = GetPsym (arraysym);
18465 : 85354 : switch (pSym->SymbolType)
18466 : : {
18467 : : case SymbolTable_ErrorSym:
18468 : : break;
18469 : :
18470 : 85354 : case SymbolTable_ArraySym:
18471 : 85354 : pSym->Array.Type = typesym; /* The ARRAY OF typesym. */
18472 : 85354 : break;
18473 : :
18474 : :
18475 : 0 : default:
18476 : 0 : M2Error_InternalError ((const char *) "expecting an Array symbol", 25);
18477 : 85354 : break;
18478 : : }
18479 : 85354 : }
18480 : :
18481 : :
18482 : : /*
18483 : : ResolveImports - it examines the import list of all inner modules
18484 : : and resolves all relative imports.
18485 : : */
18486 : :
18487 : 63377 : extern "C" void SymbolTable_ResolveImports (void)
18488 : : {
18489 : 63377 : unsigned int scope;
18490 : :
18491 : 63377 : scope = SymbolTable_GetCurrentScope ();
18492 : 63377 : if (DebugUnknowns)
18493 : : {
18494 : : SymbolTable_DisplayTrees (scope);
18495 : : }
18496 : 63377 : SymbolTable_ForeachProcedureDo (scope, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) ResolveRelativeImport});
18497 : 63377 : SymbolTable_ForeachInnerModuleDo (scope, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) ResolveRelativeImport});
18498 : 63377 : }
18499 : :
18500 : :
18501 : : /*
18502 : : ResolveConstructorTypes - to be called at the end of pass three. Its
18503 : : purpose is to fix up all constructors whose
18504 : : types are unknown.
18505 : : */
18506 : :
18507 : 13957 : extern "C" void SymbolTable_ResolveConstructorTypes (void)
18508 : : {
18509 : 35241 : bool finished;
18510 : 35241 : unsigned int i;
18511 : 35241 : unsigned int n;
18512 : 35241 : unsigned int s;
18513 : :
18514 : 35241 : do {
18515 : 35241 : n = Lists_NoOfItemsInList (UnresolvedConstructorType);
18516 : 35241 : finished = true;
18517 : 35241 : i = 1;
18518 : 91772 : while (i <= n)
18519 : : {
18520 : 21290 : s = static_cast<unsigned int> (Lists_GetItemFromList (UnresolvedConstructorType, i));
18521 : 21290 : M2Debug_Assert (SymbolTable_IsConstructor (s));
18522 : 21290 : if (CanResolveConstructor (s))
18523 : : {
18524 : 21284 : finished = false;
18525 : 21284 : Lists_RemoveItemFromList (UnresolvedConstructorType, s);
18526 : 21284 : i = n;
18527 : : }
18528 : 21290 : i += 1;
18529 : : }
18530 : 35241 : } while (! (finished));
18531 : 13957 : CheckAllConstructorsResolved ();
18532 : 13951 : }
18533 : :
18534 : :
18535 : : /*
18536 : : AddNameToScope - adds a Name, n, to the list of objects declared at the
18537 : : current scope.
18538 : : */
18539 : :
18540 : 4672157 : extern "C" void SymbolTable_AddNameToScope (NameKey_Name n)
18541 : : {
18542 : 4672157 : SymbolTable_PtrToSymbol pSym;
18543 : 4672157 : unsigned int scope;
18544 : :
18545 : 4672157 : scope = SymbolTable_GetCurrentScope ();
18546 : 4672157 : pSym = GetPsym (scope);
18547 : 4672157 : switch (pSym->SymbolType)
18548 : : {
18549 : 828497 : case SymbolTable_ProcedureSym:
18550 : 828497 : AddNameTo (pSym->Procedure.NamedObjects, MakeObject (n));
18551 : 828497 : break;
18552 : :
18553 : 43404 : case SymbolTable_ModuleSym:
18554 : 43404 : AddNameTo (pSym->Module.NamedObjects, MakeObject (n));
18555 : 43404 : break;
18556 : :
18557 : 3800256 : case SymbolTable_DefImpSym:
18558 : 3800256 : AddNameTo (pSym->DefImp.NamedObjects, MakeObject (n));
18559 : 3800256 : break;
18560 : :
18561 : :
18562 : 0 : default:
18563 : 0 : M2Error_InternalError ((const char *) "expecting - DefImp", 18);
18564 : 4672157 : break;
18565 : : }
18566 : 4672157 : }
18567 : :
18568 : :
18569 : : /*
18570 : : AddNameToImportList - adds a Name, n, to the import list of the current
18571 : : module.
18572 : : */
18573 : :
18574 : 162 : extern "C" void SymbolTable_AddNameToImportList (NameKey_Name n)
18575 : : {
18576 : 162 : SymbolTable_PtrToSymbol pSym;
18577 : 162 : unsigned int scope;
18578 : :
18579 : 162 : scope = SymbolTable_GetCurrentScope ();
18580 : 162 : pSym = GetPsym (scope);
18581 : 162 : switch (pSym->SymbolType)
18582 : : {
18583 : 162 : case SymbolTable_ModuleSym:
18584 : 162 : AddNameTo (pSym->Module.NamedImports, MakeObject (n));
18585 : 162 : break;
18586 : :
18587 : 0 : case SymbolTable_DefImpSym:
18588 : 0 : AddNameTo (pSym->DefImp.NamedImports, MakeObject (n));
18589 : 0 : break;
18590 : :
18591 : :
18592 : 0 : default:
18593 : 0 : M2Error_InternalError ((const char *) "expecting - DefImp or Module symbol", 35);
18594 : 162 : break;
18595 : : }
18596 : 162 : }
18597 : :
18598 : :
18599 : : /*
18600 : : GetScope - returns the declaration scope of the symbol.
18601 : : */
18602 : :
18603 : 49727418 : extern "C" unsigned int SymbolTable_GetScope (unsigned int Sym)
18604 : : {
18605 : 49727478 : SymbolTable_PtrToSymbol pSym;
18606 : :
18607 : 49727478 : pSym = GetPsym (Sym);
18608 : 49727478 : switch (pSym->SymbolType)
18609 : : {
18610 : 0 : case SymbolTable_ErrorSym:
18611 : 0 : return pSym->Error.Scope;
18612 : : break;
18613 : :
18614 : : case SymbolTable_DefImpSym:
18615 : : return SymbolTable_NulSym;
18616 : 2515498 : break;
18617 : :
18618 : 2515498 : case SymbolTable_ModuleSym:
18619 : 2515498 : return pSym->Module.Scope;
18620 : 2678404 : break;
18621 : :
18622 : 2678404 : case SymbolTable_VarSym:
18623 : 2678404 : return pSym->Var.Scope;
18624 : 28460601 : break;
18625 : :
18626 : 28460601 : case SymbolTable_ProcedureSym:
18627 : 28460601 : return pSym->Procedure.Scope;
18628 : 209446 : break;
18629 : :
18630 : 209446 : case SymbolTable_ProcTypeSym:
18631 : 209446 : return pSym->ProcType.Scope;
18632 : 818976 : break;
18633 : :
18634 : 818976 : case SymbolTable_RecordFieldSym:
18635 : 818976 : return pSym->RecordField.Scope;
18636 : 336 : break;
18637 : :
18638 : 336 : case SymbolTable_VarientSym:
18639 : 336 : return pSym->Varient.Scope;
18640 : 1476 : break;
18641 : :
18642 : 1476 : case SymbolTable_VarientFieldSym:
18643 : 1476 : return pSym->VarientField.Scope;
18644 : 88998 : break;
18645 : :
18646 : 88998 : case SymbolTable_EnumerationSym:
18647 : 88998 : return pSym->Enumeration.Scope;
18648 : 1628928 : break;
18649 : :
18650 : 1628928 : case SymbolTable_EnumerationFieldSym:
18651 : 1628928 : return pSym->EnumerationField.Scope;
18652 : 176043 : break;
18653 : :
18654 : 176043 : case SymbolTable_SubrangeSym:
18655 : 176043 : return pSym->Subrange.Scope;
18656 : 1286 : break;
18657 : :
18658 : 1286 : case SymbolTable_ArraySym:
18659 : 1286 : return pSym->Array.Scope;
18660 : 127904 : break;
18661 : :
18662 : 127904 : case SymbolTable_TypeSym:
18663 : 127904 : return pSym->Type.Scope;
18664 : 76174 : break;
18665 : :
18666 : 76174 : case SymbolTable_PointerSym:
18667 : 76174 : return pSym->Pointer.Scope;
18668 : 513790 : break;
18669 : :
18670 : 513790 : case SymbolTable_RecordSym:
18671 : 513790 : return pSym->Record.Scope;
18672 : 46845 : break;
18673 : :
18674 : 46845 : case SymbolTable_SetSym:
18675 : 46845 : return pSym->Set.Scope;
18676 : 0 : break;
18677 : :
18678 : 0 : case SymbolTable_UnboundedSym:
18679 : 0 : return pSym->Unbounded.Scope;
18680 : 0 : break;
18681 : :
18682 : 0 : case SymbolTable_ConstLitSym:
18683 : 0 : return pSym->ConstLit.Scope;
18684 : 0 : break;
18685 : :
18686 : 0 : case SymbolTable_ConstStringSym:
18687 : 0 : return pSym->ConstString.Scope;
18688 : 222 : break;
18689 : :
18690 : 222 : case SymbolTable_ConstVarSym:
18691 : 222 : return pSym->ConstVar.Scope;
18692 : 108 : break;
18693 : :
18694 : 108 : case SymbolTable_ParamSym:
18695 : 108 : if (pSym->Param.ShadowVar == SymbolTable_NulSym)
18696 : : {
18697 : : return SymbolTable_NulSym;
18698 : : }
18699 : : else
18700 : : {
18701 : : return SymbolTable_GetScope (pSym->Param.ShadowVar);
18702 : : }
18703 : 12 : break;
18704 : :
18705 : 12 : case SymbolTable_VarParamSym:
18706 : 12 : if (pSym->VarParam.ShadowVar == SymbolTable_NulSym)
18707 : : {
18708 : : return SymbolTable_NulSym;
18709 : : }
18710 : : else
18711 : : {
18712 : : return SymbolTable_GetScope (pSym->VarParam.ShadowVar);
18713 : : }
18714 : : break;
18715 : :
18716 : : case SymbolTable_UndefinedSym:
18717 : : return SymbolTable_NulSym;
18718 : 0 : break;
18719 : :
18720 : 0 : case SymbolTable_PartialUnboundedSym:
18721 : 0 : M2Error_InternalError ((const char *) "should not be requesting the scope of a PartialUnbounded symbol", 63);
18722 : 0 : break;
18723 : :
18724 : :
18725 : 0 : default:
18726 : 0 : M2Error_InternalError ((const char *) "not implemented yet", 19);
18727 : : break;
18728 : : }
18729 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18730 : : __builtin_unreachable ();
18731 : : }
18732 : :
18733 : :
18734 : : /*
18735 : : GetModuleScope - returns the module scope of symbol, sym.
18736 : : If sym was declared within a nested procedure
18737 : : then return the module which defines the
18738 : : procedure.
18739 : : */
18740 : :
18741 : 337379 : extern "C" unsigned int SymbolTable_GetModuleScope (unsigned int sym)
18742 : : {
18743 : 337379 : unsigned int mod;
18744 : :
18745 : 337379 : mod = SymbolTable_GetScope (sym);
18746 : 675814 : while (((mod != SymbolTable_NulSym) && (! (SymbolTable_IsDefImp (mod)))) && (! (SymbolTable_IsModule (mod))))
18747 : : {
18748 : 1056 : mod = SymbolTable_GetScope (mod);
18749 : : }
18750 : 337379 : return mod;
18751 : : /* static analysis guarentees a RETURN statement will be used before here. */
18752 : : __builtin_unreachable ();
18753 : : }
18754 : :
18755 : :
18756 : : /*
18757 : : GetProcedureScope - returns the innermost procedure (if any)
18758 : : in which the symbol, sym, resides.
18759 : : A module inside the procedure is skipped
18760 : : over.
18761 : : */
18762 : :
18763 : 326780 : extern "C" unsigned int SymbolTable_GetProcedureScope (unsigned int sym)
18764 : : {
18765 : 658168 : while ((sym != SymbolTable_NulSym) && (! (SymbolTable_IsProcedure (sym))))
18766 : : {
18767 : 331388 : sym = SymbolTable_GetScope (sym);
18768 : : }
18769 : 326780 : if ((sym != SymbolTable_NulSym) && (SymbolTable_IsProcedure (sym)))
18770 : : {
18771 : : return sym;
18772 : : }
18773 : : else
18774 : : {
18775 : 324446 : return SymbolTable_NulSym;
18776 : : }
18777 : : /* static analysis guarentees a RETURN statement will be used before here. */
18778 : : __builtin_unreachable ();
18779 : : }
18780 : :
18781 : :
18782 : : /*
18783 : : IsModuleWithinProcedure - returns TRUE if module, sym, is
18784 : : inside a procedure.
18785 : : */
18786 : :
18787 : 223756 : extern "C" bool SymbolTable_IsModuleWithinProcedure (unsigned int sym)
18788 : : {
18789 : 223756 : return (SymbolTable_GetProcedureScope (sym)) != SymbolTable_NulSym;
18790 : : /* static analysis guarentees a RETURN statement will be used before here. */
18791 : : __builtin_unreachable ();
18792 : : }
18793 : :
18794 : :
18795 : : /*
18796 : : GetParent - returns the parent of symbol, Sym.
18797 : : */
18798 : :
18799 : 96842 : extern "C" unsigned int SymbolTable_GetParent (unsigned int Sym)
18800 : : {
18801 : 96842 : SymbolTable_PtrToSymbol pSym;
18802 : :
18803 : 96842 : pSym = GetPsym (Sym);
18804 : 96842 : switch (pSym->SymbolType)
18805 : : {
18806 : 6 : case SymbolTable_ErrorSym:
18807 : 6 : M2Error_ErrorAbort0 ((const char *) "", 0);
18808 : 14418 : break;
18809 : :
18810 : 14418 : case SymbolTable_VarientSym:
18811 : 14418 : return pSym->Varient.Parent;
18812 : 54894 : break;
18813 : :
18814 : 54894 : case SymbolTable_VarientFieldSym:
18815 : 54894 : return pSym->VarientField.Parent;
18816 : 27524 : break;
18817 : :
18818 : 27524 : case SymbolTable_RecordFieldSym:
18819 : 27524 : return pSym->RecordField.Parent;
18820 : 0 : break;
18821 : :
18822 : 0 : case SymbolTable_EnumerationFieldSym:
18823 : 0 : return pSym->EnumerationField.Type;
18824 : 0 : break;
18825 : :
18826 : :
18827 : 0 : default:
18828 : 0 : M2Error_InternalError ((const char *) "not implemented yet", 19);
18829 : : break;
18830 : : }
18831 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18832 : : __builtin_unreachable ();
18833 : : }
18834 : :
18835 : :
18836 : : /*
18837 : : IsRecordField - returns true if Sym is a record field.
18838 : : */
18839 : :
18840 : 131718017 : extern "C" bool SymbolTable_IsRecordField (unsigned int Sym)
18841 : : {
18842 : 131718017 : SymbolTable_PtrToSymbol pSym;
18843 : :
18844 : 131718017 : pSym = GetPsym (Sym);
18845 : 131718017 : return pSym->SymbolType == SymbolTable_RecordFieldSym;
18846 : : /* static analysis guarentees a RETURN statement will be used before here. */
18847 : : __builtin_unreachable ();
18848 : : }
18849 : :
18850 : :
18851 : : /*
18852 : : MakeProcType - returns a procedure type symbol with ProcTypeName.
18853 : : */
18854 : :
18855 : 3324823 : extern "C" unsigned int SymbolTable_MakeProcType (unsigned int tok, NameKey_Name ProcTypeName)
18856 : : {
18857 : 3324823 : SymbolTable_PtrToSymbol pSym;
18858 : 3324823 : unsigned int oaf;
18859 : 3324823 : unsigned int sym;
18860 : :
18861 : 3324823 : tok = CheckTok (tok, (const char *) "proctype", 8);
18862 : 3324823 : sym = HandleHiddenOrDeclare (tok, ProcTypeName, &oaf);
18863 : 3324823 : if (! (SymbolTable_IsError (sym)))
18864 : : {
18865 : 3324823 : pSym = GetPsym (sym);
18866 : 3324823 : pSym->SymbolType = SymbolTable_ProcTypeSym;
18867 : 3324823 : switch (pSym->SymbolType)
18868 : : {
18869 : 3324823 : case SymbolTable_ProcTypeSym:
18870 : 3324823 : pSym->ProcType.ReturnType = SymbolTable_NulSym;
18871 : 3324823 : pSym->ProcType.name = ProcTypeName;
18872 : 3324823 : Lists_InitList (&pSym->ProcType.ListOfParam);
18873 : 3324823 : pSym->ProcType.HasVarArgs = false; /* Does this proc type use ... ? */
18874 : 3324823 : pSym->ProcType.HasOptArg = false; /* Does this proc type use [ ] ? */
18875 : 3324823 : pSym->ProcType.OptArgInit = SymbolTable_NulSym; /* The optarg initial value. */
18876 : 3324823 : pSym->ProcType.ReturnOptional = false; /* Is the return value optional? */
18877 : 3324823 : pSym->ProcType.ReturnTypeTok = M2LexBuf_UnknownTokenNo; /* Is the return value optional? */
18878 : 3324823 : pSym->ProcType.Scope = SymbolTable_GetCurrentScope ();
18879 : : /* scope of procedure. */
18880 : 3324823 : pSym->ProcType.Size = M2ALU_InitValue ();
18881 : 3324823 : pSym->ProcType.TotalParamSize = M2ALU_InitValue (); /* size of all parameters */
18882 : 3324823 : pSym->ProcType.oafamily = oaf; /* The oa family for this symbol */
18883 : 3324823 : InitWhereDeclaredTok (tok, &pSym->ProcType.At); /* Declared here */
18884 : 3324823 : break;
18885 : :
18886 : :
18887 : : default:
18888 : : M2Error_InternalError ((const char *) "expecting ProcType symbol", 25);
18889 : 3324823 : break;
18890 : : }
18891 : : }
18892 : 3324823 : SymbolTable_ForeachOAFamily (oaf, (SymbolTable_FamilyOperation) {(SymbolTable_FamilyOperation_t) doFillInOAFamily});
18893 : 3324823 : return sym;
18894 : : /* static analysis guarentees a RETURN statement will be used before here. */
18895 : : __builtin_unreachable ();
18896 : : }
18897 : :
18898 : :
18899 : : /*
18900 : : PutProcTypeParam - Places a Non VAR parameter ParamName with type
18901 : : ParamType into ProcType Sym.
18902 : : */
18903 : :
18904 : 5373179 : extern "C" void SymbolTable_PutProcTypeParam (unsigned int Sym, unsigned int ParamType, bool isUnbounded)
18905 : : {
18906 : 5373179 : SymbolTable_PtrToSymbol pSym;
18907 : 5373179 : unsigned int ParSym;
18908 : :
18909 : 5373179 : NewSym (&ParSym);
18910 : 5373179 : pSym = GetPsym (ParSym);
18911 : 5373179 : pSym->SymbolType = SymbolTable_ParamSym;
18912 : 5373179 : pSym->Param.name = NameKey_NulName;
18913 : 5373179 : pSym->Param.Type = ParamType;
18914 : 5373179 : pSym->Param.IsUnbounded = isUnbounded;
18915 : 5373179 : pSym->Param.ShadowVar = SymbolTable_NulSym;
18916 : 5373179 : InitWhereDeclared (&pSym->Param.At);
18917 : 5373179 : AddParameter (Sym, SymbolTable_ProperProcedure, ParSym);
18918 : 5373179 : }
18919 : :
18920 : :
18921 : : /*
18922 : : PutProcTypeVarParam - Places a Non VAR parameter ParamName with type
18923 : : ParamType into ProcType Sym.
18924 : : */
18925 : :
18926 : 412414 : extern "C" void SymbolTable_PutProcTypeVarParam (unsigned int Sym, unsigned int ParamType, bool isUnbounded)
18927 : : {
18928 : 412414 : SymbolTable_PtrToSymbol pSym;
18929 : 412414 : unsigned int ParSym;
18930 : :
18931 : 412414 : NewSym (&ParSym);
18932 : 412414 : pSym = GetPsym (ParSym);
18933 : 412414 : pSym->SymbolType = SymbolTable_VarParamSym;
18934 : 412414 : pSym->Param.name = NameKey_NulName;
18935 : 412414 : pSym->Param.Type = ParamType;
18936 : 412414 : pSym->Param.IsUnbounded = isUnbounded;
18937 : 412414 : pSym->Param.ShadowVar = SymbolTable_NulSym;
18938 : 412414 : InitWhereDeclared (&pSym->Param.At);
18939 : 412414 : AddParameter (Sym, SymbolTable_ProperProcedure, ParSym);
18940 : 412414 : }
18941 : :
18942 : :
18943 : : /*
18944 : : IsProcType - returns true if Sym is a ProcType Symbol.
18945 : : */
18946 : :
18947 : 98565426 : extern "C" bool SymbolTable_IsProcType (unsigned int Sym)
18948 : : {
18949 : 98565426 : SymbolTable_PtrToSymbol pSym;
18950 : :
18951 : 98565426 : pSym = GetPsym (Sym);
18952 : 98565426 : return pSym->SymbolType == SymbolTable_ProcTypeSym;
18953 : : /* static analysis guarentees a RETURN statement will be used before here. */
18954 : : __builtin_unreachable ();
18955 : : }
18956 : :
18957 : :
18958 : : /*
18959 : : IsVar - returns true if Sym is a Var Symbol.
18960 : : */
18961 : :
18962 : 79280382 : extern "C" bool SymbolTable_IsVar (unsigned int Sym)
18963 : : {
18964 : 79280382 : SymbolTable_PtrToSymbol pSym;
18965 : :
18966 : 79280382 : pSym = GetPsym (Sym);
18967 : 79280382 : return pSym->SymbolType == SymbolTable_VarSym;
18968 : : /* static analysis guarentees a RETURN statement will be used before here. */
18969 : : __builtin_unreachable ();
18970 : : }
18971 : :
18972 : :
18973 : : /*
18974 : : IsVarConst - returns the IsConst field indicating the variable is read only.
18975 : : */
18976 : :
18977 : 261151 : extern "C" bool SymbolTable_IsVarConst (unsigned int sym)
18978 : : {
18979 : 261151 : SymbolTable_PtrToSymbol pSym;
18980 : :
18981 : 261151 : pSym = GetPsym (sym);
18982 : 261151 : switch (pSym->SymbolType)
18983 : : {
18984 : 261151 : case SymbolTable_VarSym:
18985 : 261151 : return pSym->Var.IsConst;
18986 : 0 : break;
18987 : :
18988 : :
18989 : 0 : default:
18990 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
18991 : : break;
18992 : : }
18993 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
18994 : : __builtin_unreachable ();
18995 : : }
18996 : :
18997 : :
18998 : : /*
18999 : : IsConst - returns true if Sym contains a constant value.
19000 : : */
19001 : :
19002 : 117711201 : extern "C" bool SymbolTable_IsConst (unsigned int Sym)
19003 : : {
19004 : 117711201 : if (SymbolTable_IsConstructor (Sym))
19005 : : {
19006 : 2058706 : return SymbolTable_IsConstructorConstant (Sym);
19007 : : }
19008 : : else
19009 : : {
19010 : 115652495 : return DoIsConst (Sym);
19011 : : }
19012 : : /* static analysis guarentees a RETURN statement will be used before here. */
19013 : : __builtin_unreachable ();
19014 : : }
19015 : :
19016 : :
19017 : : /*
19018 : : IsConstString - returns whether sym is a conststring of any variant.
19019 : : */
19020 : :
19021 : 7240783 : extern "C" bool SymbolTable_IsConstString (unsigned int sym)
19022 : : {
19023 : 7240783 : SymbolTable_PtrToSymbol pSym;
19024 : :
19025 : 7240783 : pSym = GetPsym (sym);
19026 : 7240783 : return pSym->SymbolType == SymbolTable_ConstStringSym;
19027 : : /* static analysis guarentees a RETURN statement will be used before here. */
19028 : : __builtin_unreachable ();
19029 : : }
19030 : :
19031 : :
19032 : : /*
19033 : : IsConstStringNulTerminated - returns TRUE if the constant string, sym,
19034 : : should be created with a nul terminator.
19035 : : */
19036 : :
19037 : 0 : extern "C" bool SymbolTable_IsConstStringNulTerminated (unsigned int sym)
19038 : : {
19039 : 0 : SymbolTable_PtrToSymbol pSym;
19040 : :
19041 : 0 : pSym = GetPsym (sym);
19042 : 0 : switch (pSym->SymbolType)
19043 : : {
19044 : 0 : case SymbolTable_ConstStringSym:
19045 : 0 : return (pSym->ConstString.StringVariant == SymbolTable_m2nulstr) || (pSym->ConstString.StringVariant == SymbolTable_cnulstr);
19046 : 0 : break;
19047 : :
19048 : :
19049 : 0 : default:
19050 : 0 : M2Error_InternalError ((const char *) "expecting ConstStringSym", 24);
19051 : : break;
19052 : : }
19053 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19054 : : __builtin_unreachable ();
19055 : : }
19056 : :
19057 : :
19058 : : /*
19059 : : IsConstLit - returns true if Sym is a literal constant.
19060 : : */
19061 : :
19062 : 6011680 : extern "C" bool SymbolTable_IsConstLit (unsigned int Sym)
19063 : : {
19064 : 6011680 : SymbolTable_PtrToSymbol pSym;
19065 : :
19066 : 6011680 : pSym = GetPsym (Sym);
19067 : 6011668 : return pSym->SymbolType == SymbolTable_ConstLitSym;
19068 : : /* static analysis guarentees a RETURN statement will be used before here. */
19069 : : __builtin_unreachable ();
19070 : : }
19071 : :
19072 : :
19073 : : /*
19074 : : IsConstructor - returns TRUE if the constant is declared as a
19075 : : constant set, array or record.
19076 : : */
19077 : :
19078 : 189930524 : extern "C" bool SymbolTable_IsConstructor (unsigned int Sym)
19079 : : {
19080 : 189930524 : SymbolTable_PtrToSymbol pSym;
19081 : :
19082 : 189930524 : pSym = GetPsym (Sym);
19083 : 189930524 : switch (pSym->SymbolType)
19084 : : {
19085 : 29128290 : case SymbolTable_ConstVarSym:
19086 : 29128290 : return pSym->ConstVar.IsConstructor;
19087 : 35449675 : break;
19088 : :
19089 : 35449675 : case SymbolTable_ConstLitSym:
19090 : 35449675 : return pSym->ConstLit.IsConstructor;
19091 : : break;
19092 : :
19093 : :
19094 : : default:
19095 : : return false;
19096 : : break;
19097 : : }
19098 : : /* static analysis guarentees a RETURN statement will be used before here. */
19099 : : __builtin_unreachable ();
19100 : : }
19101 : :
19102 : :
19103 : : /*
19104 : : IsDummy - returns true if Sym is a Dummy symbol.
19105 : : */
19106 : :
19107 : 0 : extern "C" bool SymbolTable_IsDummy (unsigned int Sym)
19108 : : {
19109 : 0 : SymbolTable_PtrToSymbol pSym;
19110 : :
19111 : 0 : pSym = GetPsym (Sym);
19112 : 0 : return pSym->SymbolType == SymbolTable_DummySym;
19113 : : /* static analysis guarentees a RETURN statement will be used before here. */
19114 : : __builtin_unreachable ();
19115 : : }
19116 : :
19117 : :
19118 : : /*
19119 : : IsTemporary - returns true if Sym is a Temporary symbol.
19120 : : */
19121 : :
19122 : 1671372 : extern "C" bool SymbolTable_IsTemporary (unsigned int Sym)
19123 : : {
19124 : 1671372 : SymbolTable_PtrToSymbol pSym;
19125 : :
19126 : 1671372 : pSym = GetPsym (Sym);
19127 : 1671372 : switch (pSym->SymbolType)
19128 : : {
19129 : 1594224 : case SymbolTable_VarSym:
19130 : 1594224 : return pSym->Var.IsTemp;
19131 : 2966 : break;
19132 : :
19133 : 2966 : case SymbolTable_ConstVarSym:
19134 : 2966 : return pSym->ConstVar.IsTemp;
19135 : : break;
19136 : :
19137 : :
19138 : : default:
19139 : : return false;
19140 : : break;
19141 : : }
19142 : : /* static analysis guarentees a RETURN statement will be used before here. */
19143 : : __builtin_unreachable ();
19144 : : }
19145 : :
19146 : :
19147 : : /*
19148 : : IsVarAParam - returns true if Sym is a variable declared as a parameter.
19149 : : */
19150 : :
19151 : 31192 : extern "C" bool SymbolTable_IsVarAParam (unsigned int Sym)
19152 : : {
19153 : 31192 : SymbolTable_PtrToSymbol pSym;
19154 : :
19155 : 31192 : pSym = GetPsym (Sym);
19156 : 31192 : switch (pSym->SymbolType)
19157 : : {
19158 : 31192 : case SymbolTable_VarSym:
19159 : 31192 : return pSym->Var.IsParam;
19160 : : break;
19161 : :
19162 : :
19163 : : default:
19164 : : return false;
19165 : : break;
19166 : : }
19167 : : /* static analysis guarentees a RETURN statement will be used before here. */
19168 : : __builtin_unreachable ();
19169 : : }
19170 : :
19171 : :
19172 : : /*
19173 : : IsSubscript - returns true if Sym is a subscript symbol.
19174 : : */
19175 : :
19176 : 770302 : extern "C" bool SymbolTable_IsSubscript (unsigned int Sym)
19177 : : {
19178 : 770302 : SymbolTable_PtrToSymbol pSym;
19179 : :
19180 : 770302 : pSym = GetPsym (Sym);
19181 : 770302 : return pSym->SymbolType == SymbolTable_SubscriptSym;
19182 : : /* static analysis guarentees a RETURN statement will be used before here. */
19183 : : __builtin_unreachable ();
19184 : : }
19185 : :
19186 : :
19187 : : /*
19188 : : IsSubrange - returns true if Sym is a subrange symbol.
19189 : : */
19190 : :
19191 : 103740653 : extern "C" bool SymbolTable_IsSubrange (unsigned int Sym)
19192 : : {
19193 : 103740653 : SymbolTable_PtrToSymbol pSym;
19194 : :
19195 : 103740653 : pSym = GetPsym (Sym);
19196 : 103740653 : return pSym->SymbolType == SymbolTable_SubrangeSym;
19197 : : /* static analysis guarentees a RETURN statement will be used before here. */
19198 : : __builtin_unreachable ();
19199 : : }
19200 : :
19201 : :
19202 : : /*
19203 : : IsProcedureVariable - returns true if a Sym is a variable and
19204 : : it was declared within a procedure.
19205 : : */
19206 : :
19207 : 0 : extern "C" bool SymbolTable_IsProcedureVariable (unsigned int Sym)
19208 : : {
19209 : 0 : AssertInRange (Sym);
19210 : 0 : return (SymbolTable_IsVar (Sym)) && (SymbolTable_IsProcedure (SymbolTable_GetVarScope (Sym)));
19211 : : /* static analysis guarentees a RETURN statement will be used before here. */
19212 : : __builtin_unreachable ();
19213 : : }
19214 : :
19215 : :
19216 : : /*
19217 : : IsProcedureNested - returns TRUE if procedure, Sym, was
19218 : : declared as a nested procedure.
19219 : : */
19220 : :
19221 : 2787984 : extern "C" bool SymbolTable_IsProcedureNested (unsigned int Sym)
19222 : : {
19223 : 2787984 : return (SymbolTable_IsProcedure (Sym)) && (SymbolTable_IsProcedure (SymbolTable_GetScope (Sym)));
19224 : : /* static analysis guarentees a RETURN statement will be used before here. */
19225 : : __builtin_unreachable ();
19226 : : }
19227 : :
19228 : :
19229 : : /*
19230 : : IsAModula2Type - returns true if Sym, is a:
19231 : : IsType, IsPointer, IsRecord, IsEnumeration,
19232 : : IsSubrange, IsArray, IsUnbounded, IsProcType.
19233 : : NOTE that it different from IsType.
19234 : : */
19235 : :
19236 : 14756268 : extern "C" bool SymbolTable_IsAModula2Type (unsigned int Sym)
19237 : : {
19238 : 14756268 : AssertInRange (Sym);
19239 : 14756268 : return ((((((((SymbolTable_IsType (Sym)) || (SymbolTable_IsRecord (Sym))) || (SymbolTable_IsPointer (Sym))) || (SymbolTable_IsEnumeration (Sym))) || (SymbolTable_IsSubrange (Sym))) || (SymbolTable_IsArray (Sym))) || (SymbolTable_IsUnbounded (Sym))) || (SymbolTable_IsProcType (Sym))) || (SymbolTable_IsSet (Sym));
19240 : : /* static analysis guarentees a RETURN statement will be used before here. */
19241 : : __builtin_unreachable ();
19242 : : }
19243 : :
19244 : :
19245 : : /*
19246 : : IsGnuAsmVolatile - returns TRUE if a GnuAsm symbol was defined as VOLATILE.
19247 : : */
19248 : :
19249 : 24 : extern "C" bool SymbolTable_IsGnuAsmVolatile (unsigned int Sym)
19250 : : {
19251 : 24 : SymbolTable_PtrToSymbol pSym;
19252 : :
19253 : 24 : pSym = GetPsym (Sym);
19254 : 24 : switch (pSym->SymbolType)
19255 : : {
19256 : 24 : case SymbolTable_GnuAsmSym:
19257 : 24 : return pSym->GnuAsm.Volatile;
19258 : 0 : break;
19259 : :
19260 : :
19261 : 0 : default:
19262 : 0 : M2Error_InternalError ((const char *) "expecting GnuAsm symbol", 23);
19263 : : break;
19264 : : }
19265 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19266 : : __builtin_unreachable ();
19267 : : }
19268 : :
19269 : :
19270 : : /*
19271 : : IsGnuAsmSimple - returns TRUE if a GnuAsm symbol is a simple kind.
19272 : : */
19273 : :
19274 : 24 : extern "C" bool SymbolTable_IsGnuAsmSimple (unsigned int Sym)
19275 : : {
19276 : 24 : SymbolTable_PtrToSymbol pSym;
19277 : :
19278 : 24 : pSym = GetPsym (Sym);
19279 : 24 : switch (pSym->SymbolType)
19280 : : {
19281 : 24 : case SymbolTable_GnuAsmSym:
19282 : 24 : return pSym->GnuAsm.Simple;
19283 : 0 : break;
19284 : :
19285 : :
19286 : 0 : default:
19287 : 0 : M2Error_InternalError ((const char *) "expecting GnuAsm symbol", 23);
19288 : : break;
19289 : : }
19290 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19291 : : __builtin_unreachable ();
19292 : : }
19293 : :
19294 : :
19295 : : /*
19296 : : IsGnuAsm - returns TRUE if Sym is a GnuAsm symbol.
19297 : : */
19298 : :
19299 : 84 : extern "C" bool SymbolTable_IsGnuAsm (unsigned int Sym)
19300 : : {
19301 : 84 : SymbolTable_PtrToSymbol pSym;
19302 : :
19303 : 84 : pSym = GetPsym (Sym);
19304 : 84 : return pSym->SymbolType == SymbolTable_GnuAsmSym;
19305 : : /* static analysis guarentees a RETURN statement will be used before here. */
19306 : : __builtin_unreachable ();
19307 : : }
19308 : :
19309 : :
19310 : : /*
19311 : : IsRegInterface - returns TRUE if Sym is a RegInterface symbol.
19312 : : */
19313 : :
19314 : 0 : extern "C" bool SymbolTable_IsRegInterface (unsigned int Sym)
19315 : : {
19316 : 0 : SymbolTable_PtrToSymbol pSym;
19317 : :
19318 : 0 : pSym = GetPsym (Sym);
19319 : 0 : return pSym->SymbolType == SymbolTable_InterfaceSym;
19320 : : /* static analysis guarentees a RETURN statement will be used before here. */
19321 : : __builtin_unreachable ();
19322 : : }
19323 : :
19324 : :
19325 : : /*
19326 : : IsSizeSolved - returns true if the size of Sym is solved.
19327 : : */
19328 : :
19329 : 19420 : extern "C" bool SymbolTable_IsSizeSolved (unsigned int Sym)
19330 : : {
19331 : 19420 : SymbolTable_PtrToSymbol pSym;
19332 : :
19333 : 19420 : AssertInRange (Sym);
19334 : 19420 : pSym = GetPsym (Sym);
19335 : 19420 : switch (pSym->SymbolType)
19336 : : {
19337 : 0 : case SymbolTable_ProcedureSym:
19338 : 0 : return M2ALU_IsSolved (pSym->Procedure.Size);
19339 : 1364 : break;
19340 : :
19341 : 1364 : case SymbolTable_VarSym:
19342 : 1364 : return M2ALU_IsSolved (pSym->Var.Size);
19343 : 12214 : break;
19344 : :
19345 : 12214 : case SymbolTable_TypeSym:
19346 : 12214 : return M2ALU_IsSolved (pSym->Type.Size);
19347 : 2280 : break;
19348 : :
19349 : 2280 : case SymbolTable_SetSym:
19350 : 2280 : return M2ALU_IsSolved (pSym->Set.Size);
19351 : 12 : break;
19352 : :
19353 : 12 : case SymbolTable_RecordSym:
19354 : 12 : return M2ALU_IsSolved (pSym->Record.Size);
19355 : 0 : break;
19356 : :
19357 : 0 : case SymbolTable_VarientSym:
19358 : 0 : return M2ALU_IsSolved (pSym->Varient.Size);
19359 : 12 : break;
19360 : :
19361 : 12 : case SymbolTable_EnumerationSym:
19362 : 12 : return M2ALU_IsSolved (pSym->Enumeration.Size);
19363 : 52 : break;
19364 : :
19365 : 52 : case SymbolTable_PointerSym:
19366 : 52 : return M2ALU_IsSolved (pSym->Pointer.Size);
19367 : 3474 : break;
19368 : :
19369 : 3474 : case SymbolTable_ArraySym:
19370 : 3474 : return M2ALU_IsSolved (pSym->Array.Size);
19371 : 0 : break;
19372 : :
19373 : 0 : case SymbolTable_RecordFieldSym:
19374 : 0 : return M2ALU_IsSolved (pSym->RecordField.Size);
19375 : 0 : break;
19376 : :
19377 : 0 : case SymbolTable_VarientFieldSym:
19378 : 0 : return M2ALU_IsSolved (pSym->VarientField.Size);
19379 : 0 : break;
19380 : :
19381 : 0 : case SymbolTable_SubrangeSym:
19382 : 0 : return M2ALU_IsSolved (pSym->Subrange.Size);
19383 : 0 : break;
19384 : :
19385 : 0 : case SymbolTable_SubscriptSym:
19386 : 0 : return M2ALU_IsSolved (pSym->Subscript.Size);
19387 : 12 : break;
19388 : :
19389 : 12 : case SymbolTable_ProcTypeSym:
19390 : 12 : return M2ALU_IsSolved (pSym->ProcType.Size);
19391 : 0 : break;
19392 : :
19393 : 0 : case SymbolTable_UnboundedSym:
19394 : 0 : return M2ALU_IsSolved (pSym->Unbounded.Size);
19395 : 0 : break;
19396 : :
19397 : :
19398 : 0 : default:
19399 : 0 : M2Error_InternalError ((const char *) "not expecting this kind of symbol", 33);
19400 : : break;
19401 : : }
19402 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19403 : : __builtin_unreachable ();
19404 : : }
19405 : :
19406 : :
19407 : : /*
19408 : : IsOffsetSolved - returns true if the Offset of Sym is solved.
19409 : : */
19410 : :
19411 : 0 : extern "C" bool SymbolTable_IsOffsetSolved (unsigned int Sym)
19412 : : {
19413 : 0 : SymbolTable_PtrToSymbol pSym;
19414 : :
19415 : 0 : AssertInRange (Sym);
19416 : 0 : pSym = GetPsym (Sym);
19417 : 0 : switch (pSym->SymbolType)
19418 : : {
19419 : 0 : case SymbolTable_VarSym:
19420 : 0 : return M2ALU_IsSolved (pSym->Var.Offset);
19421 : 0 : break;
19422 : :
19423 : 0 : case SymbolTable_RecordFieldSym:
19424 : 0 : return M2ALU_IsSolved (pSym->RecordField.Offset);
19425 : 0 : break;
19426 : :
19427 : 0 : case SymbolTable_VarientFieldSym:
19428 : 0 : return M2ALU_IsSolved (pSym->VarientField.Offset);
19429 : 0 : break;
19430 : :
19431 : :
19432 : 0 : default:
19433 : 0 : M2Error_InternalError ((const char *) "not expecting this kind of symbol", 33);
19434 : : break;
19435 : : }
19436 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19437 : : __builtin_unreachable ();
19438 : : }
19439 : :
19440 : :
19441 : : /*
19442 : : IsValueSolved - returns true if the value of Sym is solved.
19443 : : */
19444 : :
19445 : 2567601 : extern "C" bool SymbolTable_IsValueSolved (unsigned int Sym)
19446 : : {
19447 : 2567601 : SymbolTable_PtrToSymbol pSym;
19448 : :
19449 : 2567601 : AssertInRange (Sym);
19450 : 2567601 : pSym = GetPsym (Sym);
19451 : 2567601 : switch (pSym->SymbolType)
19452 : : {
19453 : 1315382 : case SymbolTable_ConstLitSym:
19454 : 1315382 : return M2ALU_IsSolved (pSym->ConstLit.Value);
19455 : 540763 : break;
19456 : :
19457 : 540763 : case SymbolTable_ConstVarSym:
19458 : 540763 : return M2ALU_IsSolved (pSym->ConstVar.Value);
19459 : 466416 : break;
19460 : :
19461 : 466416 : case SymbolTable_EnumerationFieldSym:
19462 : 466416 : return M2ALU_IsSolved (pSym->EnumerationField.Value);
19463 : : break;
19464 : :
19465 : : case SymbolTable_ConstStringSym:
19466 : : return true;
19467 : 6 : break;
19468 : :
19469 : :
19470 : 6 : default:
19471 : 6 : M2Error_InternalError ((const char *) "not expecting this kind of symbol", 33);
19472 : : break;
19473 : : }
19474 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19475 : : __builtin_unreachable ();
19476 : : }
19477 : :
19478 : :
19479 : : /*
19480 : : IsConstructorConstant - returns TRUE if constructor, Sym, is
19481 : : defined by only constants.
19482 : : */
19483 : :
19484 : 2359198 : extern "C" bool SymbolTable_IsConstructorConstant (unsigned int Sym)
19485 : : {
19486 : 2359198 : SymbolTable_PtrToSymbol pSym;
19487 : :
19488 : 2359198 : if ((SymbolTable_IsConstructor (Sym)) || (SymbolTable_IsConstSet (Sym)))
19489 : : {
19490 : 2359198 : pSym = GetPsym (Sym);
19491 : 2359198 : switch (pSym->SymbolType)
19492 : : {
19493 : 2359198 : case SymbolTable_ConstVarSym:
19494 : 2359198 : return M2ALU_IsValueConst (pSym->ConstVar.Value);
19495 : 0 : break;
19496 : :
19497 : 0 : case SymbolTable_ConstLitSym:
19498 : 0 : return M2ALU_IsValueConst (pSym->ConstLit.Value);
19499 : 0 : break;
19500 : :
19501 : :
19502 : 0 : default:
19503 : 0 : M2Error_InternalError ((const char *) "expecting Constructor", 21);
19504 : 0 : break;
19505 : : }
19506 : : }
19507 : : else
19508 : : {
19509 : 0 : M2Error_InternalError ((const char *) "expecting Constructor", 21);
19510 : : }
19511 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19512 : : __builtin_unreachable ();
19513 : : }
19514 : :
19515 : :
19516 : : /*
19517 : : IsComposite - returns TRUE if symbol, sym, is a composite
19518 : : type: ie an ARRAY or RECORD.
19519 : : */
19520 : :
19521 : 119456 : extern "C" bool SymbolTable_IsComposite (unsigned int sym)
19522 : : {
19523 : 119456 : if (sym == SymbolTable_NulSym)
19524 : : {
19525 : : return false;
19526 : : }
19527 : : else
19528 : : {
19529 : 119444 : sym = SymbolTable_SkipType (sym);
19530 : 119444 : return (SymbolTable_IsArray (sym)) || (SymbolTable_IsRecord (sym));
19531 : : }
19532 : : /* static analysis guarentees a RETURN statement will be used before here. */
19533 : : __builtin_unreachable ();
19534 : : }
19535 : :
19536 : :
19537 : : /*
19538 : : IsSumOfParamSizeSolved - has the sum of parameters been solved yet?
19539 : : */
19540 : :
19541 : 0 : extern "C" bool SymbolTable_IsSumOfParamSizeSolved (unsigned int Sym)
19542 : : {
19543 : 0 : SymbolTable_PtrToSymbol pSym;
19544 : :
19545 : 0 : AssertInRange (Sym);
19546 : 0 : pSym = GetPsym (Sym);
19547 : 0 : switch (pSym->SymbolType)
19548 : : {
19549 : 0 : case SymbolTable_ProcedureSym:
19550 : 0 : return M2ALU_IsSolved (pSym->Procedure.TotalParamSize);
19551 : 0 : break;
19552 : :
19553 : 0 : case SymbolTable_ProcTypeSym:
19554 : 0 : return M2ALU_IsSolved (pSym->ProcType.TotalParamSize);
19555 : 0 : break;
19556 : :
19557 : :
19558 : 0 : default:
19559 : 0 : M2Error_InternalError ((const char *) "expecting Procedure or ProcType symbol", 38);
19560 : : break;
19561 : : }
19562 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19563 : : __builtin_unreachable ();
19564 : : }
19565 : :
19566 : :
19567 : : /*
19568 : : PutAlignment - assigns the alignment constant associated with,
19569 : : type, with, align.
19570 : : */
19571 : :
19572 : 192 : extern "C" void SymbolTable_PutAlignment (unsigned int type, unsigned int align)
19573 : : {
19574 : 192 : SymbolTable_PtrToSymbol pSym;
19575 : :
19576 : 192 : pSym = GetPsym (type);
19577 : 192 : switch (pSym->SymbolType)
19578 : : {
19579 : 0 : case SymbolTable_RecordSym:
19580 : 0 : pSym->Record.Align = align;
19581 : 0 : break;
19582 : :
19583 : 120 : case SymbolTable_RecordFieldSym:
19584 : 120 : pSym->RecordField.Align = align;
19585 : 120 : break;
19586 : :
19587 : 18 : case SymbolTable_TypeSym:
19588 : 18 : pSym->Type.Align = align;
19589 : 18 : break;
19590 : :
19591 : 30 : case SymbolTable_ArraySym:
19592 : 30 : pSym->Array.Align = align;
19593 : 30 : break;
19594 : :
19595 : 12 : case SymbolTable_PointerSym:
19596 : 12 : pSym->Pointer.Align = align;
19597 : 12 : break;
19598 : :
19599 : 12 : case SymbolTable_SubrangeSym:
19600 : 12 : pSym->Subrange.Align = align;
19601 : 12 : break;
19602 : :
19603 : :
19604 : 0 : default:
19605 : 0 : M2Error_InternalError ((const char *) "expecting record, field, pointer, type, subrange or an array symbol", 67);
19606 : 192 : break;
19607 : : }
19608 : 192 : }
19609 : :
19610 : :
19611 : : /*
19612 : : GetAlignment - returns the alignment constant associated with,
19613 : : type.
19614 : : */
19615 : :
19616 : 79070703 : extern "C" unsigned int SymbolTable_GetAlignment (unsigned int type)
19617 : : {
19618 : 79071441 : SymbolTable_PtrToSymbol pSym;
19619 : :
19620 : 79071441 : pSym = GetPsym (type);
19621 : 79071441 : switch (pSym->SymbolType)
19622 : : {
19623 : 78904 : case SymbolTable_RecordSym:
19624 : 78904 : return pSym->Record.Align;
19625 : 37552948 : break;
19626 : :
19627 : 37552948 : case SymbolTable_RecordFieldSym:
19628 : 37552948 : return pSym->RecordField.Align;
19629 : 29195336 : break;
19630 : :
19631 : 29195336 : case SymbolTable_TypeSym:
19632 : 29195336 : return pSym->Type.Align;
19633 : 706832 : break;
19634 : :
19635 : 706832 : case SymbolTable_ArraySym:
19636 : 706832 : return pSym->Array.Align;
19637 : 10376282 : break;
19638 : :
19639 : 10376282 : case SymbolTable_PointerSym:
19640 : 10376282 : return pSym->Pointer.Align;
19641 : 702 : break;
19642 : :
19643 : 702 : case SymbolTable_VarientFieldSym:
19644 : 702 : return SymbolTable_GetAlignment (pSym->VarientField.Parent);
19645 : 36 : break;
19646 : :
19647 : 36 : case SymbolTable_VarientSym:
19648 : 36 : return SymbolTable_GetAlignment (pSym->Varient.Parent);
19649 : 1160401 : break;
19650 : :
19651 : 1160401 : case SymbolTable_SubrangeSym:
19652 : 1160401 : return pSym->Subrange.Align;
19653 : 0 : break;
19654 : :
19655 : :
19656 : 0 : default:
19657 : 0 : M2Error_InternalError ((const char *) "expecting record, field, pointer, type, subrange or an array symbol", 67);
19658 : : break;
19659 : : }
19660 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19661 : : __builtin_unreachable ();
19662 : : }
19663 : :
19664 : :
19665 : : /*
19666 : : GetDefaultRecordFieldAlignment - assigns, align, as the default alignment
19667 : : to record, sym.
19668 : : */
19669 : :
19670 : 7080163 : extern "C" unsigned int SymbolTable_GetDefaultRecordFieldAlignment (unsigned int sym)
19671 : : {
19672 : 7080793 : SymbolTable_PtrToSymbol pSym;
19673 : :
19674 : 7080793 : pSym = GetPsym (sym);
19675 : 7080793 : switch (pSym->SymbolType)
19676 : : {
19677 : 7080163 : case SymbolTable_RecordSym:
19678 : 7080163 : return pSym->Record.DefaultAlign;
19679 : 630 : break;
19680 : :
19681 : 630 : case SymbolTable_VarientFieldSym:
19682 : 630 : return SymbolTable_GetDefaultRecordFieldAlignment (SymbolTable_GetParent (sym));
19683 : 0 : break;
19684 : :
19685 : 0 : case SymbolTable_VarientSym:
19686 : 0 : return SymbolTable_GetDefaultRecordFieldAlignment (SymbolTable_GetParent (sym));
19687 : 0 : break;
19688 : :
19689 : :
19690 : 0 : default:
19691 : 0 : M2Error_InternalError ((const char *) "expecting record symbol", 23);
19692 : : break;
19693 : : }
19694 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19695 : : __builtin_unreachable ();
19696 : : }
19697 : :
19698 : :
19699 : : /*
19700 : : PutDefaultRecordFieldAlignment - assigns, align, as the default alignment
19701 : : to record, sym.
19702 : : */
19703 : :
19704 : 36 : extern "C" void SymbolTable_PutDefaultRecordFieldAlignment (unsigned int sym, unsigned int align)
19705 : : {
19706 : 36 : SymbolTable_PtrToSymbol pSym;
19707 : :
19708 : 36 : pSym = GetPsym (sym);
19709 : 36 : switch (pSym->SymbolType)
19710 : : {
19711 : 36 : case SymbolTable_RecordSym:
19712 : 36 : pSym->Record.DefaultAlign = align;
19713 : 36 : break;
19714 : :
19715 : :
19716 : 0 : default:
19717 : 0 : M2Error_InternalError ((const char *) "expecting record symbol", 23);
19718 : 36 : break;
19719 : : }
19720 : 36 : }
19721 : :
19722 : :
19723 : : /*
19724 : : PutUnused - sets, sym, as unused. This is a gm2 pragma.
19725 : : */
19726 : :
19727 : 0 : extern "C" void SymbolTable_PutUnused (unsigned int sym)
19728 : : {
19729 : 0 : SymbolTable_PtrToSymbol pSym;
19730 : :
19731 : 0 : pSym = GetPsym (sym);
19732 : 0 : switch (pSym->SymbolType)
19733 : : {
19734 : 0 : case SymbolTable_RecordFieldSym:
19735 : 0 : pSym->RecordField.Used = false;
19736 : 0 : break;
19737 : :
19738 : :
19739 : 0 : default:
19740 : 0 : M2MetaError_MetaError1 ((const char *) "cannot use pragma 'unused' on symbol {%1ad}", 43, sym);
19741 : 0 : break;
19742 : : }
19743 : 0 : }
19744 : :
19745 : :
19746 : : /*
19747 : : IsUnused - returns TRUE if the symbol was declared as unused with a
19748 : : gm2 pragma.
19749 : : */
19750 : :
19751 : 120682 : extern "C" bool SymbolTable_IsUnused (unsigned int sym)
19752 : : {
19753 : 120682 : SymbolTable_PtrToSymbol pSym;
19754 : :
19755 : 120682 : pSym = GetPsym (sym);
19756 : 120682 : switch (pSym->SymbolType)
19757 : : {
19758 : 120682 : case SymbolTable_RecordFieldSym:
19759 : 120682 : return ! pSym->RecordField.Used;
19760 : 0 : break;
19761 : :
19762 : :
19763 : 0 : default:
19764 : 0 : M2Error_InternalError ((const char *) "expecting a record field symbol", 31);
19765 : : break;
19766 : : }
19767 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19768 : : __builtin_unreachable ();
19769 : : }
19770 : :
19771 : :
19772 : : /*
19773 : : PutDeclaredPacked - sets the Packed field of the record or record field symbol.
19774 : : */
19775 : :
19776 : 392142 : extern "C" void SymbolTable_PutDeclaredPacked (unsigned int sym, bool b)
19777 : : {
19778 : 392142 : SymbolTable_PtrToSymbol pSym;
19779 : :
19780 : 392142 : pSym = GetPsym (sym);
19781 : 392142 : switch (pSym->SymbolType)
19782 : : {
19783 : 78202 : case SymbolTable_RecordSym:
19784 : 78202 : pSym->Record.DeclPacked = b;
19785 : 78202 : pSym->Record.DeclResolved = true;
19786 : 78202 : break;
19787 : :
19788 : 312836 : case SymbolTable_RecordFieldSym:
19789 : 312836 : pSym->RecordField.DeclPacked = b;
19790 : 312836 : pSym->RecordField.DeclResolved = true;
19791 : 312836 : break;
19792 : :
19793 : 600 : case SymbolTable_VarientFieldSym:
19794 : 600 : pSym->VarientField.DeclPacked = b;
19795 : 600 : pSym->VarientField.DeclResolved = true;
19796 : 600 : break;
19797 : :
19798 : 504 : case SymbolTable_VarientSym:
19799 : 504 : pSym->Varient.DeclPacked = b;
19800 : 504 : pSym->Varient.DeclResolved = true;
19801 : 504 : break;
19802 : :
19803 : :
19804 : 0 : default:
19805 : 0 : M2Error_InternalError ((const char *) "expecting a record or field record symbol", 41);
19806 : 392142 : break;
19807 : : }
19808 : 392142 : }
19809 : :
19810 : :
19811 : : /*
19812 : : IsDeclaredPacked - was the record symbol or record field, sym,
19813 : : declared as packed?
19814 : : */
19815 : :
19816 : 1097018 : extern "C" bool SymbolTable_IsDeclaredPacked (unsigned int sym)
19817 : : {
19818 : 1097018 : SymbolTable_PtrToSymbol pSym;
19819 : :
19820 : 1097018 : pSym = GetPsym (sym);
19821 : 1097018 : switch (pSym->SymbolType)
19822 : : {
19823 : 156404 : case SymbolTable_RecordSym:
19824 : 156404 : return pSym->Record.DeclPacked;
19825 : 938730 : break;
19826 : :
19827 : 938730 : case SymbolTable_RecordFieldSym:
19828 : 938730 : return pSym->RecordField.DeclPacked;
19829 : 1332 : break;
19830 : :
19831 : 1332 : case SymbolTable_VarientFieldSym:
19832 : 1332 : return pSym->VarientField.DeclPacked;
19833 : 552 : break;
19834 : :
19835 : 552 : case SymbolTable_VarientSym:
19836 : 552 : return pSym->Varient.DeclPacked;
19837 : 0 : break;
19838 : :
19839 : :
19840 : 0 : default:
19841 : 0 : M2Error_InternalError ((const char *) "expecting a record or a record field symbol", 43);
19842 : : break;
19843 : : }
19844 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19845 : : __builtin_unreachable ();
19846 : : }
19847 : :
19848 : :
19849 : : /*
19850 : : IsDeclaredPackedResolved - do we know if the record symbol or record
19851 : : field, sym, declared as packed or not packed?
19852 : : */
19853 : :
19854 : 0 : extern "C" bool SymbolTable_IsDeclaredPackedResolved (unsigned int sym)
19855 : : {
19856 : 0 : SymbolTable_PtrToSymbol pSym;
19857 : :
19858 : 0 : pSym = GetPsym (sym);
19859 : 0 : switch (pSym->SymbolType)
19860 : : {
19861 : 0 : case SymbolTable_RecordSym:
19862 : 0 : return pSym->Record.DeclResolved;
19863 : 0 : break;
19864 : :
19865 : 0 : case SymbolTable_RecordFieldSym:
19866 : 0 : return pSym->RecordField.DeclResolved;
19867 : 0 : break;
19868 : :
19869 : 0 : case SymbolTable_VarientFieldSym:
19870 : 0 : return pSym->VarientField.DeclResolved;
19871 : 0 : break;
19872 : :
19873 : 0 : case SymbolTable_VarientSym:
19874 : 0 : return pSym->Varient.DeclResolved;
19875 : 0 : break;
19876 : :
19877 : :
19878 : 0 : default:
19879 : 0 : M2Error_InternalError ((const char *) "expecting a record or a record field symbol", 43);
19880 : : break;
19881 : : }
19882 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19883 : : __builtin_unreachable ();
19884 : : }
19885 : :
19886 : :
19887 : : /*
19888 : : GetPackedEquivalent - returns the packed equivalent of type, sym.
19889 : : sym must be a type, subrange or enumerated type.
19890 : : */
19891 : :
19892 : 13681 : extern "C" unsigned int SymbolTable_GetPackedEquivalent (unsigned int sym)
19893 : : {
19894 : 13681 : SymbolTable_PtrToSymbol pSym;
19895 : :
19896 : 13681 : pSym = GetPsym (sym);
19897 : 13681 : switch (pSym->SymbolType)
19898 : : {
19899 : 13561 : case SymbolTable_EnumerationSym:
19900 : 13561 : return GetEquivalent (&pSym->Enumeration.packedInfo, sym);
19901 : 120 : break;
19902 : :
19903 : 120 : case SymbolTable_SubrangeSym:
19904 : 120 : return GetEquivalent (&pSym->Subrange.packedInfo, sym);
19905 : 0 : break;
19906 : :
19907 : 0 : case SymbolTable_TypeSym:
19908 : 0 : return GetEquivalent (&pSym->Type.packedInfo, sym);
19909 : 0 : break;
19910 : :
19911 : 0 : case SymbolTable_SetSym:
19912 : 0 : return GetEquivalent (&pSym->Set.packedInfo, sym);
19913 : 0 : break;
19914 : :
19915 : :
19916 : 0 : default:
19917 : 0 : M2Error_InternalError ((const char *) "expecting type, subrange or enumerated type symbol", 50);
19918 : : break;
19919 : : }
19920 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19921 : : __builtin_unreachable ();
19922 : : }
19923 : :
19924 : :
19925 : : /*
19926 : : GetNonPackedEquivalent - returns the equivalent non packed symbol associated with, sym.
19927 : : */
19928 : :
19929 : 0 : extern "C" unsigned int SymbolTable_GetNonPackedEquivalent (unsigned int sym)
19930 : : {
19931 : 0 : SymbolTable_PtrToSymbol pSym;
19932 : :
19933 : 0 : pSym = GetPsym (sym);
19934 : 0 : switch (pSym->SymbolType)
19935 : : {
19936 : 0 : case SymbolTable_EquivSym:
19937 : 0 : return pSym->Equiv.nonPacked;
19938 : 0 : break;
19939 : :
19940 : :
19941 : 0 : default:
19942 : 0 : M2Error_InternalError ((const char *) "expecting equivalent symbol", 27);
19943 : : break;
19944 : : }
19945 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
19946 : : __builtin_unreachable ();
19947 : : }
19948 : :
19949 : :
19950 : : /*
19951 : : IsEquivalent - returns TRUE if, sym, is an equivalent symbol.
19952 : : */
19953 : :
19954 : 0 : extern "C" bool SymbolTable_IsEquivalent (unsigned int sym)
19955 : : {
19956 : 0 : SymbolTable_PtrToSymbol pSym;
19957 : :
19958 : 0 : pSym = GetPsym (sym);
19959 : 0 : switch (pSym->SymbolType)
19960 : : {
19961 : : case SymbolTable_EquivSym:
19962 : : return true;
19963 : 0 : break;
19964 : :
19965 : :
19966 : 0 : default:
19967 : 0 : return false;
19968 : : break;
19969 : : }
19970 : : /* static analysis guarentees a RETURN statement will be used before here. */
19971 : : __builtin_unreachable ();
19972 : : }
19973 : :
19974 : :
19975 : : /*
19976 : : PushSize - pushes the size of Sym.
19977 : : */
19978 : :
19979 : 79542 : extern "C" void SymbolTable_PushSize (unsigned int Sym)
19980 : : {
19981 : 79542 : SymbolTable_PtrToSymbol pSym;
19982 : :
19983 : 79542 : AssertInRange (Sym);
19984 : 79542 : pSym = GetPsym (Sym);
19985 : 79542 : switch (pSym->SymbolType)
19986 : : {
19987 : 0 : case SymbolTable_ProcedureSym:
19988 : 0 : M2ALU_PushFrom (pSym->Procedure.Size);
19989 : 0 : break;
19990 : :
19991 : 1364 : case SymbolTable_VarSym:
19992 : 1364 : M2ALU_PushFrom (pSym->Var.Size);
19993 : 1364 : break;
19994 : :
19995 : 12214 : case SymbolTable_TypeSym:
19996 : 12214 : M2ALU_PushFrom (pSym->Type.Size);
19997 : 12214 : break;
19998 : :
19999 : 2280 : case SymbolTable_SetSym:
20000 : 2280 : M2ALU_PushFrom (pSym->Set.Size);
20001 : 2280 : break;
20002 : :
20003 : 0 : case SymbolTable_VarientSym:
20004 : 0 : M2ALU_PushFrom (pSym->Varient.Size);
20005 : 0 : break;
20006 : :
20007 : 12 : case SymbolTable_RecordSym:
20008 : 12 : M2ALU_PushFrom (pSym->Record.Size);
20009 : 12 : break;
20010 : :
20011 : 12 : case SymbolTable_EnumerationSym:
20012 : 12 : M2ALU_PushFrom (pSym->Enumeration.Size);
20013 : 12 : break;
20014 : :
20015 : 60174 : case SymbolTable_PointerSym:
20016 : 60174 : M2ALU_PushFrom (pSym->Pointer.Size);
20017 : 60174 : break;
20018 : :
20019 : 3474 : case SymbolTable_ArraySym:
20020 : 3474 : M2ALU_PushFrom (pSym->Array.Size);
20021 : 3474 : break;
20022 : :
20023 : 0 : case SymbolTable_RecordFieldSym:
20024 : 0 : M2ALU_PushFrom (pSym->RecordField.Size);
20025 : 0 : break;
20026 : :
20027 : 0 : case SymbolTable_VarientFieldSym:
20028 : 0 : M2ALU_PushFrom (pSym->VarientField.Size);
20029 : 0 : break;
20030 : :
20031 : 0 : case SymbolTable_SubrangeSym:
20032 : 0 : M2ALU_PushFrom (pSym->Subrange.Size);
20033 : 0 : break;
20034 : :
20035 : 0 : case SymbolTable_SubscriptSym:
20036 : 0 : M2ALU_PushFrom (pSym->Subscript.Size);
20037 : 0 : break;
20038 : :
20039 : 12 : case SymbolTable_ProcTypeSym:
20040 : 12 : M2ALU_PushFrom (pSym->ProcType.Size);
20041 : 12 : break;
20042 : :
20043 : 0 : case SymbolTable_UnboundedSym:
20044 : 0 : M2ALU_PushFrom (pSym->Unbounded.Size);
20045 : 0 : break;
20046 : :
20047 : :
20048 : 0 : default:
20049 : 0 : M2Error_InternalError ((const char *) "not expecting this kind of symbol", 33);
20050 : 79542 : break;
20051 : : }
20052 : 79542 : }
20053 : :
20054 : :
20055 : : /*
20056 : : PopSize - pops the ALU stack into Size of Sym.
20057 : : */
20058 : :
20059 : 652906 : extern "C" void SymbolTable_PopSize (unsigned int Sym)
20060 : : {
20061 : 652906 : SymbolTable_PtrToSymbol pSym;
20062 : :
20063 : 652906 : AssertInRange (Sym);
20064 : 652906 : pSym = GetPsym (Sym);
20065 : 652906 : switch (pSym->SymbolType)
20066 : : {
20067 : 0 : case SymbolTable_ProcedureSym:
20068 : 0 : M2ALU_PopInto (pSym->Procedure.Size);
20069 : 0 : break;
20070 : :
20071 : 1096 : case SymbolTable_VarSym:
20072 : 1096 : M2ALU_PopInto (pSym->Var.Size);
20073 : 1096 : break;
20074 : :
20075 : 540830 : case SymbolTable_TypeSym:
20076 : 540830 : M2ALU_PopInto (pSym->Type.Size);
20077 : 540830 : break;
20078 : :
20079 : 12 : case SymbolTable_RecordSym:
20080 : 12 : M2ALU_PopInto (pSym->Record.Size);
20081 : 12 : break;
20082 : :
20083 : 0 : case SymbolTable_VarientSym:
20084 : 0 : M2ALU_PopInto (pSym->Varient.Size);
20085 : 0 : break;
20086 : :
20087 : 6 : case SymbolTable_EnumerationSym:
20088 : 6 : M2ALU_PopInto (pSym->Enumeration.Size);
20089 : 6 : break;
20090 : :
20091 : 14260 : case SymbolTable_PointerSym:
20092 : 14260 : M2ALU_PopInto (pSym->Pointer.Size);
20093 : 14260 : break;
20094 : :
20095 : 624 : case SymbolTable_ArraySym:
20096 : 624 : M2ALU_PopInto (pSym->Array.Size);
20097 : 624 : break;
20098 : :
20099 : 0 : case SymbolTable_RecordFieldSym:
20100 : 0 : M2ALU_PopInto (pSym->RecordField.Size);
20101 : 0 : break;
20102 : :
20103 : 0 : case SymbolTable_VarientFieldSym:
20104 : 0 : M2ALU_PopInto (pSym->VarientField.Size);
20105 : 0 : break;
20106 : :
20107 : 0 : case SymbolTable_SubrangeSym:
20108 : 0 : M2ALU_PopInto (pSym->Subrange.Size);
20109 : 0 : break;
20110 : :
20111 : 24558 : case SymbolTable_SubscriptSym:
20112 : 24558 : M2ALU_PopInto (pSym->Subscript.Size);
20113 : 24558 : break;
20114 : :
20115 : 14244 : case SymbolTable_ProcTypeSym:
20116 : 14244 : M2ALU_PopInto (pSym->ProcType.Size);
20117 : 14244 : break;
20118 : :
20119 : 0 : case SymbolTable_UnboundedSym:
20120 : 0 : M2ALU_PopInto (pSym->Unbounded.Size);
20121 : 0 : break;
20122 : :
20123 : 57276 : case SymbolTable_SetSym:
20124 : 57276 : M2ALU_PopInto (pSym->Set.Size);
20125 : 57276 : break;
20126 : :
20127 : :
20128 : 0 : default:
20129 : 0 : M2Error_InternalError ((const char *) "not expecting this kind of symbol", 33);
20130 : 652906 : break;
20131 : : }
20132 : 652906 : }
20133 : :
20134 : :
20135 : : /*
20136 : : PushValue - pushes the Value of Sym onto the ALU stack.
20137 : : */
20138 : :
20139 : 13899977 : extern "C" void SymbolTable_PushValue (unsigned int Sym)
20140 : : {
20141 : 13899977 : SymbolTable_PtrToSymbol pSym;
20142 : :
20143 : 13899977 : AssertInRange (Sym);
20144 : 13899977 : pSym = GetPsym (Sym);
20145 : 13899977 : switch (pSym->SymbolType)
20146 : : {
20147 : 1856164 : case SymbolTable_ConstLitSym:
20148 : 1856164 : M2ALU_PushFrom (pSym->ConstLit.Value);
20149 : 1856164 : break;
20150 : :
20151 : 1056655 : case SymbolTable_ConstVarSym:
20152 : 1056655 : M2ALU_PushFrom (pSym->ConstVar.Value);
20153 : 1056655 : break;
20154 : :
20155 : 10975174 : case SymbolTable_EnumerationFieldSym:
20156 : 10975174 : M2ALU_PushFrom (pSym->EnumerationField.Value);
20157 : 10975174 : break;
20158 : :
20159 : 11984 : case SymbolTable_ConstStringSym:
20160 : 11984 : PushConstString (Sym);
20161 : 11984 : break;
20162 : :
20163 : :
20164 : 0 : default:
20165 : 0 : M2Error_InternalError ((const char *) "not expecting this kind of symbol", 33);
20166 : 13899977 : break;
20167 : : }
20168 : 13899977 : }
20169 : :
20170 : :
20171 : : /*
20172 : : PushVarSize - pushes the size of a variable, Sym.
20173 : : The runtime size of Sym will depend upon its addressing mode,
20174 : : RightValue has size PushSize(GetType(Sym)) and
20175 : : LeftValue has size PushSize(Address) since it points to a
20176 : : variable.
20177 : : */
20178 : :
20179 : 0 : extern "C" void SymbolTable_PushVarSize (unsigned int Sym)
20180 : : {
20181 : 0 : AssertInRange (Sym);
20182 : 0 : M2Debug_Assert (SymbolTable_IsVar (Sym));
20183 : 0 : if ((SymbolTable_GetMode (Sym)) == SymbolTable_LeftValue)
20184 : : {
20185 : 0 : SymbolTable_PushSize (M2System_Address);
20186 : : }
20187 : : else
20188 : : {
20189 : 0 : M2Debug_Assert ((SymbolTable_GetMode (Sym)) == SymbolTable_RightValue);
20190 : 0 : SymbolTable_PushSize (SymbolTable_GetType (Sym));
20191 : : }
20192 : 0 : }
20193 : :
20194 : :
20195 : : /*
20196 : : PopValue - pops the ALU stack into Value of Sym.
20197 : : */
20198 : :
20199 : 1050004 : extern "C" void SymbolTable_PopValue (unsigned int Sym)
20200 : : {
20201 : 1050004 : SymbolTable_PtrToSymbol pSym;
20202 : :
20203 : 1050004 : AssertInRange (Sym);
20204 : 1050004 : pSym = GetPsym (Sym);
20205 : 1050004 : switch (pSym->SymbolType)
20206 : : {
20207 : 0 : case SymbolTable_ConstLitSym:
20208 : 0 : M2ALU_PopInto (pSym->ConstLit.Value);
20209 : 0 : break;
20210 : :
20211 : 1050004 : case SymbolTable_ConstVarSym:
20212 : 1050004 : M2ALU_PopInto (pSym->ConstVar.Value);
20213 : 1050004 : break;
20214 : :
20215 : 0 : case SymbolTable_EnumerationFieldSym:
20216 : 0 : M2Error_InternalError ((const char *) "cannot pop into an enumeration field", 36);
20217 : 0 : break;
20218 : :
20219 : :
20220 : 0 : default:
20221 : 0 : M2Error_InternalError ((const char *) "symbol type not expected", 24);
20222 : 1050004 : break;
20223 : : }
20224 : 1050004 : }
20225 : :
20226 : :
20227 : : /*
20228 : : IsObject - returns TRUE if the symbol is an object symbol.
20229 : : */
20230 : :
20231 : 0 : extern "C" bool SymbolTable_IsObject (unsigned int Sym)
20232 : : {
20233 : 0 : SymbolTable_PtrToSymbol pSym;
20234 : :
20235 : 0 : AssertInRange (Sym);
20236 : 0 : pSym = GetPsym (Sym);
20237 : 0 : return pSym->SymbolType == SymbolTable_ObjectSym;
20238 : : /* static analysis guarentees a RETURN statement will be used before here. */
20239 : : __builtin_unreachable ();
20240 : : }
20241 : :
20242 : :
20243 : : /*
20244 : : IsTuple - returns TRUE if the symbol is a tuple symbol.
20245 : : */
20246 : :
20247 : 13558 : extern "C" bool SymbolTable_IsTuple (unsigned int Sym)
20248 : : {
20249 : 13558 : SymbolTable_PtrToSymbol pSym;
20250 : :
20251 : 13558 : AssertInRange (Sym);
20252 : 13558 : pSym = GetPsym (Sym);
20253 : 13558 : return pSym->SymbolType == SymbolTable_TupleSym;
20254 : : /* static analysis guarentees a RETURN statement will be used before here. */
20255 : : __builtin_unreachable ();
20256 : : }
20257 : :
20258 : :
20259 : : /*
20260 : : Make2Tuple - creates and returns a 2 tuple from, a, and, b.
20261 : : */
20262 : :
20263 : 2480 : extern "C" unsigned int SymbolTable_Make2Tuple (unsigned int a, unsigned int b)
20264 : : {
20265 : 2480 : SymbolTable_PtrToSymbol pSym;
20266 : 2480 : unsigned int Sym;
20267 : :
20268 : 2480 : NewSym (&Sym);
20269 : 2480 : pSym = GetPsym (Sym);
20270 : 2480 : pSym->SymbolType = SymbolTable_TupleSym;
20271 : 2480 : pSym->Tuple.nTuple = 2;
20272 : 2480 : pSym->Tuple.list = Indexing_InitIndex (1);
20273 : 2480 : PutIntoIndex (&pSym->Tuple.list, 1, a);
20274 : 2480 : PutIntoIndex (&pSym->Tuple.list, 2, b);
20275 : 2480 : InitWhereDeclared (&pSym->Tuple.At);
20276 : 2480 : InitWhereFirstUsed (&pSym->Tuple.At);
20277 : 2480 : return Sym;
20278 : : /* static analysis guarentees a RETURN statement will be used before here. */
20279 : : __builtin_unreachable ();
20280 : : }
20281 : :
20282 : :
20283 : : /*
20284 : : MakeError - creates an error node, which can be used in MetaError messages.
20285 : : It will be removed from ExportUndeclared and Unknown trees.
20286 : : */
20287 : :
20288 : 192 : extern "C" unsigned int SymbolTable_MakeError (unsigned int tok, NameKey_Name name)
20289 : : {
20290 : 192 : SymbolTable_PtrToSymbol pSym;
20291 : 192 : unsigned int Sym;
20292 : :
20293 : : /* if Sym is present on the unknown tree then remove it */
20294 : 192 : Sym = FetchUnknownSym (name);
20295 : 192 : if (Sym == SymbolTable_NulSym)
20296 : : {
20297 : 186 : NewSym (&Sym);
20298 : : }
20299 : : else
20300 : : {
20301 : : /*
20302 : : remove symbol from this tree as we have already generated
20303 : : a meaningful error message
20304 : : */
20305 : 6 : RemoveExportUndeclared (SymbolTable_GetCurrentModuleScope (), Sym);
20306 : : }
20307 : 192 : pSym = GetPsym (Sym);
20308 : 192 : pSym->SymbolType = SymbolTable_ErrorSym;
20309 : 192 : pSym->Error.name = name;
20310 : 192 : pSym->Error.Scope = SymbolTable_GetCurrentScope ();
20311 : 192 : InitWhereDeclaredTok (tok, &pSym->Error.At);
20312 : 192 : InitWhereFirstUsedTok (tok, &pSym->Error.At);
20313 : 192 : return Sym;
20314 : : /* static analysis guarentees a RETURN statement will be used before here. */
20315 : : __builtin_unreachable ();
20316 : : }
20317 : :
20318 : :
20319 : : /*
20320 : : MakeErrorS - creates an error node from a string, which can be used
20321 : : in MetaError messages.
20322 : : It will be removed from ExportUndeclared and Unknown trees.
20323 : : */
20324 : :
20325 : 0 : extern "C" unsigned int SymbolTable_MakeErrorS (unsigned int tok, DynamicStrings_String name)
20326 : : {
20327 : 0 : return SymbolTable_MakeError (tok, NameKey_makekey (DynamicStrings_string (name)));
20328 : : /* static analysis guarentees a RETURN statement will be used before here. */
20329 : : __builtin_unreachable ();
20330 : : }
20331 : :
20332 : :
20333 : : /*
20334 : : IsError - returns TRUE if the symbol is an error symbol.
20335 : : */
20336 : :
20337 : 21160218 : extern "C" bool SymbolTable_IsError (unsigned int Sym)
20338 : : {
20339 : 21160218 : SymbolTable_PtrToSymbol pSym;
20340 : :
20341 : 21160218 : AssertInRange (Sym);
20342 : 21160218 : pSym = GetPsym (Sym);
20343 : 21160218 : return pSym->SymbolType == SymbolTable_ErrorSym;
20344 : : /* static analysis guarentees a RETURN statement will be used before here. */
20345 : : __builtin_unreachable ();
20346 : : }
20347 : :
20348 : :
20349 : : /*
20350 : : IsLegal - returns TRUE if, sym, is a legal symbol.
20351 : : */
20352 : :
20353 : 918599 : extern "C" bool SymbolTable_IsLegal (unsigned int sym)
20354 : : {
20355 : 918599 : return sym < FreeSymbol;
20356 : : /* static analysis guarentees a RETURN statement will be used before here. */
20357 : : __builtin_unreachable ();
20358 : : }
20359 : :
20360 : :
20361 : : /*
20362 : : PutModuleContainsBuiltin - sets a flag in the current compiled module which
20363 : : indicates that a builtin procedure is being declared.
20364 : : This is only expected to be called when we are
20365 : : parsing the definition module.
20366 : : */
20367 : :
20368 : 50500 : extern "C" void SymbolTable_PutModuleContainsBuiltin (void)
20369 : : {
20370 : 50500 : SymbolTable_PtrToSymbol pSym;
20371 : :
20372 : 50500 : SymbolTable_PutHiddenTypeDeclared ();
20373 : 50500 : pSym = GetPsym (CurrentModule);
20374 : 50500 : switch (pSym->SymbolType)
20375 : : {
20376 : 50500 : case SymbolTable_DefImpSym:
20377 : 50500 : pSym->DefImp.ContainsBuiltin = true;
20378 : 50500 : break;
20379 : :
20380 : :
20381 : 0 : default:
20382 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
20383 : 50500 : break;
20384 : : }
20385 : 50500 : }
20386 : :
20387 : :
20388 : : /*
20389 : : IsBuiltinInModule - returns true if a module, Sym, has declared a builtin procedure.
20390 : : */
20391 : :
20392 : 111227 : extern "C" bool SymbolTable_IsBuiltinInModule (unsigned int Sym)
20393 : : {
20394 : 111227 : SymbolTable_PtrToSymbol pSym;
20395 : :
20396 : 111227 : pSym = GetPsym (Sym);
20397 : 111227 : switch (pSym->SymbolType)
20398 : : {
20399 : 111227 : case SymbolTable_DefImpSym:
20400 : 111227 : return pSym->DefImp.ContainsBuiltin;
20401 : 0 : break;
20402 : :
20403 : :
20404 : 0 : default:
20405 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
20406 : : break;
20407 : : }
20408 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
20409 : : __builtin_unreachable ();
20410 : : }
20411 : :
20412 : :
20413 : : /*
20414 : : PutHiddenTypeDeclared - sets a flag in the current compiled module which
20415 : : indicates that a Hidden Type is declared within
20416 : : the implementation part of the module.
20417 : : This procedure is expected to be called while
20418 : : compiling the associated definition module.
20419 : : */
20420 : :
20421 : 175595 : extern "C" void SymbolTable_PutHiddenTypeDeclared (void)
20422 : : {
20423 : 175595 : SymbolTable_PtrToSymbol pSym;
20424 : :
20425 : 175595 : pSym = GetPsym (CurrentModule);
20426 : 175595 : switch (pSym->SymbolType)
20427 : : {
20428 : 175595 : case SymbolTable_DefImpSym:
20429 : 175595 : pSym->DefImp.ContainsHiddenType = true;
20430 : 175595 : break;
20431 : :
20432 : :
20433 : 0 : default:
20434 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
20435 : 175595 : break;
20436 : : }
20437 : 175595 : }
20438 : :
20439 : :
20440 : : /*
20441 : : IsHiddenTypeDeclared - returns true if a Hidden Type was declared in
20442 : : the module, Sym.
20443 : : */
20444 : :
20445 : 5509599 : extern "C" bool SymbolTable_IsHiddenTypeDeclared (unsigned int Sym)
20446 : : {
20447 : 5509599 : SymbolTable_PtrToSymbol pSym;
20448 : :
20449 : 5509599 : pSym = GetPsym (Sym);
20450 : 5509599 : switch (pSym->SymbolType)
20451 : : {
20452 : 5509599 : case SymbolTable_DefImpSym:
20453 : 5509599 : return pSym->DefImp.ContainsHiddenType;
20454 : 0 : break;
20455 : :
20456 : :
20457 : 0 : default:
20458 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
20459 : : break;
20460 : : }
20461 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
20462 : : __builtin_unreachable ();
20463 : : }
20464 : :
20465 : :
20466 : : /*
20467 : : IsHiddenReallyPointer - returns TRUE is sym is a pointer, address or a
20468 : : type declared as a pointer or address.
20469 : : */
20470 : :
20471 : 349651 : extern "C" bool SymbolTable_IsHiddenReallyPointer (unsigned int Sym)
20472 : : {
20473 : 349651 : if (SymbolTable_IsVar (Sym))
20474 : : {
20475 : 0 : Sym = SymbolTable_GetType (Sym);
20476 : : }
20477 : 381774 : while ((Sym != SymbolTable_NulSym) && (SymbolTable_IsType (Sym)))
20478 : : {
20479 : 32123 : Sym = SymbolTable_SkipType (SymbolTable_GetType (Sym));
20480 : : }
20481 : 349651 : return (Sym != SymbolTable_NulSym) && ((SymbolTable_IsPointer (Sym)) || (Sym == M2System_Address));
20482 : : /* static analysis guarentees a RETURN statement will be used before here. */
20483 : : __builtin_unreachable ();
20484 : : }
20485 : :
20486 : :
20487 : : /*
20488 : : DisplayTrees - displays the SymbolTrees for Module symbol, ModSym.
20489 : : */
20490 : :
20491 : 0 : extern "C" void SymbolTable_DisplayTrees (unsigned int ModSym)
20492 : : {
20493 : 0 : SymbolTable_PtrToSymbol pSym;
20494 : 0 : NameKey_Name n;
20495 : :
20496 : 0 : n = SymbolTable_GetSymName (ModSym);
20497 : 0 : M2Printf_printf1 ((const char *) "Symbol trees for module/procedure: %a\\n", 39, (const unsigned char *) &n, (sizeof (n)-1));
20498 : 0 : pSym = GetPsym (ModSym);
20499 : 0 : switch (pSym->SymbolType)
20500 : : {
20501 : 0 : case SymbolTable_DefImpSym:
20502 : 0 : n = SymbolTable_GetSymName (ModSym);
20503 : 0 : M2Printf_printf1 ((const char *) "%a UndefinedTree", 17, (const unsigned char *) &n, (sizeof (n)-1));
20504 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.Unresolved, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20505 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20506 : 0 : M2Printf_printf1 ((const char *) "%a Local symbols", 17, (const unsigned char *) &n, (sizeof (n)-1));
20507 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.LocalSymbols, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20508 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20509 : 0 : M2Printf_printf1 ((const char *) "%a ExportRequest", 17, (const unsigned char *) &n, (sizeof (n)-1));
20510 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportRequest, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20511 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20512 : 0 : M2Printf_printf1 ((const char *) "%a ExportQualified", 19, (const unsigned char *) &n, (sizeof (n)-1));
20513 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportQualifiedTree, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20514 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20515 : 0 : M2Printf_printf1 ((const char *) "%a ExportUnQualified", 21, (const unsigned char *) &n, (sizeof (n)-1));
20516 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportUnQualifiedTree, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20517 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20518 : 0 : M2Printf_printf1 ((const char *) "%a ExportUndeclared", 20, (const unsigned char *) &n, (sizeof (n)-1));
20519 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.ExportUndeclared, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20520 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20521 : 0 : M2Printf_printf1 ((const char *) "%a DeclaredObjects", 19, (const unsigned char *) &n, (sizeof (n)-1));
20522 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.NamedObjects, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20523 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20524 : 0 : M2Printf_printf1 ((const char *) "%a ImportedObjects", 19, (const unsigned char *) &n, (sizeof (n)-1));
20525 : 0 : SymbolKey_ForeachNodeDo (pSym->DefImp.NamedImports, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplayName});
20526 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20527 : 0 : break;
20528 : :
20529 : 0 : case SymbolTable_ModuleSym:
20530 : 0 : n = SymbolTable_GetSymName (ModSym);
20531 : 0 : M2Printf_printf1 ((const char *) "%a UndefinedTree", 17, (const unsigned char *) &n, (sizeof (n)-1));
20532 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.Unresolved, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20533 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20534 : 0 : M2Printf_printf1 ((const char *) "%a Local symbols", 17, (const unsigned char *) &n, (sizeof (n)-1));
20535 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.LocalSymbols, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20536 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20537 : 0 : M2Printf_printf1 ((const char *) "%a ImportTree", 14, (const unsigned char *) &n, (sizeof (n)-1));
20538 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.ImportTree, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20539 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20540 : 0 : M2Printf_printf1 ((const char *) "%a ExportTree", 14, (const unsigned char *) &n, (sizeof (n)-1));
20541 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.ExportTree, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20542 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20543 : 0 : M2Printf_printf1 ((const char *) "%a ExportUndeclared", 20, (const unsigned char *) &n, (sizeof (n)-1));
20544 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.ExportUndeclared, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20545 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20546 : 0 : M2Printf_printf1 ((const char *) "%a DeclaredObjects", 19, (const unsigned char *) &n, (sizeof (n)-1));
20547 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.NamedObjects, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20548 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20549 : 0 : M2Printf_printf1 ((const char *) "%a ImportedObjects", 19, (const unsigned char *) &n, (sizeof (n)-1));
20550 : 0 : SymbolKey_ForeachNodeDo (pSym->Module.NamedImports, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplayName});
20551 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20552 : 0 : break;
20553 : :
20554 : 0 : case SymbolTable_ProcedureSym:
20555 : 0 : n = SymbolTable_GetSymName (ModSym);
20556 : 0 : M2Printf_printf1 ((const char *) "%a UndefinedTree", 17, (const unsigned char *) &n, (sizeof (n)-1));
20557 : 0 : SymbolKey_ForeachNodeDo (pSym->Procedure.Unresolved, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20558 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20559 : 0 : M2Printf_printf1 ((const char *) "%a Local symbols", 17, (const unsigned char *) &n, (sizeof (n)-1));
20560 : 0 : SymbolKey_ForeachNodeDo (pSym->Procedure.LocalSymbols, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplaySymbol});
20561 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20562 : 0 : M2Printf_printf1 ((const char *) "%a DeclaredObjects", 19, (const unsigned char *) &n, (sizeof (n)-1));
20563 : 0 : SymbolKey_ForeachNodeDo (pSym->Procedure.NamedObjects, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DisplayName});
20564 : 0 : M2Printf_printf0 ((const char *) "\\n", 2);
20565 : 0 : break;
20566 : :
20567 : :
20568 : 0 : default:
20569 : 0 : M2Error_InternalError ((const char *) "expecting DefImp symbol", 23);
20570 : 0 : break;
20571 : : }
20572 : 0 : }
20573 : :
20574 : :
20575 : : /*
20576 : : DebugLineNumbers - internal debugging, emit all procedure names in this module
20577 : : together with the line numbers for the corresponding begin/end
20578 : : tokens.
20579 : : */
20580 : :
20581 : 13201 : extern "C" void SymbolTable_DebugLineNumbers (unsigned int sym)
20582 : : {
20583 : 13201 : if (M2Options_GetDebugFunctionLineNumbers ())
20584 : : {
20585 : 0 : M2Printf_printf0 ((const char *) "<lines>\\n", 9);
20586 : 0 : SymbolTable_ForeachProcedureDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) DebugProcedureLineNumber});
20587 : 0 : M2Printf_printf0 ((const char *) "</lines>\\n", 10);
20588 : : }
20589 : 13201 : }
20590 : :
20591 : :
20592 : : /*
20593 : : GetErrorScope - returns the error scope for a symbol.
20594 : : The error scope is the title scope which is used to
20595 : : announce the symbol in the GCC error message.
20596 : : */
20597 : :
20598 : 80902923 : extern "C" M2Error_ErrorScope SymbolTable_GetErrorScope (unsigned int sym)
20599 : : {
20600 : 80902923 : SymbolTable_PtrToSymbol pSym;
20601 : :
20602 : 80902923 : pSym = GetPsym (sym);
20603 : 80902923 : switch (pSym->SymbolType)
20604 : : {
20605 : 1298957 : case SymbolTable_ProcedureSym:
20606 : 1298957 : return pSym->Procedure.errorScope;
20607 : 3184704 : break;
20608 : :
20609 : 3184704 : case SymbolTable_ModuleSym:
20610 : 3184704 : return pSym->Module.errorScope;
20611 : 76419262 : break;
20612 : :
20613 : 76419262 : case SymbolTable_DefImpSym:
20614 : 76419262 : return pSym->DefImp.errorScope;
20615 : 0 : break;
20616 : :
20617 : 0 : case SymbolTable_UndefinedSym:
20618 : 0 : return pSym->Undefined.errorScope;
20619 : 0 : break;
20620 : :
20621 : :
20622 : 0 : default:
20623 : 0 : M2Error_InternalError ((const char *) "expecting procedure, module or defimp symbol", 44);
20624 : : break;
20625 : : }
20626 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
20627 : : __builtin_unreachable ();
20628 : : }
20629 : :
20630 : :
20631 : : /*
20632 : : MakeImport - create and return an import symbol.
20633 : : moduleSym is the symbol being imported.
20634 : : isqualified is FALSE if it were IMPORT modulename and
20635 : : TRUE for the qualified FROM modulename IMPORT etc.
20636 : : listno is the import list count for this module.
20637 : : tok should match this modulename position.
20638 : : */
20639 : :
20640 : 288346 : extern "C" unsigned int SymbolTable_MakeImport (unsigned int tok, unsigned int moduleSym, unsigned int listno, bool isqualified)
20641 : : {
20642 : 288346 : unsigned int importSym;
20643 : 288346 : SymbolTable_PtrToSymbol pSym;
20644 : :
20645 : 288346 : NewSym (&importSym);
20646 : 288346 : pSym = GetPsym (importSym);
20647 : 288346 : pSym->SymbolType = SymbolTable_ImportSym;
20648 : 288346 : pSym->Import.module = moduleSym;
20649 : 288346 : pSym->Import.listNo = listno;
20650 : 288346 : pSym->Import.qualified = isqualified;
20651 : 288346 : InitWhereDeclaredTok (tok, &pSym->Import.at);
20652 : 288346 : return importSym;
20653 : : /* static analysis guarentees a RETURN statement will be used before here. */
20654 : : __builtin_unreachable ();
20655 : : }
20656 : :
20657 : :
20658 : : /*
20659 : : MakeImportStatement - return a dependent symbol which represents an import statement
20660 : : or a qualified import statement. The tok should either match
20661 : : the FROM token or the IMPORT token. listno is the import list
20662 : : count for the module.
20663 : : */
20664 : :
20665 : 279496 : extern "C" unsigned int SymbolTable_MakeImportStatement (unsigned int tok, unsigned int listno)
20666 : : {
20667 : 279496 : unsigned int dependentSym;
20668 : 279496 : SymbolTable_PtrToSymbol pSym;
20669 : :
20670 : 279496 : NewSym (&dependentSym);
20671 : 279496 : pSym = GetPsym (dependentSym);
20672 : 279496 : pSym->SymbolType = SymbolTable_ImportStatementSym;
20673 : 279496 : pSym->ImportStatement.listNo = listno;
20674 : 279496 : Lists_InitList (&pSym->ImportStatement.ListOfImports);
20675 : 279496 : InitWhereDeclaredTok (tok, &pSym->ImportStatement.at);
20676 : 279496 : return dependentSym;
20677 : : /* static analysis guarentees a RETURN statement will be used before here. */
20678 : : __builtin_unreachable ();
20679 : : }
20680 : :
20681 : :
20682 : : /*
20683 : : IsImport - returns TRUE if sym is an import symbol.
20684 : : */
20685 : :
20686 : 801654 : extern "C" bool SymbolTable_IsImport (unsigned int sym)
20687 : : {
20688 : 801654 : SymbolTable_PtrToSymbol pSym;
20689 : :
20690 : 801654 : pSym = GetPsym (sym);
20691 : 801654 : return pSym->SymbolType == SymbolTable_ImportSym;
20692 : : /* static analysis guarentees a RETURN statement will be used before here. */
20693 : : __builtin_unreachable ();
20694 : : }
20695 : :
20696 : :
20697 : : /*
20698 : : IsImportStatement - returns TRUE if sym is a dependent symbol.
20699 : : */
20700 : :
20701 : 1057708 : extern "C" bool SymbolTable_IsImportStatement (unsigned int sym)
20702 : : {
20703 : 1057708 : SymbolTable_PtrToSymbol pSym;
20704 : :
20705 : 1057708 : pSym = GetPsym (sym);
20706 : 1057708 : return pSym->SymbolType == SymbolTable_ImportStatementSym;
20707 : : /* static analysis guarentees a RETURN statement will be used before here. */
20708 : : __builtin_unreachable ();
20709 : : }
20710 : :
20711 : :
20712 : : /*
20713 : : GetImportModule - returns the module associated with the import symbol.
20714 : : */
20715 : :
20716 : 246332 : extern "C" unsigned int SymbolTable_GetImportModule (unsigned int sym)
20717 : : {
20718 : 246332 : SymbolTable_PtrToSymbol pSym;
20719 : :
20720 : 246332 : M2Debug_Assert (SymbolTable_IsImport (sym));
20721 : 246332 : pSym = GetPsym (sym);
20722 : 246332 : return pSym->Import.module;
20723 : : /* static analysis guarentees a RETURN statement will be used before here. */
20724 : : __builtin_unreachable ();
20725 : : }
20726 : :
20727 : :
20728 : : /*
20729 : : GetImportDeclared - returns the token associated with the import symbol.
20730 : : */
20731 : :
20732 : 20644 : extern "C" unsigned int SymbolTable_GetImportDeclared (unsigned int sym)
20733 : : {
20734 : 20644 : unsigned int tok;
20735 : :
20736 : 20644 : M2Debug_Assert (SymbolTable_IsImport (sym));
20737 : 20644 : tok = SymbolTable_GetDeclaredDefinition (sym);
20738 : 20644 : if (tok == M2LexBuf_UnknownTokenNo)
20739 : : {
20740 : 19176 : return SymbolTable_GetDeclaredModule (sym);
20741 : : }
20742 : : return tok;
20743 : : /* static analysis guarentees a RETURN statement will be used before here. */
20744 : : __builtin_unreachable ();
20745 : : }
20746 : :
20747 : :
20748 : : /*
20749 : : GetImportStatementList - returns the list of imports for this dependent.
20750 : : Each import symbol corresponds to a module.
20751 : : */
20752 : :
20753 : 528854 : extern "C" Lists_List SymbolTable_GetImportStatementList (unsigned int sym)
20754 : : {
20755 : 528854 : SymbolTable_PtrToSymbol pSym;
20756 : :
20757 : 528854 : M2Debug_Assert (SymbolTable_IsImportStatement (sym));
20758 : 528854 : pSym = GetPsym (sym);
20759 : 528854 : return pSym->ImportStatement.ListOfImports;
20760 : : /* static analysis guarentees a RETURN statement will be used before here. */
20761 : : __builtin_unreachable ();
20762 : : }
20763 : :
20764 : :
20765 : : /*
20766 : : GetModuleDefImportStatementList - returns the list of dependents associated with
20767 : : the definition module.
20768 : : */
20769 : :
20770 : 147261 : extern "C" Lists_List SymbolTable_GetModuleDefImportStatementList (unsigned int sym)
20771 : : {
20772 : 147261 : SymbolTable_PtrToSymbol pSym;
20773 : :
20774 : 294522 : M2Debug_Assert ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)));
20775 : 147261 : if (SymbolTable_IsDefImp (sym))
20776 : : {
20777 : 133827 : pSym = GetPsym (sym);
20778 : 133827 : return pSym->DefImp.DefListOfDep;
20779 : : }
20780 : : return static_cast<Lists_List> (NULL);
20781 : : /* static analysis guarentees a RETURN statement will be used before here. */
20782 : : __builtin_unreachable ();
20783 : : }
20784 : :
20785 : :
20786 : : /*
20787 : : GetModuleModImportStatementList - returns the list of dependents associated with
20788 : : the implementation or program module.
20789 : : */
20790 : :
20791 : 291075 : extern "C" Lists_List SymbolTable_GetModuleModImportStatementList (unsigned int sym)
20792 : : {
20793 : 291075 : SymbolTable_PtrToSymbol pSym;
20794 : :
20795 : 582150 : M2Debug_Assert ((SymbolTable_IsModule (sym)) || (SymbolTable_IsDefImp (sym)));
20796 : 291075 : pSym = GetPsym (sym);
20797 : 291075 : if (SymbolTable_IsDefImp (sym))
20798 : : {
20799 : 263963 : return pSym->DefImp.ModListOfDep;
20800 : : }
20801 : : else
20802 : : {
20803 : 27112 : return pSym->Module.ModListOfDep;
20804 : : }
20805 : : /* static analysis guarentees a RETURN statement will be used before here. */
20806 : : __builtin_unreachable ();
20807 : : }
20808 : :
20809 : :
20810 : : /*
20811 : : AppendModuleImportStatement - appends the ImportStatement symbol onto the
20812 : : module import list.
20813 : :
20814 : : For example:
20815 : :
20816 : : FROM x IMPORT y, z ;
20817 : : ^^^^
20818 : :
20819 : : also:
20820 : :
20821 : : IMPORT p, q, r;
20822 : : ^^^^^^
20823 : : will result in a new ImportStatement symbol added
20824 : : to the current module import list.
20825 : : The statement symbol is expected to be created
20826 : : by MakeImportStatement using the token positions
20827 : : outlined above.
20828 : : */
20829 : :
20830 : 279496 : extern "C" void SymbolTable_AppendModuleImportStatement (unsigned int module, unsigned int statement)
20831 : : {
20832 : 279496 : SymbolTable_PtrToSymbol pSym;
20833 : :
20834 : 279496 : if (SymbolTable_IsDefImp (module))
20835 : : {
20836 : 266034 : pSym = GetPsym (module);
20837 : 266034 : if (M2Comp_CompilingDefinitionModule ())
20838 : : {
20839 : 70050 : Lists_IncludeItemIntoList (pSym->DefImp.DefListOfDep, statement);
20840 : : }
20841 : : else
20842 : : {
20843 : 195984 : Lists_IncludeItemIntoList (pSym->DefImp.ModListOfDep, statement);
20844 : : }
20845 : : }
20846 : 13462 : else if (SymbolTable_IsModule (module))
20847 : : {
20848 : : /* avoid dangling else. */
20849 : 13462 : pSym = GetPsym (module);
20850 : 13462 : Lists_IncludeItemIntoList (pSym->Module.ModListOfDep, statement);
20851 : : }
20852 : : else
20853 : : {
20854 : : /* avoid dangling else. */
20855 : 0 : M2Error_InternalError ((const char *) "expecting DefImp or Module symbol", 33);
20856 : : }
20857 : 279496 : }
20858 : :
20859 : :
20860 : : /*
20861 : : AppendModuleOnImportStatement - appends the import symbol onto the
20862 : : dependent list (chain).
20863 : :
20864 : : For example each:
20865 : :
20866 : : FROM x IMPORT y, z ;
20867 : : ^
20868 : : x are added to the dependent list.
20869 : :
20870 : : also:
20871 : :
20872 : : IMPORT p, q, r;
20873 : : ^ ^ ^
20874 : : will result in p, q and r added to
20875 : : to the dependent list.
20876 : :
20877 : : The import symbol is created by MakeImport
20878 : : and the token is expected to match the module
20879 : : name position outlined above.
20880 : : */
20881 : :
20882 : 288346 : extern "C" void SymbolTable_AppendModuleOnImportStatement (unsigned int module, unsigned int import)
20883 : : {
20884 : 288346 : Lists_List l;
20885 : 288346 : unsigned int lastImportStatement;
20886 : :
20887 : 288346 : M2Debug_Assert (SymbolTable_IsImport (import));
20888 : 288346 : if (M2Comp_CompilingDefinitionModule ())
20889 : : {
20890 : 72266 : l = SymbolTable_GetModuleDefImportStatementList (module);
20891 : : }
20892 : : else
20893 : : {
20894 : 216080 : l = SymbolTable_GetModuleModImportStatementList (module);
20895 : : }
20896 : 288346 : M2Debug_Assert (l != NULL);
20897 : 288346 : M2Debug_Assert ((Lists_NoOfItemsInList (l)) > 0); /* There should always be one on the list. */
20898 : 288346 : lastImportStatement = static_cast<unsigned int> (Lists_GetItemFromList (l, Lists_NoOfItemsInList (l))); /* There should always be one on the list. */
20899 : 288346 : M2Debug_Assert (SymbolTable_IsImportStatement (lastImportStatement));
20900 : 288346 : l = SymbolTable_GetImportStatementList (lastImportStatement);
20901 : 288346 : Lists_IncludeItemIntoList (l, import);
20902 : 288346 : }
20903 : :
20904 : :
20905 : : /*
20906 : : PutModLink - assigns link to module sym.
20907 : : */
20908 : :
20909 : 47120 : extern "C" void SymbolTable_PutModLink (unsigned int sym, bool link)
20910 : : {
20911 : 47120 : SymbolTable_PtrToSymbol pSym;
20912 : :
20913 : 47120 : if (SymbolTable_IsModule (sym))
20914 : : {
20915 : 0 : pSym = GetPsym (sym);
20916 : 0 : pSym->Module.ModLink = link;
20917 : : }
20918 : 47120 : else if (SymbolTable_IsDefImp (sym))
20919 : : {
20920 : : /* avoid dangling else. */
20921 : 47120 : pSym = GetPsym (sym);
20922 : 47120 : pSym->DefImp.ModLink = link;
20923 : : }
20924 : : else
20925 : : {
20926 : : /* avoid dangling else. */
20927 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
20928 : : }
20929 : 47120 : }
20930 : :
20931 : :
20932 : : /*
20933 : : IsModLink - returns the ModLink value associated with the module symbol.
20934 : : */
20935 : :
20936 : 281889 : extern "C" bool SymbolTable_IsModLink (unsigned int sym)
20937 : : {
20938 : 281889 : SymbolTable_PtrToSymbol pSym;
20939 : :
20940 : 281889 : if (SymbolTable_IsModule (sym))
20941 : : {
20942 : 139298 : pSym = GetPsym (sym);
20943 : 139298 : return pSym->Module.ModLink;
20944 : : }
20945 : 142591 : else if (SymbolTable_IsDefImp (sym))
20946 : : {
20947 : : /* avoid dangling else. */
20948 : 142591 : pSym = GetPsym (sym);
20949 : 142591 : return pSym->DefImp.ModLink;
20950 : : }
20951 : : else
20952 : : {
20953 : : /* avoid dangling else. */
20954 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp or Module symbol", 35);
20955 : : }
20956 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
20957 : : __builtin_unreachable ();
20958 : : }
20959 : :
20960 : :
20961 : : /*
20962 : : PutDefLink - assigns link to the definition module sym.
20963 : : */
20964 : :
20965 : 0 : extern "C" void SymbolTable_PutDefLink (unsigned int sym, bool link)
20966 : : {
20967 : 0 : SymbolTable_PtrToSymbol pSym;
20968 : :
20969 : 0 : if (SymbolTable_IsDefImp (sym))
20970 : : {
20971 : 0 : pSym = GetPsym (sym);
20972 : 0 : pSym->DefImp.DefLink = link;
20973 : : }
20974 : : else
20975 : : {
20976 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
20977 : : }
20978 : 0 : }
20979 : :
20980 : :
20981 : : /*
20982 : : IsDefLink - returns the DefLink value associated with the definition module symbol.
20983 : : */
20984 : :
20985 : 118924 : extern "C" bool SymbolTable_IsDefLink (unsigned int sym)
20986 : : {
20987 : 118924 : SymbolTable_PtrToSymbol pSym;
20988 : :
20989 : 118924 : if (SymbolTable_IsDefImp (sym))
20990 : : {
20991 : 118924 : pSym = GetPsym (sym);
20992 : 118924 : return pSym->DefImp.DefLink;
20993 : : }
20994 : : else
20995 : : {
20996 : 0 : M2Error_InternalError ((const char *) "expecting a DefImp symbol", 25);
20997 : : }
20998 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
20999 : : __builtin_unreachable ();
21000 : : }
21001 : :
21002 : :
21003 : : /*
21004 : : IsModuleBuiltin - returns TRUE if the module is a builtin module.
21005 : : (For example _BaseTypes).
21006 : : */
21007 : :
21008 : 60768 : extern "C" bool SymbolTable_IsModuleBuiltin (unsigned int sym)
21009 : : {
21010 : 60768 : SymbolTable_PtrToSymbol pSym;
21011 : :
21012 : 60768 : if (SymbolTable_IsDefImp (sym))
21013 : : {
21014 : 58246 : pSym = GetPsym (sym);
21015 : 58246 : return pSym->DefImp.Builtin;
21016 : : }
21017 : 2522 : else if (SymbolTable_IsModule (sym))
21018 : : {
21019 : : /* avoid dangling else. */
21020 : 2522 : pSym = GetPsym (sym);
21021 : 2522 : return pSym->Module.Builtin;
21022 : : }
21023 : : return false;
21024 : : /* static analysis guarentees a RETURN statement will be used before here. */
21025 : : __builtin_unreachable ();
21026 : : }
21027 : :
21028 : :
21029 : : /*
21030 : : PutModuleBuiltin - sets the Builtin flag to value.
21031 : : Currently the procedure expects sym to be a DefImp
21032 : : module only.
21033 : : */
21034 : :
21035 : 14232 : extern "C" void SymbolTable_PutModuleBuiltin (unsigned int sym, bool value)
21036 : : {
21037 : 14232 : SymbolTable_PtrToSymbol pSym;
21038 : :
21039 : 14232 : if (SymbolTable_IsDefImp (sym))
21040 : : {
21041 : 0 : pSym = GetPsym (sym);
21042 : 0 : pSym->DefImp.Builtin = value;
21043 : : }
21044 : 14232 : else if (SymbolTable_IsModule (sym))
21045 : : {
21046 : : /* avoid dangling else. */
21047 : 14232 : pSym = GetPsym (sym);
21048 : 14232 : pSym->Module.Builtin = value;
21049 : : }
21050 : : else
21051 : : {
21052 : : /* avoid dangling else. */
21053 : 0 : M2Error_InternalError ((const char *) "expecting Module or DefImp symbol", 33);
21054 : : }
21055 : 14232 : }
21056 : :
21057 : :
21058 : : /*
21059 : : PutVarArrayRef - assigns ArrayRef field with value.
21060 : : */
21061 : :
21062 : 46652 : extern "C" void SymbolTable_PutVarArrayRef (unsigned int sym, bool value)
21063 : : {
21064 : 46652 : SymbolTable_PtrToSymbol pSym;
21065 : :
21066 : 46652 : pSym = GetPsym (sym);
21067 : 46652 : switch (pSym->SymbolType)
21068 : : {
21069 : 46652 : case SymbolTable_VarSym:
21070 : 46652 : pSym->Var.ArrayRef = value;
21071 : 46652 : break;
21072 : :
21073 : :
21074 : 0 : default:
21075 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
21076 : 46652 : break;
21077 : : }
21078 : 46652 : }
21079 : :
21080 : :
21081 : : /*
21082 : : IsVarArrayRef - returns ArrayRef field value.
21083 : : */
21084 : :
21085 : 3382 : extern "C" bool SymbolTable_IsVarArrayRef (unsigned int sym)
21086 : : {
21087 : 3382 : SymbolTable_PtrToSymbol pSym;
21088 : :
21089 : 3382 : pSym = GetPsym (sym);
21090 : 3382 : switch (pSym->SymbolType)
21091 : : {
21092 : 3382 : case SymbolTable_VarSym:
21093 : 3382 : return pSym->Var.ArrayRef;
21094 : 0 : break;
21095 : :
21096 : :
21097 : 0 : default:
21098 : 0 : M2Error_InternalError ((const char *) "expecting VarSym", 16);
21099 : : break;
21100 : : }
21101 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
21102 : : __builtin_unreachable ();
21103 : : }
21104 : :
21105 : :
21106 : : /*
21107 : : VarCheckReadInit - returns TRUE if sym has been initialized.
21108 : : */
21109 : :
21110 : 2872 : extern "C" bool SymbolTable_VarCheckReadInit (unsigned int sym, SymbolTable_ModeOfAddr mode)
21111 : : {
21112 : 2872 : SymbolTable_PtrToSymbol pSym;
21113 : :
21114 : 2872 : if (SymbolTable_IsVar (sym))
21115 : : {
21116 : 2872 : pSym = GetPsym (sym);
21117 : 2872 : switch (pSym->SymbolType)
21118 : : {
21119 : 2872 : case SymbolTable_VarSym:
21120 : 2872 : return M2SymInit_GetInitialized (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[mode-SymbolTable_RightValue]));
21121 : : break;
21122 : :
21123 : :
21124 : : default:
21125 : : break;
21126 : : }
21127 : : }
21128 : : return false;
21129 : : /* static analysis guarentees a RETURN statement will be used before here. */
21130 : : __builtin_unreachable ();
21131 : : }
21132 : :
21133 : :
21134 : : /*
21135 : : VarInitState - initializes the init state for variable sym.
21136 : : */
21137 : :
21138 : 10408 : extern "C" void SymbolTable_VarInitState (unsigned int sym)
21139 : : {
21140 : 10408 : SymbolTable_PtrToSymbol pSym;
21141 : :
21142 : 10408 : if (SymbolTable_IsVar (sym))
21143 : : {
21144 : 10408 : pSym = GetPsym (sym);
21145 : 10408 : switch (pSym->SymbolType)
21146 : : {
21147 : 10408 : case SymbolTable_VarSym:
21148 : 10408 : M2SymInit_ConfigSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_LeftValue-SymbolTable_RightValue]), sym);
21149 : 10408 : M2SymInit_ConfigSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_RightValue-SymbolTable_RightValue]), sym);
21150 : 10408 : break;
21151 : :
21152 : :
21153 : : default:
21154 : : break;
21155 : : }
21156 : : }
21157 : 10408 : }
21158 : :
21159 : :
21160 : : /*
21161 : : PutVarInitialized - set sym as initialized.
21162 : : */
21163 : :
21164 : 5157 : extern "C" void SymbolTable_PutVarInitialized (unsigned int sym, SymbolTable_ModeOfAddr mode)
21165 : : {
21166 : 5157 : SymbolTable_PtrToSymbol pSym;
21167 : :
21168 : 5157 : if (SymbolTable_IsVar (sym))
21169 : : {
21170 : 5157 : pSym = GetPsym (sym);
21171 : 5157 : switch (pSym->SymbolType)
21172 : : {
21173 : 5157 : case SymbolTable_VarSym:
21174 : 5157 : M2SymInit_SetInitialized (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[mode-SymbolTable_RightValue]));
21175 : 5157 : break;
21176 : :
21177 : :
21178 : : default:
21179 : : break;
21180 : : }
21181 : : }
21182 : 5157 : }
21183 : :
21184 : :
21185 : : /*
21186 : : PutVarFieldInitialized - records that field has been initialized with
21187 : : variable sym. TRUE is returned if the field
21188 : : is detected and changed to initialized.
21189 : : */
21190 : :
21191 : 684 : extern "C" bool SymbolTable_PutVarFieldInitialized (unsigned int sym, SymbolTable_ModeOfAddr mode, Lists_List fieldlist)
21192 : : {
21193 : 684 : SymbolTable_PtrToSymbol pSym;
21194 : :
21195 : 684 : if (SymbolTable_IsVar (sym))
21196 : : {
21197 : 684 : pSym = GetPsym (sym);
21198 : 684 : switch (pSym->SymbolType)
21199 : : {
21200 : 684 : case SymbolTable_VarSym:
21201 : 684 : return M2SymInit_SetFieldInitialized (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[mode-SymbolTable_RightValue]), fieldlist);
21202 : : break;
21203 : :
21204 : :
21205 : : default:
21206 : : break;
21207 : : }
21208 : : }
21209 : : return false;
21210 : : /* static analysis guarentees a RETURN statement will be used before here. */
21211 : : __builtin_unreachable ();
21212 : : }
21213 : :
21214 : :
21215 : : /*
21216 : : GetVarFieldInitialized - return TRUE if fieldlist has been initialized
21217 : : within variable sym.
21218 : : */
21219 : :
21220 : 204 : extern "C" bool SymbolTable_GetVarFieldInitialized (unsigned int sym, SymbolTable_ModeOfAddr mode, Lists_List fieldlist)
21221 : : {
21222 : 204 : SymbolTable_PtrToSymbol pSym;
21223 : :
21224 : 204 : if (SymbolTable_IsVar (sym))
21225 : : {
21226 : 204 : pSym = GetPsym (sym);
21227 : 204 : switch (pSym->SymbolType)
21228 : : {
21229 : 204 : case SymbolTable_VarSym:
21230 : 204 : return M2SymInit_GetFieldInitialized (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[mode-SymbolTable_RightValue]), fieldlist);
21231 : : break;
21232 : :
21233 : :
21234 : : default:
21235 : : break;
21236 : : }
21237 : : }
21238 : : return false;
21239 : : /* static analysis guarentees a RETURN statement will be used before here. */
21240 : : __builtin_unreachable ();
21241 : : }
21242 : :
21243 : :
21244 : : /*
21245 : : PrintInitialized - display variable sym initialization state.
21246 : : */
21247 : :
21248 : 0 : extern "C" void SymbolTable_PrintInitialized (unsigned int sym)
21249 : : {
21250 : 0 : SymbolTable_PtrToSymbol pSym;
21251 : :
21252 : 0 : if (SymbolTable_IsVar (sym))
21253 : : {
21254 : 0 : pSym = GetPsym (sym);
21255 : 0 : switch (pSym->SymbolType)
21256 : : {
21257 : 0 : case SymbolTable_VarSym:
21258 : 0 : M2Printf_printf0 ((const char *) "LeftMode init: ", 15);
21259 : 0 : M2SymInit_PrintSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_LeftValue-SymbolTable_RightValue]));
21260 : 0 : M2Printf_printf0 ((const char *) "RightMode init: ", 16);
21261 : 0 : M2SymInit_PrintSymInit (static_cast<M2SymInit_InitDesc> (pSym->Var.InitState.array[SymbolTable_RightValue-SymbolTable_RightValue]));
21262 : 0 : break;
21263 : :
21264 : :
21265 : : default:
21266 : : break;
21267 : : }
21268 : : }
21269 : 0 : }
21270 : :
21271 : :
21272 : : /*
21273 : : GetParameterHeapVar - return the heap variable associated with the
21274 : : parameter or NulSym.
21275 : : */
21276 : :
21277 : 300 : extern "C" unsigned int SymbolTable_GetParameterHeapVar (unsigned int ParSym)
21278 : : {
21279 : 300 : SymbolTable_PtrToSymbol pSym;
21280 : :
21281 : 300 : pSym = GetPsym (ParSym);
21282 : 300 : switch (pSym->SymbolType)
21283 : : {
21284 : : case SymbolTable_ParamSym:
21285 : : return SymbolTable_NulSym; /* Only VarParam has the pointer. */
21286 : 96 : break;
21287 : :
21288 : 96 : case SymbolTable_VarParamSym:
21289 : 96 : return pSym->VarParam.HeapVar; /* Only VarParam has the pointer. */
21290 : 0 : break;
21291 : :
21292 : :
21293 : 0 : default:
21294 : 0 : M2Error_InternalError ((const char *) "expecting Param or VarParam symbol", 34);
21295 : : break;
21296 : : }
21297 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
21298 : : __builtin_unreachable ();
21299 : : }
21300 : :
21301 : :
21302 : : /*
21303 : : PutProcedureParameterHeapVars - creates heap variables for parameter sym.
21304 : : */
21305 : :
21306 : 943455 : extern "C" void SymbolTable_PutProcedureParameterHeapVars (unsigned int sym)
21307 : : {
21308 : 943455 : M2Debug_Assert (SymbolTable_IsProcedure (sym));
21309 : 943455 : SymbolTable_ForeachParamSymDo (sym, (SymbolKey_PerformOperation) {(SymbolKey_PerformOperation_t) PutParameterHeapVar});
21310 : 943455 : }
21311 : :
21312 : :
21313 : : /*
21314 : : IsProcedureBuiltinAvailable - return TRUE if procedure is available as a builtin
21315 : : for the target architecture.
21316 : : */
21317 : :
21318 : 870835 : extern "C" bool SymbolTable_IsProcedureBuiltinAvailable (unsigned int procedure)
21319 : : {
21320 : 870835 : return (SymbolTable_IsProcedureBuiltin (procedure)) && (CanUseBuiltin (procedure));
21321 : : /* static analysis guarentees a RETURN statement will be used before here. */
21322 : : __builtin_unreachable ();
21323 : : }
21324 : :
21325 : :
21326 : : /*
21327 : : PutConstLitInternal - marks the sym as being an internal constant.
21328 : : Currently this is used when generating a default
21329 : : BY constant expression during a FOR loop.
21330 : : A constant marked as internal will always pass
21331 : : an expression type check.
21332 : : */
21333 : :
21334 : 12938 : extern "C" void SymbolTable_PutConstLitInternal (unsigned int sym, bool value)
21335 : : {
21336 : 12938 : SymbolTable_PtrToSymbol pSym;
21337 : :
21338 : 12938 : pSym = GetPsym (sym);
21339 : 12938 : switch (pSym->SymbolType)
21340 : : {
21341 : 12938 : case SymbolTable_ConstLitSym:
21342 : 12938 : pSym->ConstLit.IsInternal = value;
21343 : 12938 : break;
21344 : :
21345 : :
21346 : 0 : default:
21347 : 0 : M2Error_InternalError ((const char *) "expecting ConstLitSym", 21);
21348 : 12938 : break;
21349 : : }
21350 : 12938 : }
21351 : :
21352 : :
21353 : : /*
21354 : : IsConstLitInternal - returns the value of the IsInternal field within
21355 : : a constant expression.
21356 : : */
21357 : :
21358 : 531527 : extern "C" bool SymbolTable_IsConstLitInternal (unsigned int sym)
21359 : : {
21360 : 531527 : SymbolTable_PtrToSymbol pSym;
21361 : :
21362 : 531527 : pSym = GetPsym (sym);
21363 : 531527 : switch (pSym->SymbolType)
21364 : : {
21365 : 531527 : case SymbolTable_ConstLitSym:
21366 : 531527 : return pSym->ConstLit.IsInternal;
21367 : 0 : break;
21368 : :
21369 : :
21370 : 0 : default:
21371 : 0 : M2Error_InternalError ((const char *) "expecting ConstLitSym", 21);
21372 : : break;
21373 : : }
21374 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
21375 : : __builtin_unreachable ();
21376 : : }
21377 : :
21378 : :
21379 : : /*
21380 : : GetVarDeclTypeTok - returns the TypeTok field associate with variable sym.
21381 : : */
21382 : :
21383 : 0 : extern "C" unsigned int SymbolTable_GetVarDeclTypeTok (unsigned int sym)
21384 : : {
21385 : 0 : SymbolTable_PtrToSymbol pSym;
21386 : :
21387 : 0 : if (SymbolTable_IsParameter (sym))
21388 : : {
21389 : 0 : pSym = GetPsym (sym);
21390 : 0 : if (SymbolTable_IsParameterVar (sym))
21391 : : {
21392 : 0 : return SymbolTable_GetVarDeclTypeTok (pSym->VarParam.ShadowVar);
21393 : : }
21394 : : else
21395 : : {
21396 : 0 : return SymbolTable_GetVarDeclTypeTok (pSym->Param.ShadowVar);
21397 : : }
21398 : : }
21399 : 0 : else if (SymbolTable_IsVar (sym))
21400 : : {
21401 : : /* avoid dangling else. */
21402 : 0 : return doGetVarDeclTypeTok (sym);
21403 : : }
21404 : : else
21405 : : {
21406 : : /* avoid dangling else. */
21407 : : return M2LexBuf_UnknownTokenNo;
21408 : : }
21409 : : /* static analysis guarentees a RETURN statement will be used before here. */
21410 : : __builtin_unreachable ();
21411 : : }
21412 : :
21413 : :
21414 : : /*
21415 : : PutVarDeclTypeTok - assigns the TypeTok field to typetok.
21416 : : sym can be a variable or parameter.
21417 : : */
21418 : :
21419 : 0 : extern "C" void SymbolTable_PutVarDeclTypeTok (unsigned int sym, unsigned int typetok)
21420 : : {
21421 : 0 : SymbolTable_PtrToSymbol pSym;
21422 : :
21423 : 0 : if (SymbolTable_IsParameter (sym))
21424 : : {
21425 : 0 : pSym = GetPsym (sym);
21426 : 0 : if (SymbolTable_IsParameterVar (sym))
21427 : : {
21428 : 0 : SymbolTable_PutVarDeclTypeTok (pSym->VarParam.ShadowVar, typetok);
21429 : : }
21430 : : else
21431 : : {
21432 : 0 : SymbolTable_PutVarDeclTypeTok (pSym->Param.ShadowVar, typetok);
21433 : : }
21434 : : }
21435 : 0 : else if (SymbolTable_IsVar (sym))
21436 : : {
21437 : : /* avoid dangling else. */
21438 : 0 : doPutVarDeclTypeTok (sym, typetok);
21439 : : }
21440 : 0 : }
21441 : :
21442 : :
21443 : : /*
21444 : : GetVarDeclTok - returns the TypeTok field associate with variable sym.
21445 : : */
21446 : :
21447 : 54 : extern "C" unsigned int SymbolTable_GetVarDeclTok (unsigned int sym)
21448 : : {
21449 : 108 : SymbolTable_PtrToSymbol pSym;
21450 : :
21451 : 108 : if (SymbolTable_IsParameter (sym))
21452 : : {
21453 : 54 : pSym = GetPsym (sym);
21454 : 54 : if (SymbolTable_IsParameterVar (sym))
21455 : : {
21456 : 6 : return SymbolTable_GetVarDeclTok (pSym->VarParam.ShadowVar);
21457 : : }
21458 : : else
21459 : : {
21460 : 48 : return SymbolTable_GetVarDeclTok (pSym->Param.ShadowVar);
21461 : : }
21462 : : }
21463 : 54 : else if (SymbolTable_IsVar (sym))
21464 : : {
21465 : : /* avoid dangling else. */
21466 : 54 : return doGetVarDeclTok (sym);
21467 : : }
21468 : : else
21469 : : {
21470 : : /* avoid dangling else. */
21471 : : return M2LexBuf_UnknownTokenNo;
21472 : : }
21473 : : /* static analysis guarentees a RETURN statement will be used before here. */
21474 : : __builtin_unreachable ();
21475 : : }
21476 : :
21477 : :
21478 : : /*
21479 : : PutVarDeclTok - assigns the VarTok field to typetok.
21480 : : sym can be a variable or parameter.
21481 : : */
21482 : :
21483 : 934882 : extern "C" void SymbolTable_PutVarDeclTok (unsigned int sym, unsigned int vartok)
21484 : : {
21485 : 934882 : SymbolTable_PtrToSymbol pSym;
21486 : :
21487 : 934882 : if (SymbolTable_IsParameter (sym))
21488 : : {
21489 : 0 : pSym = GetPsym (sym);
21490 : 0 : if (SymbolTable_IsParameterVar (sym))
21491 : : {
21492 : 0 : SymbolTable_PutVarDeclTok (pSym->VarParam.ShadowVar, vartok);
21493 : : }
21494 : : else
21495 : : {
21496 : 0 : SymbolTable_PutVarDeclTok (pSym->Param.ShadowVar, vartok);
21497 : : }
21498 : : }
21499 : 934882 : else if (SymbolTable_IsVar (sym))
21500 : : {
21501 : : /* avoid dangling else. */
21502 : 934882 : doPutVarDeclTok (sym, vartok);
21503 : : }
21504 : 934882 : }
21505 : :
21506 : :
21507 : : /*
21508 : : GetVarDeclFullTok - returns the full virtual token containing var: type.
21509 : : */
21510 : :
21511 : 492 : extern "C" unsigned int SymbolTable_GetVarDeclFullTok (unsigned int sym)
21512 : : {
21513 : 540 : SymbolTable_PtrToSymbol pSym;
21514 : :
21515 : 540 : pSym = GetPsym (sym);
21516 : 540 : if (SymbolTable_IsParameter (sym))
21517 : : {
21518 : 48 : if (SymbolTable_IsParameterVar (sym))
21519 : : {
21520 : 0 : return SymbolTable_GetVarDeclFullTok (pSym->VarParam.ShadowVar);
21521 : : }
21522 : : else
21523 : : {
21524 : 48 : return SymbolTable_GetVarDeclFullTok (pSym->Param.ShadowVar);
21525 : : }
21526 : : }
21527 : 492 : else if (SymbolTable_IsVar (sym))
21528 : : {
21529 : : /* avoid dangling else. */
21530 : 492 : return doGetVarDeclFullTok (sym);
21531 : : }
21532 : : else
21533 : : {
21534 : : /* avoid dangling else. */
21535 : : return M2LexBuf_UnknownTokenNo;
21536 : : }
21537 : : /* static analysis guarentees a RETURN statement will be used before here. */
21538 : : __builtin_unreachable ();
21539 : : }
21540 : :
21541 : :
21542 : : /*
21543 : : IsProcedureAnyNoReturn - return TRUE if any of the defined kinds
21544 : : of procedure sym is declared no return.
21545 : : */
21546 : :
21547 : 2169739 : extern "C" bool SymbolTable_IsProcedureAnyNoReturn (unsigned int sym)
21548 : : {
21549 : 2169739 : return IsProcedureAnyDefaultBoolean (sym, false, (SymbolTable_ProcAnyBoolean) {(SymbolTable_ProcAnyBoolean_t) SymbolTable_IsProcedureNoReturn});
21550 : : /* static analysis guarentees a RETURN statement will be used before here. */
21551 : : __builtin_unreachable ();
21552 : : }
21553 : :
21554 : :
21555 : : /*
21556 : : GetNthParamAny - returns the nth parameter from the order
21557 : : proper procedure, forward declaration
21558 : : or definition module procedure.
21559 : : */
21560 : :
21561 : 13385553 : extern "C" unsigned int SymbolTable_GetNthParamAny (unsigned int sym, unsigned int ParamNo)
21562 : : {
21563 : 13385553 : SymbolTable_ProcedureKind kind;
21564 : :
21565 : 22797283 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
21566 : : {
21567 : 22797283 : if (SymbolTable_GetProcedureParametersDefined (sym, kind))
21568 : : {
21569 : 13385553 : return SymbolTable_GetNthParam (sym, kind, ParamNo);
21570 : : }
21571 : : }
21572 : 0 : M2Error_InternalError ((const char *) "no procedure kind exists", 24);
21573 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
21574 : : __builtin_unreachable ();
21575 : : }
21576 : :
21577 : :
21578 : : /*
21579 : : NoOfParamAny - return the number of parameters for sym.
21580 : : */
21581 : :
21582 : 16087146 : extern "C" unsigned int SymbolTable_NoOfParamAny (unsigned int sym)
21583 : : {
21584 : 16087146 : SymbolTable_ProcedureKind kind;
21585 : 16087146 : SymbolTable_PtrToSymbol pSym;
21586 : :
21587 : 16087146 : AssertInRange (sym);
21588 : 16087146 : pSym = GetPsym (sym);
21589 : 16087146 : switch (pSym->SymbolType)
21590 : : {
21591 : : case SymbolTable_ErrorSym:
21592 : : return 0;
21593 : : break;
21594 : :
21595 : : case SymbolTable_ProcedureSym:
21596 : 29422475 : for (kind=SymbolTable_ProperProcedure; kind<=SymbolTable_DefProcedure; kind= static_cast<SymbolTable_ProcedureKind>(static_cast<int>(kind+1)))
21597 : : {
21598 : 27713543 : if (SymbolTable_GetProcedureParametersDefined (sym, kind))
21599 : : {
21600 : 11044587 : return SymbolTable_NoOfParam (sym, kind);
21601 : : }
21602 : : }
21603 : : break;
21604 : :
21605 : 3333615 : case SymbolTable_ProcTypeSym:
21606 : 3333615 : return Lists_NoOfItemsInList (pSym->ProcType.ListOfParam);
21607 : 12 : break;
21608 : :
21609 : :
21610 : 12 : default:
21611 : 12 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
21612 : : break;
21613 : : }
21614 : : return 0;
21615 : : /* static analysis guarentees a RETURN statement will be used before here. */
21616 : : __builtin_unreachable ();
21617 : : }
21618 : :
21619 : :
21620 : : /*
21621 : : SetReturnOptional - sets the ReturnOptional field in the Procedure:kind or
21622 : : ProcType symboltable entry.
21623 : : */
21624 : :
21625 : 1267964 : extern "C" void SymbolTable_SetReturnOptional (unsigned int sym, SymbolTable_ProcedureKind kind, bool isopt)
21626 : : {
21627 : 1267964 : SymbolTable_PtrToSymbol pSym;
21628 : :
21629 : 1267964 : pSym = GetPsym (sym);
21630 : 1267964 : switch (pSym->SymbolType)
21631 : : {
21632 : 1260628 : case SymbolTable_ProcedureSym:
21633 : 1260628 : pSym->Procedure.Decl.array[kind-SymbolTable_ProperProcedure].ReturnOptional = isopt;
21634 : 1260628 : break;
21635 : :
21636 : 7336 : case SymbolTable_ProcTypeSym:
21637 : 7336 : pSym->ProcType.ReturnOptional = isopt;
21638 : 7336 : break;
21639 : :
21640 : :
21641 : 0 : default:
21642 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
21643 : 1267964 : break;
21644 : : }
21645 : 1267964 : }
21646 : :
21647 : :
21648 : : /*
21649 : : UsesOptArgAny - returns TRUE if procedure Sym:kind uses an optional argument.
21650 : : */
21651 : :
21652 : 172047 : extern "C" bool SymbolTable_UsesOptArgAny (unsigned int Sym)
21653 : : {
21654 : 172047 : SymbolTable_PtrToSymbol pSym;
21655 : :
21656 : 172047 : pSym = GetPsym (Sym);
21657 : 172047 : switch (pSym->SymbolType)
21658 : : {
21659 : : case SymbolTable_ErrorSym:
21660 : : return false;
21661 : 171327 : break;
21662 : :
21663 : 171327 : case SymbolTable_ProcedureSym:
21664 : 171327 : return IsProcedureAnyDefaultBoolean (Sym, false, (SymbolTable_ProcAnyBoolean) {(SymbolTable_ProcAnyBoolean_t) SymbolTable_UsesOptArg});
21665 : 720 : break;
21666 : :
21667 : 720 : case SymbolTable_ProcTypeSym:
21668 : 720 : return pSym->ProcType.HasOptArg;
21669 : 0 : break;
21670 : :
21671 : :
21672 : 0 : default:
21673 : 0 : M2Error_InternalError ((const char *) "expecting a Procedure or ProcType symbol", 40);
21674 : : break;
21675 : : }
21676 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
21677 : : __builtin_unreachable ();
21678 : : }
21679 : :
21680 : :
21681 : : /*
21682 : : GetProcedureKindDesc - return a string describing kind.
21683 : : */
21684 : :
21685 : 168 : extern "C" DynamicStrings_String SymbolTable_GetProcedureKindDesc (SymbolTable_ProcedureKind kind)
21686 : : {
21687 : 168 : if (kind == SymbolTable_ProperProcedure)
21688 : : {
21689 : 84 : return DynamicStrings_InitString ((const char *) "proper procedure", 16);
21690 : : }
21691 : 84 : else if (kind == SymbolTable_ForwardProcedure)
21692 : : {
21693 : : /* avoid dangling else. */
21694 : 24 : return DynamicStrings_InitString ((const char *) "forward procedure", 17);
21695 : : }
21696 : 60 : else if (kind == SymbolTable_DefProcedure)
21697 : : {
21698 : : /* avoid dangling else. */
21699 : 60 : return DynamicStrings_InitString ((const char *) "definition procedure", 20);
21700 : : }
21701 : 0 : M2Error_InternalError ((const char *) "unknown kind value", 18);
21702 : : ReturnException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/SymbolTable.def", 20, 1);
21703 : : __builtin_unreachable ();
21704 : : }
21705 : :
21706 : 14232 : extern "C" void _M2_SymbolTable_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
21707 : : {
21708 : 14232 : Init ();
21709 : 14232 : }
21710 : :
21711 : 0 : extern "C" void _M2_SymbolTable_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
21712 : : {
21713 : 0 : }
|