Sign in Join
Wiki copytemporary

Symbol entries/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Symbol entries/fr

OldNewLine
1+Retour au contenu [[FPC internals/fr|FPC internals]]
2+
3+# Entrées de symbole
4+
5+## Architecture
6+
7+> **Warning:** Dernière mise à jour pour FPC version 1.0.x
8+
9+Il y a différents types de symbole possibles, chacun ayant différents champs des autres. Chaque symbole a une signature spécifique pour indiquer quel type d'entrée il s'agit. Chaque entrée dans la table de symboles est effectivement une des entrées de symbole décrite dans les sections suivantes. La relation entre une entrée de symbole, une définition de type, et l'entrée de symbole du nom de type est montrée dans la figure suivante:
10+
11+<http://www.pjh2.de/fpc/CompilerInternalsFigure06.png>
12+
13+## Types d'entrée de symbole
14+
15+> **Warning:** Dernière mise à jour pour FPC version 1.0.x
16+
17+### Type de base de symbole (TSym)
18+
19+Tous les types d'entrée dans la table de symboles sont dérivés de la classe de base qui contient l'information sur le type du symbole aussi bien que sur le propriétaire de l'entrée de symbole.
20+
21+``` pascal
22+type
23+ PSym = ^TSym;
24+ TSym = object(TSymTableEntry)
25+ SymOptions: TSymOptions; // Indicate the access scope of the symbol
26+ FileInfo: TFilePosInfo;
27+ Refs: Longint; // Indicates how many times this label is refered in the
28+ // parsed code (is only used with variable and assembler
29+ // label symbols).
30+ LastRef: PRef;
31+ DefRef: PRef;
32+ LastWritten: PRef;
33+ RefCount: Longint; // Browser information indicating the reference count
34+ Typ: TSymTyp; // Indicates the symbol type
35+ IsStabWritten: Boolean; // Set to TRUE if the stabs debugging information has
36+ // been written for this symbol.
37+ end;
38+```
39+
40+| TSymTyp | Description |
41+|----|----|
42+| AbstractSym | C'(est un symbole abstrait spécial (ne devrait jamais être rencontré) |
43+| VarSym | Ce symbole est une déclaration de variable dans la section *var*, ou un paramètre *var* |
44+| TypeSym | Ce symbole est un nom de type |
45+| ProcSym | Ce symbole est un nom de routine ou de méthode |
46+| UnitSym | Ce symbole est un nom d'unité |
47+| ProgramSym | Ce symbole est un nom de programme principal |
48+| ConstSym | Ce symbole est une constante |
49+| EnumSym | Ce symbole est un symbole d'énumération (un élément dans une énumeration) |
50+| TypedConstSym | Ce symbole est une variable pré-initialisée (constante typée Pascal) |
51+| ErrorSym | Ce symbole est créé pour une génération d'erreur |
52+| SysSym | Ce symbole représenté une routine d'unité *system* inline-ée |
53+| LabelSym | Ce symbole représente une étiquette dans une déclaration Pascal d'étiquette |
54+| AbsoluteSym | Ce symbole représente un symbole suivant une déclaration de variable *absolute* |
55+| PropertySym | Ce symbole est un nom de propriété |
56+| FuncRetSym | Ce symbole est le nom de la valeur de retour pour les fonctions |
57+| MacroSym | Ce symbole est un symbole de macro (tout comme un *\#define* en C) |
58+
59+### Symbole d'Etiquette (TLabelSym)
60+
61+L'entrée de table de symboles d'étiquette est seulement créé quand une étiquette Pascal est déclarée via le mot-clé *label*. L'objet expose publiquement les champs suivants:
62+
63+``` pascal
64+type
65+ PLabelSym = ^TLabelSym;
66+ TLabelSym = object(TSym)
67+ Used: Boolean; // Set to TRUE if this pascal label is used using a goto
68+ // or in an assembler statement
69+ Defined: Boolean; // Set to TRUE if this label has been declared
70+ Lab: PAsmLabel; // Points to the actual assembler label structure which
71+ // will be emitted by the code generator
72+ Code: Pointer;
73+ end;
74+```
75+
76+### Symbole d'Unité (TUnitSym)
77+
78+Le symbole d'unité est créé et ajouté à une table de symbole chaque fois que la clause *uses* est analysée et qu'un nom d'unité est trouvé, c'est aussi utilisé lors de la compilation d'une unité, avec la première entrée dans cette table de symbole devenant le nom d'unité se compilant. L'entrée de symbole d'unité fait partie d'une liste chaînée utilisée dans la table de symboles d'unité.
79+
80+``` pascal
81+type
82+ PUnitSym = ^TUnitSym;
83+ TUnitSym = object(TSym)
84+ UnitSymTable: PUnitSymTable; // Pointer to the global symbol table for that
85+ // unit, containing entries for each public?
86+ // symbol in that unit
87+ PrevSym: PUnitSym; // Pointer to previous entry in the linked list
88+ end;
89+```
90+
91+### Symbole Macro (TMacroSym)
92+
93+Les symboles de macro sont utilisés dans le préprocesseur pour des instructions de compilation conditionnelle. Il existe une telle entrée créée pour chaque directive \$define, elle contient la valeur du define (stockée sous forme de chaîne).
94+
95+``` pascal
96+type
97+ PMacroSym = ^TMacroSym;
98+ TMacroSym = object(TSym)
99+ Defined: Boolean; // TRUE if the symbol has been defined with a
100+ // $define directive, or false if it has been
101+ // undefined with a $undef directive
102+ Defined_At_Startup: Boolean; // TRUE if the symbol is a system wide define
103+ Is_Used: Boolean; // TRUE if the define has been used such as in
104+ // a $ifdef directive.
105+ BufText: PChar; // The actual string text of the define
106+ BufLength: Longint; // The actual string length of the define
107+ end;
108+```
109+
110+### Symbole Erreur (TErrorSym)
111+
112+Ce symbole est en fait une entrée de table de symboles vide. Lorsque l'analyseur rencontre une erreur lors de l'analyse d'un symbole, au lieu de ne rien mettre dans la table des symboles, il place cette entrée de symbole. Cela évite les accès mémoire illégaux ultérieurement lors de l'analyse.
113+
114+### Symbole Procédure (TProcSym)
115+
116+Le symbole de procédure est créé chaque fois qu'une routine est définie dans le code. Cela peut être soit une déclaration avancée (*forward*) ou l'implémentaiton réelle de la routine. Après la création, le symbole est ajouté dans la pile de table de symbole appropriée.
117+
118+``` pascal
119+type
120+ PProcSym = ^TProcSym;
121+ TProcSym = object(TSym)
122+ Is_Global: Boolean; // Set if the routine is exported by the unit
123+ Definition: PProcDef; // Procedure definition, including parameter
124+ // information and return values
125+ end;
126+```
127+
128+### Symbole Type (TTypeSym)
129+
130+Le symbole de Type est créé chaque fois qu'une nouvelle déclaration de type est faite, il est alors insérée dans la pile courante de la table symbole. De plus, chaque fois que le compilateur compile un module, les types de base par défaut sont initialisés et ajoutés dans la table des symboles (*psystem.pas*). Le symbole de Type contient le nom d'un type, ainsi qu'un pointeur vers sa définition de type.
131+
132+``` pascal
133+type
134+ PTypeSym = ^TTypeSym;
135+ TTypeSym = object(TSym)
136+ ResType: TType; // Contains base type information as well as the type
137+ // definition
138+ end;
139+```
140+
141+### Symbole Variable (TVarSym)
142+
143+Déclaration de variables, aussi bien les paramètres qui sont passés aux routines que les types de symboles Variable. L'accès à l'information, aussi bien que l'information de type et l'information d'optimisation sont enregistrés dans ce type de symbole.
144+
145+``` pascal
146+type
147+ PVarSym = ^TVarSym;
148+ TVarSym = object(TSym)
149+ Reg: TRegister; // If the value is a register variable, the reg field will
150+ // be different then R_NO
151+ VarSpez: TVarSpez; // Indicates the variable type (parameters only) (Cf. 32).
152+ Address: Longint; // In the case where the variable is a routine parameter,
153+ // this indicates the positive offset from theframe_pointer
154+ // to access this variable. In the caseof a local variable,
155+ // this field indicates the negative offset from the
156+ // frame_pointer. to access this variable.
157+ LocalVarSym: PVarSym;
158+ VarType: TType; // Contains base type information as well as the type
159+ // definition
160+ VarOptions: TVarOptions; // Flags for this variable (Cf. 31)
161+ VarState: TVarState; // Indicates the state of the variable, if it’s used or
162+ // declared
163+ end;
164+```
165+
166+| TVarOptions | Description |
167+|----|----|
168+| vo_regable | La variable peut être placée dans un registre matériel générique |
169+| vo_is_c_var | La variable est importée depuis un module C |
170+| vo_is_external | La variable est déclarée *external* |
171+| vo_is_Dll_var | La variable est une variable de bibliothèque partagée |
172+| vo_is_thread_var | La variable est déclarée comme étant thread safe |
173+| vo_fpuregable | La variable peut être placée dans un registre matériel en virgule flottante |
174+| vo_is_local_copy |   |
175+| vo_is_const | inutilisé et inutile |
176+| vo_is_exported | La variable est is déclarée comme exportée dans une bibliothèque à liaison dynamique |
177+
178+| TVarSpez | Description |
179+|----------|----------------------------------------------------------|
180+| vs_value | C'est un paramètre valeur |
181+| vs_const | C'est un paramètre constant, une propriété ou un tableau |
182+| vs_var | C'est un paramètre variable |
183+
184+### Symbole Propriétét (TPropertySym)
185+
186+``` pascal
187+type
188+ PPropertySym = ^TPropertySym;
189+ TPropertySym = object(TSym)
190+ PropOptions: TPropertyOptions; // ???
191+ PropType: TType; // Indicates the type of the property
192+ PropOverriden: PPropertySym; // ???
193+ IndexType: TType;
194+ Index: Longint; // ????
195+ Default: Longint; // ???
196+ ReadAccess: PSymList; // ???
197+ WriteAccess: PSymList; // ???
198+ StoredAccess: PSymList; // ???
199+ end;
200+```
201+
202+### Symbole Valeur de retour de fonction
203+
204+...
205+
206+### Symbole déclaré Absolute (TAbsoluteSym)
207+
208+Ce symbole représente une variable déclarée avec le mot-clé `absolu`. L'adresse de l'objet `TVarSym` contient l'adresse de la variable dans le cas d'une variable d'adresse absolue.
209+
210+Les types possibles de symboles *absolute* proviennent d'une référence d'objet externe, d'une adresse absolue (pour certaines cibles uniquement) ou au-dessus d'une autre variable déclarée.
211+
212+``` pascal
213+type
214+ PAbsoluteSym = ^TAbsoluteSym;
215+ TAbsoluteSym = object(TVarSym)
216+ AbsTyp: TAbsoluteTyp; // Indicates the type of absolute symbol it is
217+ AbsSeg: Boolean; // ???
218+ Ref: PSym; // In case abstyp is tovar, this field indicates the
219+ // symbol which is overlaid with this symbol. Otherwise
220+ // this field is unused.
221+ AsmName: PString; // In case abstyp is toasm, this field indicates label
222+ // name for the variable.
223+ end;
224+```
225+
226+| TAbsoluteTyp | Description |
227+|----|----|
228+| toVar | Le symbole sera déclaré au-dessus d'un autre symbole ((variable ou constante typée) |
229+| toAsm | La variable est importée depuis un module externe |
230+| toAddr | La variable est déclarée comme étant à un adresse absolue |
231+
232+### Symbole constante typée
233+
234+...
235+
236+### Symbole Constante (TConstSym)
237+
238+Ce type de symbole contiendra toutes les constantes définies et rencontrées lors de l'analyse. Les valeurs des constantes sont également définies dans cette entrée de type de symbole.
239+
240+``` pascal
241+type
242+ PConstSym = ^TConstSym;
243+ TConstSym = object(TSym)
244+ ConstType: TType; // Type information for this constant (?).
245+ ConstTyp: TConstTyp; // Indicates the type of the constant
246+ ResStrIndex: Longint; // If this is a resource string constant, it indicates the
247+ // index in the resource table
248+ Value: Longint; // In certain cases, contains the value of the constant
249+ Len: Longint;
250+ end;
251+```
252+
253+### Symbole Enumération
254+
255+...
256+
257+### Symbole Programme
258+
259+Le type de symbole de Programme (`TProgramSym`) est utilisé pour stocker le nom du programme, qui est déclaré en utilisant `program` dans le code source pascal. Ce type de symbole n'est actuellement pas utilisé dans FreePascal.
260+
261+### Symbole Sys
262+
263+Le type de symbole `TSysSym` est utilisé pour charger les index dans la table des symboles des routines internes qui sont directement inline-ées par le compilateur. Il a un seul champ, qui est l'index de la routine en ligne.
264+
265+## Symbole Interface
266+
267+Prochain chapitre: [[Type information/fr|Information de type]]
268+
269+---
270+*From the Free Pascal wiki, page "Symbol entries/fr", as it stood on 2020-12-28 after a change by E-ric, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history