Commit 72e4357f by Robert Dewar Committed by Geert Bosch

sem_prag.adb: Add processing for pragma External.

	* sem_prag.adb: Add processing for pragma External.

	* snames.ads: Add entry for pragma External.

	* par-prag.adb: Add pragma External.

	* snames.adb: Updated to match snames.ads.

From-SVN: r46167
parent 7bc1c7df
2001-10-10 Robert Dewar <dewar@gnat.com>
* sem_prag.adb: Add processing for pragma External.
* snames.ads: Add entry for pragma External.
* par-prag.adb: Add pragma External.
* snames.adb: Updated to match snames.ads.
2001-10-10 Ed Schonberg <schonber@gnat.com> 2001-10-10 Ed Schonberg <schonber@gnat.com>
* exp_ch4.adb (Expand_N_Allocator): Generate meaningful names for * exp_ch4.adb (Expand_N_Allocator): Generate meaningful names for
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- $Revision: 1.149 $ -- $Revision$
-- -- -- --
-- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- -- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
-- -- -- --
...@@ -854,6 +854,7 @@ begin ...@@ -854,6 +854,7 @@ begin
Pragma_Export_Procedure | Pragma_Export_Procedure |
Pragma_Export_Valued_Procedure | Pragma_Export_Valued_Procedure |
Pragma_Extend_System | Pragma_Extend_System |
Pragma_External |
Pragma_External_Name_Casing | Pragma_External_Name_Casing |
Pragma_Finalize_Storage_Only | Pragma_Finalize_Storage_Only |
Pragma_Float_Representation | Pragma_Float_Representation |
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- $Revision: 1.558 $ -- $Revision$
-- -- -- --
-- Copyright (C) 1992-2001, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2001, Free Software Foundation, Inc. --
-- -- -- --
...@@ -5256,6 +5256,30 @@ package body Sem_Prag is ...@@ -5256,6 +5256,30 @@ package body Sem_Prag is
Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off); Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off);
Extensions_Allowed := (Chars (Expression (Arg1)) = Name_On); Extensions_Allowed := (Chars (Expression (Arg1)) = Name_On);
--------------
-- External --
--------------
-- pragma External (
-- [ Convention =>] convention_IDENTIFIER,
-- [ Entity =>] local_NAME
-- [, [External_Name =>] static_string_EXPRESSION ]
-- [, [Link_Name =>] static_string_EXPRESSION ]);
when Pragma_External => External : declare
C : Convention_Id;
Def_Id : Entity_Id;
begin
GNAT_Pragma;
Check_At_Least_N_Arguments (2);
Check_At_Most_N_Arguments (4);
Process_Convention (C, Def_Id);
Note_Possible_Modification (Expression (Arg2));
Process_Interface_Name (Def_Id, Arg3, Arg4);
Set_Exported (Def_Id, Arg2);
end External;
-------------------------- --------------------------
-- External_Name_Casing -- -- External_Name_Casing --
-------------------------- --------------------------
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- $Revision: 1.205 $ -- -- $Revision$ --
-- -- -- --
-- Copyright (C) 1992-2001, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2001, Free Software Foundation, Inc. --
-- -- -- --
...@@ -204,6 +204,7 @@ package body Snames is ...@@ -204,6 +204,7 @@ package body Snames is
"export_object#" & "export_object#" &
"export_procedure#" & "export_procedure#" &
"export_valued_procedure#" & "export_valued_procedure#" &
"external#" &
"finalize_storage_only#" & "finalize_storage_only#" &
"ident#" & "ident#" &
"import#" & "import#" &
...@@ -289,7 +290,6 @@ package body Snames is ...@@ -289,7 +290,6 @@ package body Snames is
"dot_replacement#" & "dot_replacement#" &
"dynamic#" & "dynamic#" &
"entity#" & "entity#" &
"external#" &
"external_name#" & "external_name#" &
"first_optional_parameter#" & "first_optional_parameter#" &
"form#" & "form#" &
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- $Revision: 1.209 $ -- $Revision$
-- -- -- --
-- Copyright (C) 1992-2001, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2001, Free Software Foundation, Inc. --
-- -- -- --
...@@ -374,48 +374,49 @@ package Snames is ...@@ -374,48 +374,49 @@ package Snames is
Name_Export_Object : constant Name_Id := N + 158; -- GNAT Name_Export_Object : constant Name_Id := N + 158; -- GNAT
Name_Export_Procedure : constant Name_Id := N + 159; -- GNAT Name_Export_Procedure : constant Name_Id := N + 159; -- GNAT
Name_Export_Valued_Procedure : constant Name_Id := N + 160; -- GNAT Name_Export_Valued_Procedure : constant Name_Id := N + 160; -- GNAT
Name_Finalize_Storage_Only : constant Name_Id := N + 161; -- GNAT Name_External : constant Name_Id := N + 161; -- GNAT
Name_Ident : constant Name_Id := N + 162; -- VMS Name_Finalize_Storage_Only : constant Name_Id := N + 162; -- GNAT
Name_Import : constant Name_Id := N + 163; Name_Ident : constant Name_Id := N + 163; -- VMS
Name_Import_Exception : constant Name_Id := N + 164; -- VMS Name_Import : constant Name_Id := N + 164;
Name_Import_Function : constant Name_Id := N + 165; -- GNAT Name_Import_Exception : constant Name_Id := N + 165; -- VMS
Name_Import_Object : constant Name_Id := N + 166; -- GNAT Name_Import_Function : constant Name_Id := N + 166; -- GNAT
Name_Import_Procedure : constant Name_Id := N + 167; -- GNAT Name_Import_Object : constant Name_Id := N + 167; -- GNAT
Name_Import_Valued_Procedure : constant Name_Id := N + 168; -- GNAT Name_Import_Procedure : constant Name_Id := N + 168; -- GNAT
Name_Inline : constant Name_Id := N + 169; Name_Import_Valued_Procedure : constant Name_Id := N + 169; -- GNAT
Name_Inline_Always : constant Name_Id := N + 170; -- GNAT Name_Inline : constant Name_Id := N + 170;
Name_Inline_Generic : constant Name_Id := N + 171; -- GNAT Name_Inline_Always : constant Name_Id := N + 171; -- GNAT
Name_Inspection_Point : constant Name_Id := N + 172; Name_Inline_Generic : constant Name_Id := N + 172; -- GNAT
Name_Interface : constant Name_Id := N + 173; -- Ada 83 Name_Inspection_Point : constant Name_Id := N + 173;
Name_Interface_Name : constant Name_Id := N + 174; -- GNAT Name_Interface : constant Name_Id := N + 174; -- Ada 83
Name_Interrupt_Handler : constant Name_Id := N + 175; Name_Interface_Name : constant Name_Id := N + 175; -- GNAT
Name_Interrupt_Priority : constant Name_Id := N + 176; Name_Interrupt_Handler : constant Name_Id := N + 176;
Name_Java_Constructor : constant Name_Id := N + 177; -- GNAT Name_Interrupt_Priority : constant Name_Id := N + 177;
Name_Java_Interface : constant Name_Id := N + 178; -- GNAT Name_Java_Constructor : constant Name_Id := N + 178; -- GNAT
Name_Link_With : constant Name_Id := N + 179; -- GNAT Name_Java_Interface : constant Name_Id := N + 179; -- GNAT
Name_Linker_Alias : constant Name_Id := N + 180; -- GNAT Name_Link_With : constant Name_Id := N + 180; -- GNAT
Name_Linker_Options : constant Name_Id := N + 181; Name_Linker_Alias : constant Name_Id := N + 181; -- GNAT
Name_Linker_Section : constant Name_Id := N + 182; -- GNAT Name_Linker_Options : constant Name_Id := N + 182;
Name_List : constant Name_Id := N + 183; Name_Linker_Section : constant Name_Id := N + 183; -- GNAT
Name_Machine_Attribute : constant Name_Id := N + 184; -- GNAT Name_List : constant Name_Id := N + 184;
Name_Main : constant Name_Id := N + 185; -- GNAT Name_Machine_Attribute : constant Name_Id := N + 185; -- GNAT
Name_Main_Storage : constant Name_Id := N + 186; -- GNAT Name_Main : constant Name_Id := N + 186; -- GNAT
Name_Memory_Size : constant Name_Id := N + 187; -- Ada 83 Name_Main_Storage : constant Name_Id := N + 187; -- GNAT
Name_No_Return : constant Name_Id := N + 188; -- GNAT Name_Memory_Size : constant Name_Id := N + 188; -- Ada 83
Name_Optimize : constant Name_Id := N + 189; Name_No_Return : constant Name_Id := N + 189; -- GNAT
Name_Pack : constant Name_Id := N + 190; Name_Optimize : constant Name_Id := N + 190;
Name_Page : constant Name_Id := N + 191; Name_Pack : constant Name_Id := N + 191;
Name_Passive : constant Name_Id := N + 192; -- GNAT Name_Page : constant Name_Id := N + 192;
Name_Preelaborate : constant Name_Id := N + 193; Name_Passive : constant Name_Id := N + 193; -- GNAT
Name_Priority : constant Name_Id := N + 194; Name_Preelaborate : constant Name_Id := N + 194;
Name_Psect_Object : constant Name_Id := N + 195; -- VMS Name_Priority : constant Name_Id := N + 195;
Name_Pure : constant Name_Id := N + 196; Name_Psect_Object : constant Name_Id := N + 196; -- VMS
Name_Pure_Function : constant Name_Id := N + 197; -- GNAT Name_Pure : constant Name_Id := N + 197;
Name_Remote_Call_Interface : constant Name_Id := N + 198; Name_Pure_Function : constant Name_Id := N + 198; -- GNAT
Name_Remote_Types : constant Name_Id := N + 199; Name_Remote_Call_Interface : constant Name_Id := N + 199;
Name_Share_Generic : constant Name_Id := N + 200; -- GNAT Name_Remote_Types : constant Name_Id := N + 200;
Name_Shared : constant Name_Id := N + 201; -- Ada 83 Name_Share_Generic : constant Name_Id := N + 201; -- GNAT
Name_Shared_Passive : constant Name_Id := N + 202; Name_Shared : constant Name_Id := N + 202; -- Ada 83
Name_Shared_Passive : constant Name_Id := N + 203;
-- Note: Storage_Size is not in this list because its name matches the -- Note: Storage_Size is not in this list because its name matches the
-- name of the corresponding attribute. However, it is included in the -- name of the corresponding attribute. However, it is included in the
...@@ -425,25 +426,25 @@ package Snames is ...@@ -425,25 +426,25 @@ package Snames is
-- Note: Storage_Unit is also omitted from the list because of a clash -- Note: Storage_Unit is also omitted from the list because of a clash
-- with an attribute name, and is treated similarly. -- with an attribute name, and is treated similarly.
Name_Source_Reference : constant Name_Id := N + 203; -- GNAT Name_Source_Reference : constant Name_Id := N + 204; -- GNAT
Name_Stream_Convert : constant Name_Id := N + 204; -- GNAT Name_Stream_Convert : constant Name_Id := N + 205; -- GNAT
Name_Subtitle : constant Name_Id := N + 205; -- GNAT Name_Subtitle : constant Name_Id := N + 206; -- GNAT
Name_Suppress_All : constant Name_Id := N + 206; -- GNAT Name_Suppress_All : constant Name_Id := N + 207; -- GNAT
Name_Suppress_Debug_Info : constant Name_Id := N + 207; -- GNAT Name_Suppress_Debug_Info : constant Name_Id := N + 208; -- GNAT
Name_Suppress_Initialization : constant Name_Id := N + 208; -- GNAT Name_Suppress_Initialization : constant Name_Id := N + 209; -- GNAT
Name_System_Name : constant Name_Id := N + 209; -- Ada 83 Name_System_Name : constant Name_Id := N + 210; -- Ada 83
Name_Task_Info : constant Name_Id := N + 210; -- GNAT Name_Task_Info : constant Name_Id := N + 211; -- GNAT
Name_Task_Name : constant Name_Id := N + 211; -- GNAT Name_Task_Name : constant Name_Id := N + 212; -- GNAT
Name_Task_Storage : constant Name_Id := N + 212; -- VMS Name_Task_Storage : constant Name_Id := N + 213; -- VMS
Name_Time_Slice : constant Name_Id := N + 213; -- GNAT Name_Time_Slice : constant Name_Id := N + 214; -- GNAT
Name_Title : constant Name_Id := N + 214; -- GNAT Name_Title : constant Name_Id := N + 215; -- GNAT
Name_Unchecked_Union : constant Name_Id := N + 215; -- GNAT Name_Unchecked_Union : constant Name_Id := N + 216; -- GNAT
Name_Unimplemented_Unit : constant Name_Id := N + 216; -- GNAT Name_Unimplemented_Unit : constant Name_Id := N + 217; -- GNAT
Name_Unreserve_All_Interrupts : constant Name_Id := N + 217; -- GNAT Name_Unreserve_All_Interrupts : constant Name_Id := N + 218; -- GNAT
Name_Volatile : constant Name_Id := N + 218; Name_Volatile : constant Name_Id := N + 219;
Name_Volatile_Components : constant Name_Id := N + 219; Name_Volatile_Components : constant Name_Id := N + 220;
Name_Weak_External : constant Name_Id := N + 220; -- GNAT Name_Weak_External : constant Name_Id := N + 221; -- GNAT
Last_Pragma_Name : constant Name_Id := N + 220; Last_Pragma_Name : constant Name_Id := N + 221;
-- Language convention names for pragma Convention/Export/Import/Interface -- Language convention names for pragma Convention/Export/Import/Interface
-- Note that Name_C is not included in this list, since it was already -- Note that Name_C is not included in this list, since it was already
...@@ -459,37 +460,36 @@ package Snames is ...@@ -459,37 +460,36 @@ package Snames is
-- this case the convention of the record type is set to C, but in -- this case the convention of the record type is set to C, but in
-- addition the flag C_Pass_By_Copy is set on the record type. -- addition the flag C_Pass_By_Copy is set on the record type.
First_Convention_Name : constant Name_Id := N + 221; First_Convention_Name : constant Name_Id := N + 222;
Name_Ada : constant Name_Id := N + 221; Name_Ada : constant Name_Id := N + 222;
Name_Asm : constant Name_Id := N + 222; Name_Asm : constant Name_Id := N + 223;
Name_Assembler : constant Name_Id := N + 223; Name_Assembler : constant Name_Id := N + 224;
Name_COBOL : constant Name_Id := N + 224; Name_COBOL : constant Name_Id := N + 225;
Name_CPP : constant Name_Id := N + 225; Name_CPP : constant Name_Id := N + 226;
Name_DLL : constant Name_Id := N + 226; Name_DLL : constant Name_Id := N + 227;
Name_Fortran : constant Name_Id := N + 227; Name_Fortran : constant Name_Id := N + 228;
Name_Intrinsic : constant Name_Id := N + 228; Name_Intrinsic : constant Name_Id := N + 229;
Name_Java : constant Name_Id := N + 229; Name_Java : constant Name_Id := N + 230;
Name_Stdcall : constant Name_Id := N + 230; Name_Stdcall : constant Name_Id := N + 231;
Name_Stubbed : constant Name_Id := N + 231; Name_Stubbed : constant Name_Id := N + 232;
Name_Win32 : constant Name_Id := N + 232; Name_Win32 : constant Name_Id := N + 233;
Last_Convention_Name : constant Name_Id := N + 232; Last_Convention_Name : constant Name_Id := N + 233;
-- Other special names used in processing pragma arguments -- Other special names used in processing pragma arguments
Name_As_Is : constant Name_Id := N + 233; Name_As_Is : constant Name_Id := N + 234;
Name_Body_File_Name : constant Name_Id := N + 234; Name_Body_File_Name : constant Name_Id := N + 235;
Name_Casing : constant Name_Id := N + 235; Name_Casing : constant Name_Id := N + 236;
Name_Code : constant Name_Id := N + 236; Name_Code : constant Name_Id := N + 237;
Name_Component : constant Name_Id := N + 237; Name_Component : constant Name_Id := N + 238;
Name_Component_Size_4 : constant Name_Id := N + 238; Name_Component_Size_4 : constant Name_Id := N + 239;
Name_Copy : constant Name_Id := N + 239; Name_Copy : constant Name_Id := N + 240;
Name_D_Float : constant Name_Id := N + 240; Name_D_Float : constant Name_Id := N + 241;
Name_Descriptor : constant Name_Id := N + 241; Name_Descriptor : constant Name_Id := N + 242;
Name_Default : constant Name_Id := N + 242; Name_Default : constant Name_Id := N + 243;
Name_Dot_Replacement : constant Name_Id := N + 243; Name_Dot_Replacement : constant Name_Id := N + 244;
Name_Dynamic : constant Name_Id := N + 244; Name_Dynamic : constant Name_Id := N + 245;
Name_Entity : constant Name_Id := N + 245; Name_Entity : constant Name_Id := N + 246;
Name_External : constant Name_Id := N + 246;
Name_External_Name : constant Name_Id := N + 247; Name_External_Name : constant Name_Id := N + 247;
Name_First_Optional_Parameter : constant Name_Id := N + 248; Name_First_Optional_Parameter : constant Name_Id := N + 248;
Name_Form : constant Name_Id := N + 249; Name_Form : constant Name_Id := N + 249;
...@@ -1183,6 +1183,7 @@ package Snames is ...@@ -1183,6 +1183,7 @@ package Snames is
Pragma_Export_Object, Pragma_Export_Object,
Pragma_Export_Procedure, Pragma_Export_Procedure,
Pragma_Export_Valued_Procedure, Pragma_Export_Valued_Procedure,
Pragma_External,
Pragma_Finalize_Storage_Only, Pragma_Finalize_Storage_Only,
Pragma_Ident, Pragma_Ident,
Pragma_Import, Pragma_Import,
......
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