Commit b81a5940 by Javier Miranda Committed by Arnaud Charlet

sem_prag.adb, [...]: Code cleanup...

2010-06-22  Javier Miranda  <miranda@adacore.com>

	* sem_prag.adb, sem_util.adb, sem_util.ads, sem_attr.adb, exp_ch6.adb,
	exp_disp.adb, sem_eval.adb, exp_dist.adb lib-xref.adb: Code cleanup,
	this patch replaces duplication of code that traverses the chain of
	aliased primitives by a call to routine Ultimate_Alias that
	provides this functionality.

From-SVN: r161184
parent 9e9df9da
2010-06-22 Javier Miranda <miranda@adacore.com>
* sem_prag.adb, sem_util.adb, sem_util.ads, sem_attr.adb, exp_ch6.adb,
exp_disp.adb, sem_eval.adb, exp_dist.adb lib-xref.adb: Code cleanup,
this patch replaces duplication of code that traverses the chain of
aliased primitives by a call to routine Ultimate_Alias that
provides this functionality.
2010-06-22 Arnaud Charlet <charlet@adacore.com> 2010-06-22 Arnaud Charlet <charlet@adacore.com>
* fmap.adb, opt.ads, osint.adb, osint.ads, output.ads, scng.adb, * fmap.adb, opt.ads, osint.adb, osint.ads, output.ads, scng.adb,
......
...@@ -2668,9 +2668,7 @@ package body Exp_Ch6 is ...@@ -2668,9 +2668,7 @@ package body Exp_Ch6 is
if Present (Inherited_From_Formal (Subp)) then if Present (Inherited_From_Formal (Subp)) then
Parent_Subp := Inherited_From_Formal (Subp); Parent_Subp := Inherited_From_Formal (Subp);
else else
while Present (Alias (Parent_Subp)) loop Parent_Subp := Ultimate_Alias (Parent_Subp);
Parent_Subp := Alias (Parent_Subp);
end loop;
end if; end if;
-- The below setting of Entity is suspect, see F109-018 discussion??? -- The below setting of Entity is suspect, see F109-018 discussion???
......
...@@ -1843,23 +1843,10 @@ package body Exp_Disp is ...@@ -1843,23 +1843,10 @@ package body Exp_Disp is
function Is_Predefined_Dispatching_Alias (Prim : Entity_Id) return Boolean function Is_Predefined_Dispatching_Alias (Prim : Entity_Id) return Boolean
is is
E : Entity_Id;
begin begin
if not Is_Predefined_Dispatching_Operation (Prim) return not Is_Predefined_Dispatching_Operation (Prim)
and then Present (Alias (Prim)) and then Present (Alias (Prim))
then and then Is_Predefined_Dispatching_Operation (Ultimate_Alias (Prim));
E := Prim;
while Present (Alias (E)) loop
E := Alias (E);
end loop;
if Is_Predefined_Dispatching_Operation (E) then
return True;
end if;
end if;
return False;
end Is_Predefined_Dispatching_Alias; end Is_Predefined_Dispatching_Alias;
--------------------------------------- ---------------------------------------
...@@ -3703,11 +3690,8 @@ package body Exp_Disp is ...@@ -3703,11 +3690,8 @@ package body Exp_Disp is
Alias (Prim); Alias (Prim);
else else
while Present (Alias (Prim)) loop Expand_Interface_Thunk
Prim := Alias (Prim); (Ultimate_Alias (Prim), Thunk_Id, Thunk_Code);
end loop;
Expand_Interface_Thunk (Prim, Thunk_Id, Thunk_Code);
if Present (Thunk_Id) then if Present (Thunk_Id) then
Append_To (Result, Thunk_Code); Append_To (Result, Thunk_Code);
...@@ -3874,12 +3858,7 @@ package body Exp_Disp is ...@@ -3874,12 +3858,7 @@ package body Exp_Disp is
(Interface_Alias (Prim)) = Iface (Interface_Alias (Prim)) = Iface
then then
Prim_Alias := Interface_Alias (Prim); Prim_Alias := Interface_Alias (Prim);
E := Ultimate_Alias (Prim);
E := Prim;
while Present (Alias (E)) loop
E := Alias (E);
end loop;
Pos := UI_To_Int (DT_Position (Prim_Alias)); Pos := UI_To_Int (DT_Position (Prim_Alias));
if Present (Prim_Table (Pos)) then if Present (Prim_Table (Pos)) then
...@@ -4933,9 +4912,7 @@ package body Exp_Disp is ...@@ -4933,9 +4912,7 @@ package body Exp_Disp is
Prim := Node (Prim_Elmt); Prim := Node (Prim_Elmt);
if Chars (Prim) = Name_uSize then if Chars (Prim) = Name_uSize then
while Present (Alias (Prim)) loop Prim := Ultimate_Alias (Prim);
Prim := Alias (Prim);
end loop;
if Is_Abstract_Subprogram (Prim) then if Is_Abstract_Subprogram (Prim) then
Append_To (TSD_Aggr_List, Append_To (TSD_Aggr_List,
...@@ -5396,11 +5373,7 @@ package body Exp_Disp is ...@@ -5396,11 +5373,7 @@ package body Exp_Disp is
and then not Present (Prim_Table and then not Present (Prim_Table
(UI_To_Int (DT_Position (Prim)))) (UI_To_Int (DT_Position (Prim))))
then then
E := Prim; E := Ultimate_Alias (Prim);
while Present (Alias (E)) loop
E := Alias (E);
end loop;
pragma Assert (not Is_Abstract_Subprogram (E)); pragma Assert (not Is_Abstract_Subprogram (E));
Prim_Table (UI_To_Int (DT_Position (Prim))) := E; Prim_Table (UI_To_Int (DT_Position (Prim))) := E;
end if; end if;
...@@ -6121,10 +6094,7 @@ package body Exp_Disp is ...@@ -6121,10 +6094,7 @@ package body Exp_Disp is
-- Retrieve the root of the alias chain -- Retrieve the root of the alias chain
Prim_Als := Prim; Prim_Als := Ultimate_Alias (Prim);
while Present (Alias (Prim_Als)) loop
Prim_Als := Alias (Prim_Als);
end loop;
-- In the case of an entry wrapper, set the entry index -- In the case of an entry wrapper, set the entry index
...@@ -6656,10 +6626,7 @@ package body Exp_Disp is ...@@ -6656,10 +6626,7 @@ package body Exp_Disp is
begin begin
-- Retrieve the original primitive operation -- Retrieve the original primitive operation
Prim_Op := Prim; Prim_Op := Ultimate_Alias (Prim);
while Present (Alias (Prim_Op)) loop
Prim_Op := Alias (Prim_Op);
end loop;
if Ekind (Typ) = E_Record_Type if Ekind (Typ) = E_Record_Type
and then Present (Corresponding_Concurrent_Type (Typ)) and then Present (Corresponding_Concurrent_Type (Typ))
...@@ -7179,12 +7146,8 @@ package body Exp_Disp is ...@@ -7179,12 +7146,8 @@ package body Exp_Disp is
Set_DT_Position (Prim, Default_Prim_Op_Position (Prim)); Set_DT_Position (Prim, Default_Prim_Op_Position (Prim));
elsif Is_Predefined_Dispatching_Alias (Prim) then elsif Is_Predefined_Dispatching_Alias (Prim) then
E := Alias (Prim); Set_DT_Position (Prim,
while Present (Alias (E)) loop Default_Prim_Op_Position (Ultimate_Alias (Prim)));
E := Alias (E);
end loop;
Set_DT_Position (Prim, Default_Prim_Op_Position (E));
-- Overriding primitives of ancestor abstract interfaces -- Overriding primitives of ancestor abstract interfaces
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2010, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -1346,13 +1346,7 @@ package body Exp_Dist is ...@@ -1346,13 +1346,7 @@ package body Exp_Dist is
-- primitive may have been inherited, go back the alias chain -- primitive may have been inherited, go back the alias chain
-- until the real primitive has been found. -- until the real primitive has been found.
Current_Primitive_Alias := Current_Primitive; Current_Primitive_Alias := Ultimate_Alias (Current_Primitive);
while Present (Alias (Current_Primitive_Alias)) loop
pragma Assert
(Current_Primitive_Alias
/= Alias (Current_Primitive_Alias));
Current_Primitive_Alias := Alias (Current_Primitive_Alias);
end loop;
-- Copy the spec from the original declaration for the purpose -- Copy the spec from the original declaration for the purpose
-- of declaring an overriding subprogram: we need to replace -- of declaring an overriding subprogram: we need to replace
......
...@@ -214,7 +214,6 @@ package body Lib.Xref is ...@@ -214,7 +214,6 @@ package body Lib.Xref is
Base_T : Entity_Id; Base_T : Entity_Id;
Prim : Elmt_Id; Prim : Elmt_Id;
Prim_List : Elist_Id; Prim_List : Elist_Id;
Ent : Entity_Id;
begin begin
-- Handle subtypes of synchronized types -- Handle subtypes of synchronized types
...@@ -262,12 +261,8 @@ package body Lib.Xref is ...@@ -262,12 +261,8 @@ package body Lib.Xref is
-- reference purposes (it is the original for which we want the xref -- reference purposes (it is the original for which we want the xref
-- and for which the comes_from_source test must be performed). -- and for which the comes_from_source test must be performed).
Ent := Node (Prim); Generate_Reference
while Present (Alias (Ent)) loop (Typ, Ultimate_Alias (Node (Prim)), 'p', Set_Ref => False);
Ent := Alias (Ent);
end loop;
Generate_Reference (Typ, Ent, 'p', Set_Ref => False);
Next_Elmt (Prim); Next_Elmt (Prim);
end loop; end loop;
end Generate_Prim_Op_References; end Generate_Prim_Op_References;
...@@ -1704,10 +1699,7 @@ package body Lib.Xref is ...@@ -1704,10 +1699,7 @@ package body Lib.Xref is
-- through several levels of derivation, so find the -- through several levels of derivation, so find the
-- ultimate (source) ancestor. -- ultimate (source) ancestor.
Op := Alias (Old_E); Op := Ultimate_Alias (Old_E);
while Present (Alias (Op)) loop
Op := Alias (Op);
end loop;
-- Normal case of no alias present -- Normal case of no alias present
......
...@@ -3545,13 +3545,9 @@ package body Sem_Attr is ...@@ -3545,13 +3545,9 @@ package body Sem_Attr is
---------------------- ----------------------
procedure Must_Be_Imported (Proc_Ent : Entity_Id) is procedure Must_Be_Imported (Proc_Ent : Entity_Id) is
Pent : Entity_Id := Proc_Ent; Pent : constant Entity_Id := Ultimate_Alias (Proc_Ent);
begin begin
while Present (Alias (Pent)) loop
Pent := Alias (Pent);
end loop;
-- Ignore check if procedure not frozen yet (we will get -- Ignore check if procedure not frozen yet (we will get
-- another chance when the default parameter is reanalyzed) -- another chance when the default parameter is reanalyzed)
......
...@@ -1674,10 +1674,7 @@ package body Sem_Eval is ...@@ -1674,10 +1674,7 @@ package body Sem_Eval is
and then Present (Alias (Entity (Name (N)))) and then Present (Alias (Entity (Name (N))))
and then Is_Enumeration_Type (Base_Type (Typ)) and then Is_Enumeration_Type (Base_Type (Typ))
then then
Lit := Alias (Entity (Name (N))); Lit := Ultimate_Alias (Entity (Name (N)));
while Present (Alias (Lit)) loop
Lit := Alias (Lit);
end loop;
if Ekind (Lit) = E_Enumeration_Literal then if Ekind (Lit) = E_Enumeration_Literal then
if Base_Type (Etype (Lit)) /= Base_Type (Typ) then if Base_Type (Etype (Lit)) /= Base_Type (Typ) then
......
...@@ -3956,9 +3956,7 @@ package body Sem_Prag is ...@@ -3956,9 +3956,7 @@ package body Sem_Prag is
-- entity (if declared in the same unit) is inlined. -- entity (if declared in the same unit) is inlined.
if Is_Subprogram (Subp) then if Is_Subprogram (Subp) then
while Present (Alias (Inner_Subp)) loop Inner_Subp := Ultimate_Alias (Inner_Subp);
Inner_Subp := Alias (Inner_Subp);
end loop;
if In_Same_Source_Unit (Subp, Inner_Subp) then if In_Same_Source_Unit (Subp, Inner_Subp) then
Set_Inline_Flags (Inner_Subp); Set_Inline_Flags (Inner_Subp);
......
...@@ -11128,13 +11128,13 @@ package body Sem_Util is ...@@ -11128,13 +11128,13 @@ package body Sem_Util is
-------------------- --------------------
-- Ultimate_Alias -- -- Ultimate_Alias --
-------------------- --------------------
-- To do: add occurrences calling this new subprogram
function Ultimate_Alias (Prim : Entity_Id) return Entity_Id is function Ultimate_Alias (Prim : Entity_Id) return Entity_Id is
E : Entity_Id := Prim; E : Entity_Id := Prim;
begin begin
while Present (Alias (E)) loop while Present (Alias (E)) loop
pragma Assert (Alias (E) /= E);
E := Alias (E); E := Alias (E);
end loop; end loop;
......
...@@ -216,6 +216,7 @@ package Sem_Util is ...@@ -216,6 +216,7 @@ package Sem_Util is
-- for stubbed subprograms. -- for stubbed subprograms.
function Current_Entity (N : Node_Id) return Entity_Id; function Current_Entity (N : Node_Id) return Entity_Id;
pragma Inline (Current_Entity);
-- Find the currently visible definition for a given identifier, that is to -- Find the currently visible definition for a given identifier, that is to
-- say the first entry in the visibility chain for the Chars of N. -- say the first entry in the visibility chain for the Chars of N.
...@@ -464,6 +465,7 @@ package Sem_Util is ...@@ -464,6 +465,7 @@ package Sem_Util is
-- Decl_Node into the name buffer. -- Decl_Node into the name buffer.
function Get_Name_Entity_Id (Id : Name_Id) return Entity_Id; function Get_Name_Entity_Id (Id : Name_Id) return Entity_Id;
pragma Inline (Get_Name_Entity_Id);
-- An entity value is associated with each name in the name table. The -- An entity value is associated with each name in the name table. The
-- Get_Name_Entity_Id function fetches the Entity_Id of this entity, -- Get_Name_Entity_Id function fetches the Entity_Id of this entity,
-- which is the innermost visible entity with the given name. See the -- which is the innermost visible entity with the given name. See the
...@@ -696,9 +698,10 @@ package Sem_Util is ...@@ -696,9 +698,10 @@ package Sem_Util is
-- it is of protected, synchronized or task kind. -- it is of protected, synchronized or task kind.
function Is_False (U : Uint) return Boolean; function Is_False (U : Uint) return Boolean;
-- The argument is a Uint value which is the Boolean'Pos value of a pragma Inline (Is_False);
-- Boolean operand (i.e. is either 0 for False, or 1 for True). This -- The argument is a Uint value which is the Boolean'Pos value of a Boolean
-- function simply tests if it is False (i.e. zero) -- operand (i.e. is either 0 for False, or 1 for True). This function tests
-- if it is False (i.e. zero).
function Is_Fixed_Model_Number (U : Ureal; T : Entity_Id) return Boolean; function Is_Fixed_Model_Number (U : Ureal; T : Entity_Id) return Boolean;
-- Returns True iff the number U is a model number of the fixed- -- Returns True iff the number U is a model number of the fixed-
...@@ -734,11 +737,11 @@ package Sem_Util is ...@@ -734,11 +737,11 @@ package Sem_Util is
-- variable and constant objects return True (compare Is_Variable). -- variable and constant objects return True (compare Is_Variable).
function Is_OK_Variable_For_Out_Formal (AV : Node_Id) return Boolean; function Is_OK_Variable_For_Out_Formal (AV : Node_Id) return Boolean;
-- Used to test if AV is an acceptable formal for an OUT or IN OUT -- Used to test if AV is an acceptable formal for an OUT or IN OUT formal.
-- formal. Note that the Is_Variable function is not quite the right -- Note that the Is_Variable function is not quite the right test because
-- test because this is a case in which conversions whose expression -- this is a case in which conversions whose expression is a variable (in
-- is a variable (in the Is_Variable sense) with a non-tagged type -- the Is_Variable sense) with a non-tagged type target are considered view
-- target are considered view conversions and hence variables. -- conversions and hence variables.
function Is_Partially_Initialized_Type (Typ : Entity_Id) return Boolean; function Is_Partially_Initialized_Type (Typ : Entity_Id) return Boolean;
-- Typ is a type entity. This function returns true if this type is partly -- Typ is a type entity. This function returns true if this type is partly
...@@ -782,6 +785,7 @@ package Sem_Util is ...@@ -782,6 +785,7 @@ package Sem_Util is
-- normally such nodes represent a direct name. -- normally such nodes represent a direct name.
function Is_Statement (N : Node_Id) return Boolean; function Is_Statement (N : Node_Id) return Boolean;
pragma Inline (Is_Statement);
-- Check if the node N is a statement node. Note that this includes -- Check if the node N is a statement node. Note that this includes
-- the case of procedure call statements (unlike the direct use of -- the case of procedure call statements (unlike the direct use of
-- the N_Statement_Other_Than_Procedure_Call subtype from Sinfo). -- the N_Statement_Other_Than_Procedure_Call subtype from Sinfo).
...@@ -791,14 +795,15 @@ package Sem_Util is ...@@ -791,14 +795,15 @@ package Sem_Util is
-- Returns True if E is a synchronized tagged type (AARM 3.9.4 (6/2)) -- Returns True if E is a synchronized tagged type (AARM 3.9.4 (6/2))
function Is_Transfer (N : Node_Id) return Boolean; function Is_Transfer (N : Node_Id) return Boolean;
-- Returns True if the node N is a statement which is known to cause -- Returns True if the node N is a statement which is known to cause an
-- an unconditional transfer of control at runtime, i.e. the following -- unconditional transfer of control at runtime, i.e. the following
-- statement definitely will not be executed. -- statement definitely will not be executed.
function Is_True (U : Uint) return Boolean; function Is_True (U : Uint) return Boolean;
-- The argument is a Uint value which is the Boolean'Pos value of a pragma Inline (Is_True);
-- Boolean operand (i.e. is either 0 for False, or 1 for True). This -- The argument is a Uint value which is the Boolean'Pos value of a Boolean
-- function simply tests if it is True (i.e. non-zero) -- operand (i.e. is either 0 for False, or 1 for True). This function tests
-- if it is True (i.e. non-zero).
function Is_Universal_Numeric_Type (T : Entity_Id) return Boolean; function Is_Universal_Numeric_Type (T : Entity_Id) return Boolean;
pragma Inline (Is_Universal_Numeric_Type); pragma Inline (Is_Universal_Numeric_Type);
...@@ -1004,7 +1009,8 @@ package Sem_Util is ...@@ -1004,7 +1009,8 @@ package Sem_Util is
procedure Next_Actual (Actual_Id : in out Node_Id); procedure Next_Actual (Actual_Id : in out Node_Id);
pragma Inline (Next_Actual); pragma Inline (Next_Actual);
-- Next_Actual (N) is equivalent to N := Next_Actual (N) -- Next_Actual (N) is equivalent to N := Next_Actual (N). Note that we
-- inline this procedural form, but not the functional form that follows.
function Next_Actual (Actual_Id : Node_Id) return Node_Id; function Next_Actual (Actual_Id : Node_Id) return Node_Id;
-- Find next actual parameter in declaration order. As described for -- Find next actual parameter in declaration order. As described for
...@@ -1172,6 +1178,7 @@ package Sem_Util is ...@@ -1172,6 +1178,7 @@ package Sem_Util is
-- foreign convention, then we set Can_Use_Internal_Rep to False on E. -- foreign convention, then we set Can_Use_Internal_Rep to False on E.
procedure Set_Current_Entity (E : Entity_Id); procedure Set_Current_Entity (E : Entity_Id);
pragma Inline (Set_Current_Entity);
-- Establish the entity E as the currently visible definition of its -- Establish the entity E as the currently visible definition of its
-- associated name (i.e. the Node_Id associated with its name) -- associated name (i.e. the Node_Id associated with its name)
...@@ -1189,6 +1196,7 @@ package Sem_Util is ...@@ -1189,6 +1196,7 @@ package Sem_Util is
-- can check identifier spelling style. -- can check identifier spelling style.
procedure Set_Name_Entity_Id (Id : Name_Id; Val : Entity_Id); procedure Set_Name_Entity_Id (Id : Name_Id; Val : Entity_Id);
pragma Inline (Set_Name_Entity_Id);
-- Sets the Entity_Id value associated with the given name, which is the -- Sets the Entity_Id value associated with the given name, which is the
-- Id of the innermost visible entity with the given name. See the body -- Id of the innermost visible entity with the given name. See the body
-- of package Sem_Ch8 for further details on the handling of visibility. -- of package Sem_Ch8 for further details on the handling of visibility.
...@@ -1219,6 +1227,7 @@ package Sem_Util is ...@@ -1219,6 +1227,7 @@ package Sem_Util is
-- Set the flag Is_Transient of the current scope -- Set the flag Is_Transient of the current scope
procedure Set_Size_Info (T1, T2 : Entity_Id); procedure Set_Size_Info (T1, T2 : Entity_Id);
pragma Inline (Set_Size_Info);
-- Copies the Esize field and Has_Biased_Representation flag from sub(type) -- Copies the Esize field and Has_Biased_Representation flag from sub(type)
-- entity T2 to (sub)type entity T1. Also copies the Is_Unsigned_Type flag -- entity T2 to (sub)type entity T1. Also copies the Is_Unsigned_Type flag
-- in the fixed-point and discrete cases, and also copies the alignment -- in the fixed-point and discrete cases, and also copies the alignment
...@@ -1252,8 +1261,9 @@ package Sem_Util is ...@@ -1252,8 +1261,9 @@ package Sem_Util is
-- Return the accessibility level of Typ -- Return the accessibility level of Typ
function Ultimate_Alias (Prim : Entity_Id) return Entity_Id; function Ultimate_Alias (Prim : Entity_Id) return Entity_Id;
-- Return the last entity in the chain of aliased entities of Prim. pragma Inline (Ultimate_Alias);
-- If Prim has no alias return Prim. -- Return the last entity in the chain of aliased entities of Prim. If Prim
-- has no alias return Prim.
function Unit_Declaration_Node (Unit_Id : Entity_Id) return Node_Id; function Unit_Declaration_Node (Unit_Id : Entity_Id) return Node_Id;
-- Unit_Id is the simple name of a program unit, this function returns the -- Unit_Id is the simple name of a program unit, this function returns the
...@@ -1266,28 +1276,18 @@ package Sem_Util is ...@@ -1266,28 +1276,18 @@ package Sem_Util is
-- Yields Universal_Integer or Universal_Real if this is a candidate -- Yields Universal_Integer or Universal_Real if this is a candidate
function Unqualify (Expr : Node_Id) return Node_Id; function Unqualify (Expr : Node_Id) return Node_Id;
-- Removes any qualifications from Expr. For example, for T1'(T2'(X)), pragma Inline (Unqualify);
-- this returns X. If Expr is not a qualified expression, returns Expr. -- Removes any qualifications from Expr. For example, for T1'(T2'(X)), this
-- returns X. If Expr is not a qualified expression, returns Expr.
function Within_Init_Proc return Boolean; function Within_Init_Proc return Boolean;
-- Determines if Current_Scope is within an init proc -- Determines if Current_Scope is within an init proc
procedure Wrong_Type (Expr : Node_Id; Expected_Type : Entity_Id); procedure Wrong_Type (Expr : Node_Id; Expected_Type : Entity_Id);
-- Output error message for incorrectly typed expression. Expr is the -- Output error message for incorrectly typed expression. Expr is the node
-- node for the incorrectly typed construct (Etype (Expr) is the type -- for the incorrectly typed construct (Etype (Expr) is the type found),
-- found), and Expected_Type is the entity for the expected type. Note -- and Expected_Type is the entity for the expected type. Note that Expr
-- that Expr does not have to be a subexpression, anything with an -- does not have to be a subexpression, anything with an Etype field may
-- Etype field may be used. -- be used.
private
pragma Inline (Current_Entity);
pragma Inline (Get_Name_Entity_Id);
pragma Inline (Is_False);
pragma Inline (Is_Statement);
pragma Inline (Is_True);
pragma Inline (Set_Current_Entity);
pragma Inline (Set_Name_Entity_Id);
pragma Inline (Set_Size_Info);
pragma Inline (Unqualify);
end Sem_Util; end Sem_Util;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment