summaryrefslogtreecommitdiff
path: root/translate
diff options
context:
space:
mode:
authorTristan Gingold2014-07-17 20:34:57 +0200
committerTristan Gingold2014-07-17 20:34:57 +0200
commitcaba1d1b21d9756ede50f40d53fbc816d3b84320 (patch)
treeee0b8459472a8e7aba4ab7465bc46c74be56cd33 /translate
parent1bc00453a725214de4964add2b7f8423d1a5d2da (diff)
downloadghdl-caba1d1b21d9756ede50f40d53fbc816d3b84320.tar.gz
ghdl-caba1d1b21d9756ede50f40d53fbc816d3b84320.tar.bz2
ghdl-caba1d1b21d9756ede50f40d53fbc816d3b84320.zip
vhdl 2008: visibility, more implicit subprograms, alias...
Use Type_Definition in type_declarator.
Diffstat (limited to 'translate')
-rw-r--r--translate/grt/grt-cbinding.c13
-rw-r--r--translate/grt/grt-files.adb23
-rw-r--r--translate/grt/grt-files.ads4
-rw-r--r--translate/grt/grt-vstrings.adb81
-rw-r--r--translate/grt/grt-vstrings.ads33
-rw-r--r--translate/trans_decls.ads2
-rw-r--r--translate/translation.adb134
7 files changed, 222 insertions, 68 deletions
diff --git a/translate/grt/grt-cbinding.c b/translate/grt/grt-cbinding.c
index a913a44..4da06c5 100644
--- a/translate/grt/grt-cbinding.c
+++ b/translate/grt/grt-cbinding.c
@@ -46,6 +46,19 @@ __ghdl_snprintf_g (char *buf, unsigned int len, double val)
}
void
+__ghdl_snprintf_nf (char *buf, unsigned int len, int ndigits, double val)
+{
+ snprintf (buf, len, "%.*f", ndigits, val);
+}
+
+void
+__ghdl_snprintf_fmtf (const char *buf, unsigned int len,
+ const char *format, double v)
+{
+ snprintf (buf, len, format, v);
+}
+
+void
__ghdl_fprintf_g (FILE *stream, double val)
{
fprintf (stream, "%g", val);
diff --git a/translate/grt/grt-files.adb b/translate/grt/grt-files.adb
index 1688a26..30d51cf 100644
--- a/translate/grt/grt-files.adb
+++ b/translate/grt/grt-files.adb
@@ -32,6 +32,8 @@ pragma Elaborate_All (Grt.Table);
package body Grt.Files is
subtype C_Files is Grt.Stdio.FILEs;
+ Auto_Flush : constant Boolean := False;
+
type File_Entry_Type is record
Stream : C_Files;
Signature : Ghdl_C_String;
@@ -307,7 +309,9 @@ package body Grt.Files is
-- FIXME: check r
-- Write '\n'.
R1 := fputc (Character'Pos (Nl), Res);
- R1 := fflush (Res);
+ if Auto_Flush then
+ fflush (Res);
+ end if;
end Ghdl_Text_Write;
procedure Ghdl_Write_Scalar (File : Ghdl_File_Index;
@@ -316,8 +320,6 @@ package body Grt.Files is
is
Res : C_Files;
R : size_t;
- R1 : int;
- pragma Unreferenced (R1);
begin
Res := Get_File (File);
Check_File_Mode (File, False);
@@ -329,7 +331,9 @@ package body Grt.Files is
if R /= 1 then
Error ("write_scalar failed");
end if;
- R1 := fflush (Res);
+ if Auto_Flush then
+ fflush (Res);
+ end if;
end Ghdl_Write_Scalar;
procedure Ghdl_Read_Scalar (File : Ghdl_File_Index;
@@ -433,5 +437,16 @@ package body Grt.Files is
begin
File_Close (File, False);
end Ghdl_File_Close;
+
+ procedure Ghdl_File_Flush (File : Ghdl_File_Index)
+ is
+ Stream : C_Files;
+ begin
+ Stream := Get_File (File);
+ if Stream = NULL_Stream then
+ return;
+ end if;
+ fflush (Stream);
+ end Ghdl_File_Flush;
end Grt.Files;
diff --git a/translate/grt/grt-files.ads b/translate/grt/grt-files.ads
index 2d4b105..14f9984 100644
--- a/translate/grt/grt-files.ads
+++ b/translate/grt/grt-files.ads
@@ -89,6 +89,8 @@ package Grt.Files is
procedure Ghdl_Text_File_Close (File : Ghdl_File_Index);
procedure Ghdl_File_Close (File : Ghdl_File_Index);
+
+ procedure Ghdl_File_Flush (File : Ghdl_File_Index);
private
pragma Export (Ada, Ghdl_File_Endfile, "__ghdl_file_endfile");
@@ -116,4 +118,6 @@ private
pragma Export (C, Ghdl_Text_File_Close, "__ghdl_text_file_close");
pragma Export (C, Ghdl_File_Close, "__ghdl_file_close");
+
+ pragma Export (C, Ghdl_File_Flush, "__ghdl_file_flush");
end Grt.Files;
diff --git a/translate/grt/grt-vstrings.adb b/translate/grt/grt-vstrings.adb
index 005bc89..30c58ab 100644
--- a/translate/grt/grt-vstrings.adb
+++ b/translate/grt/grt-vstrings.adb
@@ -338,4 +338,85 @@ package body Grt.Vstrings is
Last := P - 1;
end To_String;
+ procedure To_String (Str : out String_Real_Digits;
+ Last : out Natural;
+ N : Ghdl_F64;
+ Nbr_Digits : Ghdl_I32)
+ is
+ procedure Snprintf_Nf (Str : in out String;
+ Len : Natural;
+ Ndigits : Ghdl_I32;
+ V : Ghdl_F64);
+ pragma Import (C, Snprintf_Nf, "__ghdl_snprintf_nf");
+ begin
+ Snprintf_Nf (Str, Str'Length, Nbr_Digits, N);
+ Last := strlen (To_Ghdl_C_String (Str'Address));
+ end To_String;
+
+ procedure To_String (Str : out String_Real_Digits;
+ Last : out Natural;
+ N : Ghdl_F64;
+ Format : Ghdl_C_String)
+ is
+ procedure Snprintf_Fmtf (Str : in out String;
+ Len : Natural;
+ Format : Ghdl_C_String;
+ V : Ghdl_F64);
+ pragma Import (C, Snprintf_Fmtf, "__ghdl_snprintf_fmtf");
+ begin
+ -- FIXME: check format ('%', f/g/e/a)
+ Snprintf_Fmtf (Str, Str'Length, Format, N);
+ Last := strlen (To_Ghdl_C_String (Str'Address));
+ end To_String;
+
+ procedure To_String (Str : out String_Time_Unit;
+ First : out Natural;
+ Value : Ghdl_I64;
+ Unit : Ghdl_I64)
+ is
+ V, U : Ghdl_I64;
+ D : Natural;
+ P : Natural := Str'Last;
+ Has_Digits : Boolean;
+ begin
+ -- Always work on negative values.
+ if Value > 0 then
+ V := -Value;
+ else
+ V := Value;
+ end if;
+
+ Has_Digits := False;
+ U := Unit;
+ loop
+ if U = 1 then
+ if Has_Digits then
+ Str (P) := '.';
+ P := P - 1;
+ else
+ Has_Digits := True;
+ end if;
+ end if;
+
+ D := Natural (-(V rem 10));
+ if D /= 0 or else Has_Digits then
+ Str (P) := Character'Val (48 + D);
+ P := P - 1;
+ Has_Digits := True;
+ end if;
+ U := U / 10;
+ V := V / 10;
+ exit when V = 0 and then U = 0;
+ end loop;
+ if not Has_Digits then
+ Str (P) := '0';
+ else
+ P := P + 1;
+ end if;
+ if Value < 0 then
+ P := P - 1;
+ Str (P) := '-';
+ end if;
+ First := P;
+ end To_String;
end Grt.Vstrings;
diff --git a/translate/grt/grt-vstrings.ads b/translate/grt/grt-vstrings.ads
index 0f5938e..94967bb 100644
--- a/translate/grt/grt-vstrings.ads
+++ b/translate/grt/grt-vstrings.ads
@@ -77,18 +77,49 @@ package Grt.Vstrings is
-- Copy RSTR to STR, and return length of the string to LEN.
procedure Copy (Rstr : Rstring; Str : in out String; Len : out Natural);
- -- FIRST is the index of the first character.
+ -- Write the image of N into STR padded to the right. FIRST is the index
+ -- of the first character, so the result is in STR (FIRST .. STR'last).
-- Requires at least 11 characters.
procedure To_String (Str : out String; First : out Natural; N : Ghdl_I32);
+ -- Write the image of N into STR padded to the right. FIRST is the index
+ -- of the first character, so the result is in STR (FIRST .. STR'last).
-- Requires at least 21 characters.
procedure To_String (Str : out String; First : out Natural; N : Ghdl_I64);
+ -- Write the image of N into STR. LAST is the index of the last character,
+ -- so the result is in STR (STR'first .. LAST).
-- Requires at least 24 characters.
-- Sign (1) + digit (1) + dot (1) + digits (15) + exp (1) + sign (1)
-- + exp_digits (4) -> 24.
procedure To_String (Str : out String; Last : out Natural; N : Ghdl_F64);
+ subtype String_Real_Digits is String (1 .. 128);
+
+ -- Write the image of N into STR using NBR_DIGITS digits after the decimal
+ -- point.
+ procedure To_String (Str : out String_Real_Digits;
+ Last : out Natural;
+ N : Ghdl_F64;
+ Nbr_Digits : Ghdl_I32);
+
+ subtype String_Real_Format is String (1 .. 128);
+
+ -- Write the image of N into STR using NBR_DIGITS digits after the decimal
+ -- point.
+ procedure To_String (Str : out String_Real_Digits;
+ Last : out Natural;
+ N : Ghdl_F64;
+ Format : Ghdl_C_String);
+
+ -- Write the image of VALUE to STR using UNIT as unit. The output is in
+ -- STR (FIRST .. STR'last).
+ subtype String_Time_Unit is String (1 .. 22);
+ procedure To_String (Str : out String_Time_Unit;
+ First : out Natural;
+ Value : Ghdl_I64;
+ Unit : Ghdl_I64);
+
private
subtype Fat_String is String (Positive);
type Fat_String_Acc is access Fat_String;
diff --git a/translate/trans_decls.ads b/translate/trans_decls.ads
index f5aab5c..9226c58 100644
--- a/translate/trans_decls.ads
+++ b/translate/trans_decls.ads
@@ -26,8 +26,6 @@ package Trans_Decls is
Ghdl_Psl_Cover_Failed : O_Dnode;
-- Procedure for report statement.
Ghdl_Report : O_Dnode;
- -- Ortho node for default report message.
- Ghdl_Assert_Default_Report : O_Dnode;
-- Register a process.
Ghdl_Process_Register : O_Dnode;
diff --git a/translate/translation.adb b/translate/translation.adb
index 38f4bdf..a80e40e 100644
--- a/translate/translation.adb
+++ b/translate/translation.adb
@@ -1978,7 +1978,13 @@ package body Translation is
-- Generate an error if VALUE (computed from EXPR which may be NULL_IIR
-- if not from a tree) is not in range specified by ATYPE.
- procedure Check_Range (Value : O_Dnode; Expr : Iir; Atype : Iir);
+ procedure Check_Range
+ (Value : O_Dnode; Expr : Iir; Atype : Iir; Loc : Iir);
+
+ -- Insert a scalar check for VALUE of type ATYPE. EXPR may be NULL_IIR.
+ function Insert_Scalar_Check
+ (Value : O_Enode; Expr : Iir; Atype : Iir; Loc : Iir)
+ return O_Enode;
-- The base type of EXPR and the base type of ATYPE must be the same.
-- If the type is a scalar type, and if a range check is needed, this
@@ -5101,7 +5107,7 @@ package body Translation is
raise Internal_Error;
when Iir_Kind_Type_Declaration
| Iir_Kind_Anonymous_Type_Declaration =>
- Atype := Get_Type (Decl);
+ Atype := Get_Type_Definition (Decl);
case Iir_Kinds_Type_And_Subtype_Definition
(Get_Kind (Atype)) is
when Iir_Kinds_Scalar_Type_Definition =>
@@ -7156,7 +7162,7 @@ package body Translation is
-- types not used before the full type declaration).
return;
end if;
- Ctype := Get_Type (Get_Type_Declarator (Def));
+ Ctype := Get_Type_Of_Type_Mark (Get_Type_Declarator (Def));
Info := Add_Info (Ctype, Kind_Incomplete_Type);
Info.Incomplete_Type := Def;
Info.Incomplete_Array := null;
@@ -8050,7 +8056,7 @@ package body Translation is
Tinfo : Type_Info_Acc;
Id : Name_Id;
begin
- Def := Get_Type (Decl);
+ Def := Get_Type_Definition (Decl);
if Get_Kind (Def) in Iir_Kinds_Subtype_Definition then
-- Also elaborate the base type, iff DEF and its BASE_TYPE have
@@ -8203,7 +8209,7 @@ package body Translation is
procedure Elab_Type_Declaration (Decl : Iir)
is
begin
- Elab_Type_Definition (Get_Type (Decl));
+ Elab_Type_Definition (Get_Type_Definition (Decl));
end Elab_Type_Declaration;
procedure Elab_Subtype_Declaration (Decl : Iir_Subtype_Declaration)
@@ -8971,9 +8977,8 @@ package body Translation is
function Need_Range_Check (Expr : Iir; Atype : Iir) return Boolean
is
- Info : Type_Info_Acc;
+ Info : constant Type_Info_Acc := Get_Info (Atype);
begin
- Info := Get_Info (Atype);
if Info.T.Nocheck_Low and Info.T.Nocheck_Hi then
return False;
end if;
@@ -8983,7 +8988,9 @@ package body Translation is
return True;
end Need_Range_Check;
- procedure Check_Range (Value : O_Dnode; Expr : Iir; Atype : Iir) is
+ procedure Check_Range
+ (Value : O_Dnode; Expr : Iir; Atype : Iir; Loc : Iir)
+ is
If_Blk : O_If_Block;
begin
if not Need_Range_Check (Expr, Atype) then
@@ -8995,32 +9002,40 @@ package body Translation is
and then Get_Type_Staticness (Atype) = Locally
then
if not Eval_Is_In_Bound (Eval_Static_Expr (Expr), Atype) then
- Chap6.Gen_Bound_Error (Expr);
+ Chap6.Gen_Bound_Error (Loc);
end if;
else
Open_Temp;
Start_If_Stmt (If_Blk, Not_In_Range (Value, Atype));
- Chap6.Gen_Bound_Error (Expr);
+ Chap6.Gen_Bound_Error (Loc);
Finish_If_Stmt (If_Blk);
Close_Temp;
end if;
end Check_Range;
+ function Insert_Scalar_Check
+ (Value : O_Enode; Expr : Iir; Atype : Iir; Loc : Iir)
+ return O_Enode
+ is
+ Var : O_Dnode;
+ begin
+ Var := Create_Temp_Init
+ (Get_Ortho_Type (Get_Base_Type (Atype), Mode_Value), Value);
+ Check_Range (Var, Expr, Atype, Loc);
+ return New_Obj_Value (Var);
+ end Insert_Scalar_Check;
+
function Maybe_Insert_Scalar_Check
(Value : O_Enode; Expr : Iir; Atype : Iir)
return O_Enode
is
Expr_Type : constant Iir := Get_Type (Expr);
- Var : O_Dnode;
begin
-- pragma Assert (Base_Type = Get_Base_Type (Atype));
if Get_Kind (Expr_Type) in Iir_Kinds_Scalar_Type_Definition
and then Need_Range_Check (Expr, Atype)
then
- Var := Create_Temp_Init
- (Get_Ortho_Type (Get_Base_Type (Atype), Mode_Value), Value);
- Check_Range (Var, Expr, Atype);
- return New_Obj_Value (Var);
+ return Insert_Scalar_Check (Value, Expr, Atype, Expr);
else
return Value;
end if;
@@ -9279,7 +9294,7 @@ package body Translation is
New_Dyadic_Op (Op, Left_Bound, Diff));
-- Check the right bounds is inside the bounds of the index type.
- Chap3.Check_Range (Var_Right, Null_Iir, Index_Type);
+ Chap3.Check_Range (Var_Right, Null_Iir, Index_Type, Null_Iir);
New_Assign_Stmt
(New_Selected_Acc_Value (New_Obj (Range_Ptr), Iinfo.T.Range_Right),
New_Obj_Value (Var_Right));
@@ -10614,7 +10629,7 @@ package body Translation is
procedure Translate_Type_Declaration (Decl : Iir)
is
begin
- Chap3.Translate_Named_Type_Definition (Get_Type (Decl),
+ Chap3.Translate_Named_Type_Definition (Get_Type_Definition (Decl),
Get_Identifier (Decl));
end Translate_Type_Declaration;
@@ -10625,7 +10640,7 @@ package body Translation is
begin
Push_Identifier_Prefix (Mark, Get_Identifier (Decl));
Push_Identifier_Prefix (Mark1, "BT");
- Chap3.Translate_Type_Definition (Get_Type (Decl));
+ Chap3.Translate_Type_Definition (Get_Type_Definition (Decl));
Pop_Identifier_Prefix (Mark1);
Pop_Identifier_Prefix (Mark);
end Translate_Anonymous_Type_Declaration;
@@ -10642,7 +10657,7 @@ package body Translation is
Mark : Id_Mark_Type;
begin
Push_Identifier_Prefix (Mark, Get_Identifier (Decl));
- Chap3.Translate_Bool_Type_Definition (Get_Type (Decl));
+ Chap3.Translate_Bool_Type_Definition (Get_Type_Definition (Decl));
Pop_Identifier_Prefix (Mark);
end Translate_Bool_Type_Declaration;
@@ -15378,25 +15393,13 @@ package body Translation is
procedure Translate_Assign
(Target : Mnode; Val : O_Enode; Expr : Iir; Target_Type : Iir)
is
- T_Info : Type_Info_Acc;
+ T_Info : constant Type_Info_Acc := Get_Info (Target_Type);
begin
- T_Info := Get_Info (Target_Type);
case T_Info.Type_Mode is
when Type_Mode_Scalar =>
- if not Chap3.Need_Range_Check (Expr, Target_Type) then
- New_Assign_Stmt (M2Lv (Target), Val);
- else
- declare
- V : O_Dnode;
- begin
- Open_Temp;
- V := Create_Temp_Init (T_Info.Ortho_Type (Mode_Value),
- Val);
- Chap3.Check_Range (V, Expr, Target_Type);
- New_Assign_Stmt (M2Lv (Target), New_Obj_Value (V));
- Close_Temp;
- end;
- end if;
+ New_Assign_Stmt
+ (M2Lv (Target),
+ Chap3.Maybe_Insert_Scalar_Check (Val, Expr, Target_Type));
when Type_Mode_Acc
| Type_Mode_File =>
New_Assign_Stmt (M2Lv (Target), Val);
@@ -16229,14 +16232,17 @@ package body Translation is
(Expr : O_Enode; Expr_Type : Iir; Res_Type : Iir; Loc : Iir)
return O_Enode
is
- Res_Info : Type_Info_Acc;
+ Res_Info : constant Type_Info_Acc := Get_Info (Res_Type);
+ Res : O_Enode;
begin
- Res_Info := Get_Info (Res_Type);
case Get_Kind (Res_Type) is
when Iir_Kinds_Scalar_Type_Definition =>
- -- If res_type = expr_type, do not convert.
- -- FIXME: range check ?
- return New_Convert_Ov (Expr, Res_Info.Ortho_Type (Mode_Value));
+ Res := New_Convert_Ov (Expr, Res_Info.Ortho_Type (Mode_Value));
+ if Chap3.Need_Range_Check (Null_Iir, Res_Type) then
+ Res := Chap3.Insert_Scalar_Check
+ (Res, Null_Iir, Res_Type, Loc);
+ end if;
+ return Res;
when Iir_Kinds_Array_Type_Definition =>
if Get_Constraint_State (Res_Type) = Fully_Constrained then
return Translate_Array_Subtype_Conversion
@@ -17784,7 +17790,7 @@ package body Translation is
Finish_If_Stmt (If_Blk);
-- Check the right bounds is inside the bounds of the
-- index type.
- Chap3.Check_Range (Var_Right, Null_Iir, Index_Type);
+ Chap3.Check_Range (Var_Right, Null_Iir, Index_Type, Subprg);
New_Assign_Stmt
(M2Lv (Chap3.Range_To_Right
(Chap3.Bounds_To_Range (V_Bounds, Arr_Type, 1))),
@@ -18739,10 +18745,6 @@ package body Translation is
when Iir_Predefined_Now_Function =>
null;
- when Iir_Predefined_Array_To_String =>
- -- Not yet supported!
- null;
-
when others =>
Error_Kind ("translate_implicit_subprogram ("
& Iir_Predefined_Functions'Image (Kind) & ")",
@@ -18809,7 +18811,7 @@ package body Translation is
V := Create_Temp (Ret_Info.Ortho_Type (Mode_Value));
New_Assign_Stmt (New_Obj (V), R);
Stack2_Release;
- Chap3.Check_Range (V, Expr, Ret_Type);
+ Chap3.Check_Range (V, Expr, Ret_Type, Expr);
Gen_Return_Value (New_Obj_Value (V));
else
Gen_Return_Value (R);
@@ -20379,7 +20381,9 @@ package body Translation is
Last_Individual : Natural;
Ptr : O_Lnode;
In_Conv : Iir;
+ In_Expr : Iir;
Out_Conv : Iir;
+ Out_Expr : Iir;
Formal_Object_Kind : Object_Kind_Type;
Bounds : O_Enode;
Obj : Iir;
@@ -20463,10 +20467,15 @@ package body Translation is
Ptr := New_Selected_Element
(New_Obj (Res), Formal_Info.Interface_Field);
Param := Lv2M (Ptr, Ftype_Info, Mode_Value);
+ if In_Conv /= Null_Iir then
+ In_Expr := In_Conv;
+ else
+ In_Expr := Act;
+ end if;
Chap7.Translate_Assign
(Param,
Do_Conversion (In_Conv, Act, Params (Pos)),
- In_Conv, --FIXME: may be null.
+ In_Expr,
Formal_Type);
end if;
elsif Ftype_Info.Type_Mode not in Type_Mode_By_Value then
@@ -20635,13 +20644,18 @@ package body Translation is
if Formal_Info.Interface_Field /= O_Fnode_Null then
-- OUT parameters.
Out_Conv := Get_Out_Conversion (El);
+ if Out_Conv = Null_Iir then
+ Out_Expr := Formal;
+ else
+ Out_Expr := Out_Conv;
+ end if;
Ptr := New_Selected_Element
(New_Obj (Res), Formal_Info.Interface_Field);
Param := Lv2M (Ptr, Ftype_Info, Mode_Value);
Chap7.Translate_Assign (Params (Pos),
Do_Conversion (Out_Conv, Formal,
Param),
- Out_Conv, --FIXME: use real expr.
+ Out_Expr,
Get_Type (Get_Actual (El)));
elsif Base_Formal /= Formal then
-- By individual.
@@ -24484,7 +24498,7 @@ package body Translation is
case Get_Kind (Prefix) is
when Iir_Kind_Type_Declaration
| Iir_Kind_Subtype_Declaration =>
- Arr := T2M (Get_Type (Prefix), Mode_Value);
+ Arr := T2M (Get_Type_Of_Type_Mark (Prefix), Mode_Value);
when others =>
Arr := Chap6.Translate_Name (Prefix);
end case;
@@ -24702,7 +24716,8 @@ package body Translation is
end case;
New_Assign_Stmt (New_Obj (Res_Var), New_Convert_Ov (Val, Res_Type));
- Chap3.Check_Range (Res_Var, Attr, Get_Type (Get_Prefix (Attr)));
+ Chap3.Check_Range
+ (Res_Var, Attr, Get_Type_Of_Type_Mark (Get_Prefix (Attr)), Attr);
return New_Obj_Value (Res_Var);
end Translate_Val_Attribute;
@@ -24718,7 +24733,7 @@ package body Translation is
(New_Obj (T),
New_Convert_Ov (Chap7.Translate_Expression (Get_Parameter (Attr)),
Ttype));
- Chap3.Check_Range (T, Attr, Res_Type);
+ Chap3.Check_Range (T, Attr, Res_Type, Attr);
return New_Obj_Value (T);
end Translate_Pos_Attribute;
@@ -25231,7 +25246,8 @@ package body Translation is
Assoc : O_Assoc_List;
Conv : O_Tnode;
begin
- Prefix_Type := Get_Base_Type (Get_Type (Get_Prefix (Attr)));
+ Prefix_Type :=
+ Get_Base_Type (Get_Type_Of_Type_Mark (Get_Prefix (Attr)));
Pinfo := Get_Info (Prefix_Type);
Res := Create_Temp (Std_String_Node);
Create_Temp_Stack2_Mark;
@@ -25293,7 +25309,8 @@ package body Translation is
Subprg : O_Dnode;
Assoc : O_Assoc_List;
begin
- Prefix_Type := Get_Base_Type (Get_Type (Get_Prefix (Attr)));
+ Prefix_Type :=
+ Get_Base_Type (Get_Type_Of_Type_Mark (Get_Prefix (Attr)));
Pinfo := Get_Info (Prefix_Type);
case Pinfo.Type_Mode is
when Type_Mode_B2 =>
@@ -26986,7 +27003,7 @@ package body Translation is
Info : Type_Info_Acc;
Rti_Type : O_Tnode;
begin
- Ndef := Get_Type (Get_Type_Declarator (Def));
+ Ndef := Get_Type_Of_Type_Mark (Get_Type_Declarator (Def));
Info := Get_Info (Ndef);
case Get_Kind (Ndef) is
when Iir_Kind_Integer_Type_Definition
@@ -27027,7 +27044,7 @@ package body Translation is
begin
Id := Get_Identifier (Decl);
Push_Identifier_Prefix (Mark, Id);
- Def := Get_Type (Decl);
+ Def := Get_Type_Of_Type_Mark (Decl);
if Get_Kind (Def) = Iir_Kind_Incomplete_Type_Definition then
Rti := Generate_Incomplete_Type_Definition (Def);
else
@@ -27245,7 +27262,7 @@ package body Translation is
null;
when Iir_Kind_Type_Declaration =>
-- FIXME: physicals ?
- if Get_Kind (Get_Type (Decl))
+ if Get_Kind (Get_Type_Definition (Decl))
= Iir_Kind_Enumeration_Type_Definition
then
Add_Rti_Node (Generate_Type_Decl (Decl));
@@ -28690,11 +28707,6 @@ package body Translation is
Create_Report_Subprg ("__ghdl_report", Ghdl_Report);
end;
- New_Var_Decl (Ghdl_Assert_Default_Report,
- Get_Identifier ("__ghdl_assert_default_report"),
- O_Storage_External,
- Get_Info (String_Type_Definition).Ortho_Type (Mode_Value));
-
-- procedure __ghdl_text_write (file : __ghdl_file_index;
-- str : std_string_ptr);
Start_Procedure_Decl