+2001-12-04 Ed Schonberg <schonber@gnat.com>
+
+ * einfo.ads: Block_Node points to the identifier of the block, not to
+ the block node itself, to preserve the link when the block is
+ rewritten, e.g. within an if-statement with a static condition.
+
+ * inline.adb (Cleanup_Scopes): recover block statement from block
+ entity using new meaning of Block_Node.
+
+ * sem_ch5.adb (Analyze_Block_Statement): set Block_Node to point to
+ identifier of block node, rather than to node itself.
+
2001-12-04 Gary Dismukes <dismukes@gnat.com>
* layout.adb:
-- returns the entity unchanged.
-- Block_Node (Node11)
--- Present in block entities. Points to the Block_Statement itself.
+-- Present in block entities. Points to the identifier in the
+-- Block_Statement itself. Used when retrieving the block construct
+-- for finalization purposes, The block entity has an implicit label
+-- declaration in the enclosing declarative part, and has otherwise
+-- no direct connection in the tree with the block statement.
+-- The link is to the identifier (which is an occurence of the entity)
+-- and not to the block_statement itself, because the statement may
+-- be rewritten, e.g. in the process of removing dead code.
-- Body_Entity (Node19)
-- Present in package and generic package entities, points to the
-- --
-- B o d y --
-- --
--- $Revision: 1.55 $
+-- $Revision$
-- --
-- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
-- --
end if;
if Ekind (Scop) = E_Block then
- Decl := Block_Node (Scop);
+ Decl := Parent (Block_Node (Scop));
else
Decl := Unit_Declaration_Node (Scop);
end if;
Set_Etype (Ent, Standard_Void_Type);
- Set_Block_Node (Ent, N);
+ Set_Block_Node (Ent, Identifier (N));
New_Scope (Ent);
if Present (Decls) then