comp.lang.ada
 help / color / mirror / Atom feed
From: Andrew Shvets <andrew.shvets@gmail.com>
Subject: Select + Accept syntax question
Date: Sat, 27 Aug 2016 11:26:02 -0700 (PDT)
Date: 2016-08-27T11:26:02-07:00	[thread overview]
Message-ID: <60637c3a-c699-4e4c-9fd3-1a081cb6152c@googlegroups.com> (raw)

Hello,

When working with tasks, you can use a selective wait in order to have your task quickly check its queue of messages and see if there any waiting for it (i.e. a selective wait.)  Now, in order to further build on this, guards can be used to ensure that certain conditions are met before processing some messages.

After messing around with both concepts, I created the following example:
while Go_Loop LOOP
  select
    when Internal_Value = 0 =>
      accept Input(Value : in Integer) do
        Internal_Value := Value;
      end Input;
  or
    when Internal_Value /= 0 =>
      accept Retrieve(Value : out Integer) do
        Value := Internal_Value;
      end Retrieve;

The one thing that threw me for a loop was when I put any type of code right before the above two accept keywords, like so:
while Go_Loop LOOP
  select
    when Internal_Value = 0 =>
      Ada.Text_IO.Put_Line("hello world");
      accept Input(Value : in Integer) do
        Internal_Value := Value;
      end Input;
  or
    when Internal_Value /= 0 =>
      Ada.Text_IO.Put_Line("hello world");
      accept Retrieve(Value : out Integer) do
        Value := Internal_Value;
      end Retrieve;

And I get the following output from the compiler:

> gnatmake -g .\task_demo_11.adb
gcc -c -I.\ -g -I- .\task_demo_11.adb
task_demo_11.adb:25:16: missing "END SELECT;" for "SELECT" at line 18
task_demo_11.adb:25:17: select alternative ("ACCEPT", "ABORT", "DELAY") expected
task_demo_11.adb:38:07: "OR" not allowed here
task_demo_11.adb:42:07: no "SELECT" for this "END SELECT"
gnatmake: ".\task_demo_11.adb" compilation error

Why does this happen?  Why can't I have code right before the accept?  I can see a compilation error if there is no accept...


             reply	other threads:[~2016-08-27 18:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-27 18:26 Andrew Shvets [this message]
2016-08-27 19:20 ` Select + Accept syntax question Niklas Holsti
2016-08-27 19:47   ` Andrew Shvets
2016-08-28  6:52     ` Niklas Holsti
2016-08-27 19:36 ` Jeffrey R. Carter
2016-08-27 19:48   ` Andrew Shvets
2016-08-27 23:22     ` Jeffrey R. Carter
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox