aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/ada/exp_alfa.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/gcc/ada/exp_alfa.adb')
-rw-r--r--gcc-4.8/gcc/ada/exp_alfa.adb321
1 files changed, 0 insertions, 321 deletions
diff --git a/gcc-4.8/gcc/ada/exp_alfa.adb b/gcc-4.8/gcc/ada/exp_alfa.adb
deleted file mode 100644
index 69a6e2b0c..000000000
--- a/gcc-4.8/gcc/ada/exp_alfa.adb
+++ /dev/null
@@ -1,321 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- E X P _ A L F A --
--- --
--- B o d y --
--- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
--- --
--- 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- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT 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 distributed with GNAT; see file COPYING3. If not, go to --
--- http://www.gnu.org/licenses for a complete copy of the license. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-with Atree; use Atree;
-with Einfo; use Einfo;
-with Exp_Attr; use Exp_Attr;
-with Exp_Ch4; use Exp_Ch4;
-with Exp_Ch6; use Exp_Ch6;
-with Exp_Dbug; use Exp_Dbug;
-with Exp_Util; use Exp_Util;
-with Nlists; use Nlists;
-with Rtsfind; use Rtsfind;
-with Sem_Aux; use Sem_Aux;
-with Sem_Res; use Sem_Res;
-with Sem_Util; use Sem_Util;
-with Sinfo; use Sinfo;
-with Snames; use Snames;
-with Stand; use Stand;
-with Tbuild; use Tbuild;
-
-package body Exp_Alfa is
-
- -----------------------
- -- Local Subprograms --
- -----------------------
-
- procedure Expand_Alfa_Call (N : Node_Id);
- -- This procedure contains common processing for function and procedure
- -- calls:
- -- * expansion of actuals to introduce necessary temporaries
- -- * replacement of renaming by subprogram renamed
-
- procedure Expand_Alfa_N_Attribute_Reference (N : Node_Id);
- -- Expand attributes 'Old and 'Result only
-
- procedure Expand_Alfa_N_In (N : Node_Id);
- -- Expand set membership into individual ones
-
- procedure Expand_Alfa_N_Object_Renaming_Declaration (N : Node_Id);
- -- Perform name evaluation for a renamed object
-
- procedure Expand_Alfa_N_Simple_Return_Statement (N : Node_Id);
- -- Insert conversion on function return if necessary
-
- procedure Expand_Alfa_Simple_Function_Return (N : Node_Id);
- -- Expand simple return from function
-
- procedure Expand_Potential_Renaming (N : Node_Id);
- -- N denotes a N_Identifier or N_Expanded_Name. If N references a renaming,
- -- replace N with the renamed object.
-
- -----------------
- -- Expand_Alfa --
- -----------------
-
- procedure Expand_Alfa (N : Node_Id) is
- begin
- case Nkind (N) is
- when N_Attribute_Reference =>
- Expand_Alfa_N_Attribute_Reference (N);
-
- -- Qualification of entity names in formal verification mode
- -- is limited to the addition of a suffix for homonyms (see
- -- Exp_Dbug.Qualify_Entity_Name). We used to qualify entity names
- -- as full expansion does, but this was removed as this prevents the
- -- verification back-end from using a short name for debugging and
- -- user interaction. The verification back-end already takes care
- -- of qualifying names when needed.
-
- when N_Block_Statement |
- N_Package_Body |
- N_Package_Declaration |
- N_Subprogram_Body =>
- Qualify_Entity_Names (N);
-
- when N_Subprogram_Call =>
- Expand_Alfa_Call (N);
-
- when N_Expanded_Name |
- N_Identifier =>
- Expand_Potential_Renaming (N);
-
- when N_In =>
- Expand_Alfa_N_In (N);
-
- -- A NOT IN B gets transformed to NOT (A IN B). This is the same
- -- expansion used in the normal case, so shared the code.
-
- when N_Not_In =>
- Expand_N_Not_In (N);
-
- when N_Object_Renaming_Declaration =>
- Expand_Alfa_N_Object_Renaming_Declaration (N);
-
- when N_Simple_Return_Statement =>
- Expand_Alfa_N_Simple_Return_Statement (N);
-
- -- In Alfa mode, no other constructs require expansion
-
- when others =>
- null;
- end case;
- end Expand_Alfa;
-
- ----------------------
- -- Expand_Alfa_Call --
- ----------------------
-
- procedure Expand_Alfa_Call (N : Node_Id) is
- Call_Node : constant Node_Id := N;
- Parent_Subp : Entity_Id;
- Subp : Entity_Id;
-
- begin
- -- Ignore if previous error
-
- if Nkind (Call_Node) in N_Has_Etype
- and then Etype (Call_Node) = Any_Type
- then
- return;
- end if;
-
- -- Call using access to subprogram with explicit dereference
-
- if Nkind (Name (Call_Node)) = N_Explicit_Dereference then
- Subp := Etype (Name (Call_Node));
- Parent_Subp := Empty;
-
- -- Case of call to simple entry, where the Name is a selected component
- -- whose prefix is the task, and whose selector name is the entry name
-
- elsif Nkind (Name (Call_Node)) = N_Selected_Component then
- Subp := Entity (Selector_Name (Name (Call_Node)));
- Parent_Subp := Empty;
-
- -- Case of call to member of entry family, where Name is an indexed
- -- component, with the prefix being a selected component giving the
- -- task and entry family name, and the index being the entry index.
-
- elsif Nkind (Name (Call_Node)) = N_Indexed_Component then
- Subp := Entity (Selector_Name (Prefix (Name (Call_Node))));
- Parent_Subp := Empty;
-
- -- Normal case
-
- else
- Subp := Entity (Name (Call_Node));
- Parent_Subp := Alias (Subp);
- end if;
-
- -- Various expansion activities for actuals are carried out
-
- Expand_Actuals (N, Subp);
-
- -- If the subprogram is a renaming, replace it in the call with the name
- -- of the actual subprogram being called.
-
- if Present (Parent_Subp) then
- Parent_Subp := Ultimate_Alias (Parent_Subp);
-
- -- The below setting of Entity is suspect, see F109-018 discussion???
-
- Set_Entity (Name (Call_Node), Parent_Subp);
- end if;
- end Expand_Alfa_Call;
-
- ---------------------------------------
- -- Expand_Alfa_N_Attribute_Reference --
- ---------------------------------------
-
- procedure Expand_Alfa_N_Attribute_Reference (N : Node_Id) is
- Id : constant Attribute_Id := Get_Attribute_Id (Attribute_Name (N));
-
- begin
- case Id is
- when Attribute_Old |
- Attribute_Result =>
- Expand_N_Attribute_Reference (N);
-
- when others =>
- null;
- end case;
- end Expand_Alfa_N_Attribute_Reference;
-
- ----------------------
- -- Expand_Alfa_N_In --
- ----------------------
-
- procedure Expand_Alfa_N_In (N : Node_Id) is
- begin
- if Present (Alternatives (N)) then
- Expand_Set_Membership (N);
- end if;
- end Expand_Alfa_N_In;
-
- -----------------------------------------------
- -- Expand_Alfa_N_Object_Renaming_Declaration --
- -----------------------------------------------
-
- procedure Expand_Alfa_N_Object_Renaming_Declaration (N : Node_Id) is
- begin
- -- Unconditionally remove all side effects from the name
-
- Evaluate_Name (Name (N));
- end Expand_Alfa_N_Object_Renaming_Declaration;
-
- -------------------------------------------
- -- Expand_Alfa_N_Simple_Return_Statement --
- -------------------------------------------
-
- procedure Expand_Alfa_N_Simple_Return_Statement (N : Node_Id) is
- begin
- -- Defend against previous errors (i.e. the return statement calls a
- -- function that is not available in configurable runtime).
-
- if Present (Expression (N))
- and then Nkind (Expression (N)) = N_Empty
- then
- return;
- end if;
-
- -- Distinguish the function and non-function cases:
-
- case Ekind (Return_Applies_To (Return_Statement_Entity (N))) is
-
- when E_Function |
- E_Generic_Function =>
- Expand_Alfa_Simple_Function_Return (N);
-
- when E_Procedure |
- E_Generic_Procedure |
- E_Entry |
- E_Entry_Family |
- E_Return_Statement =>
- null;
-
- when others =>
- raise Program_Error;
- end case;
-
- exception
- when RE_Not_Available =>
- return;
- end Expand_Alfa_N_Simple_Return_Statement;
-
- ----------------------------------------
- -- Expand_Alfa_Simple_Function_Return --
- ----------------------------------------
-
- procedure Expand_Alfa_Simple_Function_Return (N : Node_Id) is
- Scope_Id : constant Entity_Id :=
- Return_Applies_To (Return_Statement_Entity (N));
- -- The function we are returning from
-
- R_Type : constant Entity_Id := Etype (Scope_Id);
- -- The result type of the function
-
- Exp : constant Node_Id := Expression (N);
- pragma Assert (Present (Exp));
-
- Exptyp : constant Entity_Id := Etype (Exp);
- -- The type of the expression (not necessarily the same as R_Type)
-
- begin
- -- Check the result expression of a scalar function against the subtype
- -- of the function by inserting a conversion. This conversion must
- -- eventually be performed for other classes of types, but for now it's
- -- only done for scalars.
- -- ???
-
- if Is_Scalar_Type (Exptyp) then
- Rewrite (Exp, Convert_To (R_Type, Exp));
-
- -- The expression is resolved to ensure that the conversion gets
- -- expanded to generate a possible constraint check.
-
- Analyze_And_Resolve (Exp, R_Type);
- end if;
- end Expand_Alfa_Simple_Function_Return;
-
- -------------------------------
- -- Expand_Potential_Renaming --
- -------------------------------
-
- procedure Expand_Potential_Renaming (N : Node_Id) is
- E : constant Entity_Id := Entity (N);
- T : constant Entity_Id := Etype (N);
-
- begin
- -- Replace a reference to a renaming with the actual renamed object
-
- if Ekind (E) in Object_Kind and then Present (Renamed_Object (E)) then
- Rewrite (N, New_Copy_Tree (Renamed_Object (E)));
- Reset_Analyzed_Flags (N);
- Analyze_And_Resolve (N, T);
- end if;
- end Expand_Potential_Renaming;
-
-end Exp_Alfa;