aboutsummaryrefslogtreecommitdiffstats
path: root/types.ads
blob: 9c2ce28b62ae3c195c774fb2a62137495d96dd81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
--  Common types.
--  Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold
--
--  GHDL is free software; you can redistribute it and/or modify it under
--  the terms of the GNU General Public License as published by the Free
--  Software Foundation; either version 2, or (at your option) any later
--  version.
--
--  GHDL is distributed in the hope that it will be useful, but WITHOUT ANY
--  WARRANTY; without even the implied warranty of MERCHANTABILITY or
--  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
--  for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with GHDL; see the file COPYING.  If not, write to the Free
--  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
--  02111-1307, USA.
with Interfaces;

package Types is
   pragma Preelaborate (Types);

   -- A tri state type.
   type Tri_State_Type is (Unknown, False, True);

   --  32 bits integer.
   type Int32 is range -2**31 .. 2**31 - 1;
   for Int32'Size use 32;

   subtype Nat32 is Int32 range 0 .. Int32'Last;
   subtype Pos32 is Nat32 range 1 .. Nat32'Last;

   type Uns32 is new Interfaces.Unsigned_32;

   type Fp64 is new Interfaces.IEEE_Float_64;

   -- iir_int32 is aimed at containing integer literal values.
   type Iir_Int32 is new Interfaces.Integer_32;

   -- iir_int64 is aimed at containing units values.
   type Iir_Int64 is new Interfaces.Integer_64;

   -- iir_fp32 is aimed at containing floating point values.
   type Iir_Fp32 is new Interfaces.IEEE_Float_32;

   -- iir_fp64 is aimed at containing floating point values.
   subtype Iir_Fp64 is Fp64;

   --  iir_index32 is aimed at containing an array index.
   type Iir_Index32 is new Nat32;

   -- Useful type.
   type String_Acc is access String;
   type String_Cst is access constant String;
   type String_Acc_Array is array (Natural range <>) of String_Acc;

   type String_Fat is array (Pos32) of Character;
   type String_Fat_Acc is access String_Fat;

   -- Array of iir_int32.
   -- Used by recording feature of scan.
   type Iir_Int32_Array is array (Natural range <>) of Iir_Int32;
   type Iir_Int32_Array_Acc is access Iir_Int32_Array;

   -- Type of a name table element.
   -- The name table is defined in the name_table package.
   type Name_Id is new Nat32;

   -- null entry in the name table.
   -- It is sure that this entry is never allocated.
   Null_Identifier: constant Name_Id := 0;

   --  Type of a string stored into the string table.
   type String_Id is new Nat32;
   for String_Id'Size use 32;

   Null_String : constant String_Id := 0;

   -- Index type is the source file table.
   -- This table is defined in the files_map package.
   type Source_File_Entry is new Nat32;
   No_Source_File_Entry: constant Source_File_Entry := 0;

   --  FIXME: additional source file entries to create:
   --  *std.standard*: for those created in std.standard
   --  *error*: for erroneous one
   --  *command-line*: used for identifiers from command line
   --    (eg: unit to elab)

   -- Index into a file buffer.
   type Source_Ptr is new Int32;

   --  Lower boundary of any file buffer.
   Source_Ptr_Org : constant Source_Ptr := 0;

   --  Bad file buffer index (used to mark no line).
   Source_Ptr_Bad : constant Source_Ptr := -1;

   -- This type contains everything necessary to get a file name, a line
   -- number and a column number.
   type Location_Type is new Nat32;
   for Location_Type'Size use 32;
   Location_Nil : constant Location_Type := 0;

   -- Type of a file buffer.
   type File_Buffer is array (Source_Ptr range <>) of Character;
   type File_Buffer_Acc is access File_Buffer;

   --  PSL Node.
   type PSL_Node is new Int32;

   --  PSL NFA
   type PSL_NFA is new Int32;

   -- Indentation.
   -- This is used by all packages that display vhdl code or informations.
   Indentation : constant := 2;

   --  String representing a date/time (format is YYYYMMDDHHmmSS.sss).
   subtype Time_Stamp_String is String (1 .. 18);
   type Time_Stamp_Id is new String_Id;
   Null_Time_Stamp : constant Time_Stamp_Id := 0;

   --  Self-explaining: raised when an internal error (such as consistency)
   --  is detected.
   Internal_Error: exception;

   --  In some case, a low level subprogram can't handle error
   --  (e.g eval_pos).  In this case it is easier to raise an exception and
   --  let upper level subprograms handle the case.
   Node_Error : exception;
end Types;