From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 10.224.55.200 with SMTP id v8mr9068328qag.7.1372575618959; Sun, 30 Jun 2013 00:00:18 -0700 (PDT) X-Received: by 10.49.58.170 with SMTP id s10mr576325qeq.28.1372575618930; Sun, 30 Jun 2013 00:00:18 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!mx05.eternal-september.org!feeder.eternal-september.org!usenet.blueworldhosting.com!news.glorb.com!j2no1787182qak.0!news-out.google.com!f7ni121qai.0!nntp.google.com!j2no3016930qak.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Sun, 30 Jun 2013 00:00:18 -0700 (PDT) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=93.208.118.178; posting-account=a23u_AkAAAB-Xz81hSqodYsmJRrMwioK NNTP-Posting-Host: 93.208.118.178 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <63a787e1-c3d9-4bfd-a7e6-6ff0f0c8236b@googlegroups.com> Subject: "shadow" package hierarchy using renaming of child packages From: Oliver Kellogg Injection-Date: Sun, 30 Jun 2013 07:00:18 +0000 Content-Type: text/plain; charset=ISO-8859-1 Xref: news.eternal-september.org comp.lang.ada:15988 Date: 2013-06-30T00:00:18-07:00 List-Id: Hi, I was quite amazed to find that GNAT lets me rename a child package of one hierarchy to a child package of a different hierarchy (i.e. having a different root.) Does this work on other compilers too? Thanks, Oliver -- file: foo.ads (original root package) package Foo is type T is new Integer; end Foo; -- file: foo-child.ads package Foo.Child is function Create return T; end Foo.Child; -- file: foo-child.adb package body Foo.Child is function Create return T is begin return 0; end Create; end Foo.Child; -- file: shadow.ads (a different root package) with Foo; package Shadow is subtype T is Foo.T; type Other_Stuff is range 999 .. 1000; end Shadow; -- file: shadow-child.ads with Foo.Child; package Shadow.Child renames Foo.Child; -- file: test_shadow.adb with Shadow.Child; procedure Test_Shadow is I : Shadow.T := Shadow.Child.Create; begin null; end Test_Shadow;