From: mockturtle <framefritti@gmail.com>
Subject: Weird error with Dynamic_Predicate
Date: Mon, 12 May 2014 12:47:41 -0700 (PDT)
Date: 2014-05-12T12:47:41-07:00 [thread overview]
Message-ID: <e4d8e3db-99b6-49d4-85f3-839f178d4047@googlegroups.com> (raw)
Dear all,
I am experiencing an error that is making me crazy and I was wondering if someone can help.
Some background: I want to define a type that represents an "identifier." The identifier can assume two forms:
- qualified (es. namespace.foo)
- not qualified (es. foo)
The two components (namespace and name) have the usual syntax (letters, digits and underscore). Note that there are at most two components. I want to use the aspect Dynamic_Predicate to enforce (and document) the right syntax.
You can find prova.ads and prova.adb at the end of this message. I am using GPS 5.2.1 (20130102) and when I try to compile I get the obscure message
29:32 error: conversion to incomplete type
29:32 confused by earlier errors, bailing out
on >> prova.ads <<. If I try to do "check semantic" on prova.ads and prova.adb, everything is fine.
Any ideas? Is it a compiler bug or am I doing something wrong? Updating the compiler in this moment it would be a little pain for me (for several reasons), so I would like to be sure that I am not doing some subtle error before trying the update path.
Thank you in advance
Riccardo
--- prova.ads ---
with Ada.Characters.Handling; use Ada.Characters.Handling;
with Ada.Strings.Fixed;
package Prova is
type Identifier_Name is new
String
with Dynamic_Predicate =>
((for all I in Identifier_Name'Range =>
Is_Alphanumeric (Identifier_Name (I))
or Identifier_Name (I) = '_'
or Identifier_Name (I) = '.')
and
(not (Identifier_Name (Identifier_Name'First) in '0' .. '9'))
and
(Identifier_Name (Identifier_Name'First) /= '.')
and
Ada.Strings.Fixed.Count (String (Identifier_Name), ".") <= 1);
function Is_Qualified (Item : Identifier_Name) return Boolean
is (Ada.Strings.Fixed.Count (String (Item), ".") = 1);
subtype Namespace_Identifier is Identifier_Name
with Dynamic_Predicate => not Is_Qualified (Namespace_Identifier);
subtype Full_Identifier is Identifier_Name
with Dynamic_Predicate => Is_Qualified (Full_Identifier);
function Extract_Namespace (Nome : Full_Identifier)
return Namespace_Identifier;
end Prova;
--- prova.adb ---
package body Prova is
-----------------------
-- Extract_Namespace --
-----------------------
function Extract_Namespace (Nome : Full_Identifier)
return Namespace_Identifier
is
Idx : Natural := Ada.Strings.Fixed.Index (String (Nome), ".");
begin
return Namespace_Identifier (Nome (Nome'First .. Idx - 1));
end Extract_Namespace;
end Prova;
----
next reply other threads:[~2014-05-12 19:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-12 19:47 mockturtle [this message]
2014-05-12 20:45 ` Weird error with Dynamic_Predicate Peter Chapin
2014-05-12 20:52 ` mockturtle
2014-05-12 21:01 ` Adam Beneschan
2014-05-12 22:17 ` Randy Brukardt
2014-05-13 4:40 ` Simon Wright
2014-05-13 20:50 ` Simon Wright
2014-05-13 4:59 ` Shark8
2014-05-13 12:46 ` G.B.
2014-05-13 17:04 ` Martin
2014-05-13 18:55 ` mockturtle
2014-05-13 21:39 ` Georg Bauhaus
2014-05-14 7:30 ` mockturtle
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox