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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: pragma/aspect Import, Convention parameters Date: Thu, 13 Aug 2015 10:27:38 +0200 Organization: cbb software GmbH Message-ID: <1215a889y9uxf$.1nolkb1ctch79$.dlg@40tude.net> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: enOx0b+nfqkc2k+TNpOejg.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:27433 Date: 2015-08-13T10:27:38+02:00 List-Id: Why is it an identifier? For writing portable code it should be a static expression. The problem is that much too often the exported functions of the same library have different conventions on different platforms, e.g. procedure Foo ... pragma Import (C, Foo, "Foo"); -- Linux procedure Foo ... pragma Import (StdCall, Foo, "_Foo"); -- Windows The external name is an expression. Thus you could write something like pragma Import (..., Foo, Target.External_Name_Prefix & "Foo"); With External_Name_Prefix defined in a single configuration packet Target to change. But the convention is not an expression. There certainly are ways to keep it backward compatible, e.g. procedure Foo ... pragma Import (User, Foo, "Foo", "Stdcall"); procedure Foo ... with Convention_Name => "StdCall", ... -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de