Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ada > #49358

Discriminant problem

Path csiph.com!newsfeed.xs4all.nl!newsfeed9.news.xs4all.nl!feeder1.feed.usenet.farm!feed.usenet.farm!aioe.org!RKN7TKnHC01q0gdg6EhkbQ.user.46.165.242.75.POSTED!not-for-mail
From Simon Wright <simon@pushface.org>
Newsgroups comp.lang.ada
Subject Discriminant problem
Date Sun, 29 Aug 2021 19:51:57 +0100
Organization Aioe.org NNTP Server
Message-ID <lytuj8dqya.fsf@pushface.org> (permalink)
Mime-Version 1.0
Content-Type text/plain
Injection-Info gioia.aioe.org; logging-data="56256"; posting-host="RKN7TKnHC01q0gdg6EhkbQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent Gnus/5.13 (Gnus v5.13) Emacs/27.2 (darwin)
Cancel-Lock sha1:stjVDgJppL2Th4n5nlrH6Kvsk8s=
X-Notice Filtered by postfilter v. 0.9.2
Xref csiph.com comp.lang.ada:49358

Show key headers only | View raw


I have

      Location_Step.Node_Test :=
        (Node_Test => Get_Node_Type_Test (T.Node_Type_Part.all),
         Name      => Null_Unbounded_String);

where

   type Location_Steps is record
      ...
      Node_Test           : Node_Test_Specification
        := (Node_Test => No_Node_Test,
            Name      => Null_Unbounded_String);
      ...
   end record;

and

   type Node_Test_Specification
     (Node_Test : Node_Tests := No_Node_Test) is
      record
         Name : Unbounded_String;
         case Node_Test is
            ...
         end case;
      end record;

Because of that function call in

   Node_Test => Get_Node_Type_Test (T.Node_Type_Part.all)

the compiler says

   value for discriminant "Node_Test" must be static
   non-static function call (RM 4.9(6,18))

OK, I get that (tiresome though it is, and I'm amazed I've never come
across it before), but how to approach it? I seem to be OK with

      case Get_Node_Type_Test (T.Node_Type_Part.all) is
         when Text_Node_Test =>
            Location_Step.Node_Test :=
              (Node_Test => Text_Node_Test,
               Name      => Null_Unbounded_String);
         when ...
      end case;

but this seems very ugly.

I've only just noticed this: I'd been using -gnatX (so that I could use
'Image on records), which meant that the original code was OK (in the
sense that it didn't raise any problems), but of course it's not
portable even within the GNAT family. I think -gnat2020 might solve the
issue too, but there's a bit of a skew between CE 2021 and GCC 11.

Back to comp.lang.ada | Previous | NextNext in thread | Find similar


Thread

Discriminant problem Simon Wright <simon@pushface.org> - 2021-08-29 19:51 +0100
  Re: Discriminant problem Simon Wright <simon@pushface.org> - 2021-08-30 09:13 +0100
  Re: Discriminant problem "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> - 2021-08-31 00:03 +0200
    Re: Discriminant problem "Randy Brukardt" <randy@rrsoftware.com> - 2021-08-30 20:53 -0500
      Re: Discriminant problem Simon Wright <simon@pushface.org> - 2021-09-09 20:51 +0100

csiph-web