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=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,287f73fa8b0c840d X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!news.glorb.com!feeder.xsnews.nl!feeder.news-service.com!post.news-service.com!news1.surfino.com!not-for-mail Message-Id: <1733481.d5hpksrI6P@linux1.krischik.com> From: Martin Krischik Subject: Re: Syntax question: new with a constrained subtype indication Newsgroups: comp.lang.ada Date: Mon, 25 Apr 2005 18:34:26 +0200 References: <426d10d1$1_2@newsfeed.slurp.net> User-Agent: KNode/0.9.0 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit X-Complaints-To: abuse@surfino.com Organization: Surfino Gmbh NNTP-Posting-Host: 83.169.175.19 (83.169.175.19) NNTP-Posting-Date: Mon, 25 Apr 2005 19:59:57 +0200 X-Trace: 5a61a426d301df60c0ab624359 Xref: g2news1.google.com comp.lang.ada:10691 Date: 2005-04-25T18:34:26+02:00 List-Id: James Alan Farrell wrote: > Hi all, > I'm working on software to analyze Ada programs using ASIS. As such I > need to make sure I handle all cases in the syntax (and I'm finding that > in past assignments I've used only a small portion of the whole language!) > > I'm currently working on a piece of code to analyze allocator > expressions (ARM 4.8). The entire relevant syntax is: > > 4.8: > allocator ::= > new subtype_indication | new qualified_expression > > 3.2.2: > subtype_indication ::= subtype_mark [constraint] > > 3.2.2: > subtype_mark ::= subtype_name > > 3.2.2: > constraint ::= scalar_constraint | composite_constraint > > 3.2.2: > scalar_constraint ::= > range_constraint | digits_constraint | delta_constraint > > 3.5 > range_constraint ::= range range > > 3.5: > range ::= range_attribute_reference > | simple_expression .. simple_expression > > From this, it appears I should be able to do something like: > > package body Mod1 is > > procedure Proc1 is > > type Vector is array (Integer range <>) of Float; > type VectorPtr is access Vector; > > V : VectorPtr; > > begin > V := new Vector range 1 .. 10; V := new Vector (Integer range 1 .. 10); or shorter: V := new Vector (1 .. 10); You mixed the syntax for integer types: http://en.wikibooks.org/wiki/Programming:Ada:Types:range with the one for arrays http://en.wikibooks.org/wiki/Programming:Ada:Types:array The later need the ( and ). > end Proc1; > > end mod1; > > Using gnat 3.15p, I get this error: > > mod1.adb:15:23: incorrect constraint for this kind of type > gnatmake: "mod1.adb" compilation error > > I suspect this is a type issue, but let me know if there is something > incorrect in the syntax. > > The thing is, I've read 4.8 of the *annotated* ARM and I don't see > anything to say I cannot do this. So what am I missing? Is there > something, other than that document, that spells out the allowed types > of constraint? Your idea was right - just a syntax problem. Have fun Martin -- mailto://krischik@users.sourceforge.net Ada programming at: http://ada.krischik.com