ca21001.a

来自「linux下编程用 编译软件」· A 代码 · 共 153 行

A
153
字号
-- CA21001.A----                             Grant of Unlimited Rights----     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and--     F08630-91-C-0015, the U.S. Government obtained unlimited rights in the--     software and documentation contained herein.  Unlimited rights are--     defined in DFAR 252.227-7013(a)(19).  By making this public release,--     the Government intends to confer upon all recipients unlimited rights--     equal to those held by the Government.  These rights include rights to--     use, duplicate, release or disclose the released technical data and--     computer software in whole or in part, in any manner and for any purpose--     whatsoever, and to have or permit others to do so.----                                    DISCLAIMER----     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED--     WARRANTY AS TO ANY MATTER WHATSOVER, INCLUDING THE CONDITIONS OF THE--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A--     PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE--     Check the requirements of the revised 10.2.1(11) from Technical--     Corrigendum 1 (originally discussed as AI95-00002).--     A package subunit whose parent is a preelaborated subprogram need--     not be preelaborable.---- TEST DESCRIPTION--     We create several preelaborated library procedures with--     non-preelaborable package body subunits.  We try various levels--     of nesting of package and procedure subunits.---- CHANGE HISTORY:--      29 JUN 1999   RAD   Initial Version--      23 SEP 1999   RLB   Improved comments, renamed, issued.----!procedure CA21001_1(X: out Integer);    pragma Preelaborate(CA21001_1);procedure CA21001_1(X: out Integer) is    function F return Integer is separate;    package Sub is        function G(X: Integer) return Integer;            -- Returns X + 1.        Not_Preelaborable: Integer := F; -- OK, by AI-2.    end Sub;    package body Sub is separate;begin    X := -1;    X := F;    X := Sub.G(X);end CA21001_1;separate(CA21001_1)package body Sub is    package Sub_Sub is        -- Empty.    end Sub_Sub;    package body Sub_Sub is separate;    function G(X: Integer) return Integer is separate;begin    Not_Preelaborable := G(F); -- OK, by AI-2.    if Not_Preelaborable /= 101 then        raise Program_Error; -- Can't call Report.Failed, here,            -- because Report is not preelaborated.    end if;end Sub;separate(CA21001_1.Sub)package body Sub_Sub isbegin    X := X; -- OK by AI-2.end Sub_Sub;separate(CA21001_1.Sub)function G(X: Integer) return Integer is    package G_Sub is        function H(X: Integer) return Integer;            -- Returns X + 1.        Not_Preelaborable: Integer := F; -- OK, by AI-2.    end G_Sub;    package body G_Sub is separate;begin    return G_Sub.H(X);end G;separate(CA21001_1.Sub.G)package body G_Sub is    function H(X: Integer) return Integer is separate;begin    Not_Preelaborable := H(F); -- OK, by AI-2.    if Not_Preelaborable /= 101 then        raise Program_Error; -- Can't call Report.Failed, here,            -- because Report is not preelaborated.    end if;end G_Sub;separate(CA21001_1.Sub.G.G_Sub)function H(X: Integer) return Integer isbegin    return X + 1;end H;separate(CA21001_1)function F return Integer is    package F_Sub is        -- Empty.    end F_Sub;    package body F_Sub is separate;begin    return 100;end F;separate(CA21001_1.F)package body F_Sub is    True_Var: Boolean;begin    True_Var := True;    if True_Var then -- OK by AI-2.        X := X;    else        X := X + 2;    end if;end F_Sub;with Report; use Report;with CA21001_1;procedure CA21001 is    X: Integer := 0;begin    Test("CA21001",         "Test that a package subunit whose parent is a preelaborated"         & " subprogram need not be preelaborable");    CA21001_1(X);    if X /= 101 then        Failed("Bad value for X");    end if;    Result;end CA21001;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?