comp.lang.ada
 help / color / mirror / Atom feed
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;
----


             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