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,ebfd1d7c60facfc5 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit From: "Scott Travak" Newsgroups: comp.lang.ada References: <414eee7d@dnews.tpgi.com.au> <7e7vk0dv2qhpqbdd58c0bvpesitapijr8v@4ax.com> Subject: Re: elaboration circularity detected problem, How to fix? Date: Tue, 21 Sep 2004 16:44:45 +1000 Organization: - X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-RFC2646: Format=Flowed; Original NNTP-Posting-Host: 220.244.246.157 X-Original-NNTP-Posting-Host: 220.244.246.157 Message-ID: <414fcddf@dnews.tpgi.com.au> X-Trace: dnews.tpgi.com.au!tpg.com.au 1095749087 220.244.246.157 (21 Sep 2004 16:44:47 +1000) Path: g2news1.google.com!news1.google.com!news.glorb.com!solnet.ch!solnet.ch!nntp.gblx.net!nntp3.phx1!dnews.tpgi.com.au!tpg.com.au!not-for-mail Xref: g2news1.google.com comp.lang.ada:3886 Date: 2004-09-21T16:44:45+10:00 List-Id: Hi Dennis, yes you are right, there are a few inconsistencies there. Sorry about that. My scaled-down workable code (which produces the same error) is as follows: Essentially what the example code is trying to do is: 1) create a remote location (i.e. chicago) with a 'send' and 'receive' task 2) the 'send task' sends a signal to some Destination station 3) the Destination station sends an acknowledgement signal back to chicago's 'receive task' The code worked fine prior to changing the location package into a generic package. All I want is to get rid of this "error: elaboration circularity detected" compilation error. Thanks for any help! Cheers, Scott ----------------- main.adb ----------------- with Definitions; use Definitions; with Location; procedure main is package Chicago_Ptr is new Location (Chicago); begin Chicago_Ptr.Send_Ptr := new Chicago_Ptr.Send_Type; Chicago_Ptr.Receive_Ptr := new Chicago_Ptr.Receive_Type; end main; ----------------- definitions.adb ----------------- package Definitions is type Location_Type is (Chicago, Paris, London); end Definitions; ----------------- location.ads ----------------- with Definitions; use Definitions; generic Centre : Location_Type; package Location is task type Send_Type is end Send_Type; task type Receive_Type is entry Ack_Channel; end Receive_Type; type Send_Ptr_Type is access Send_Type; type Receive_Ptr_Type is access Receive_Type; Send_Ptr : Send_Ptr_Type; Receive_Ptr : Receive_Ptr_Type; end Location; ----------------- location.adb ----------------- with Text_Io; use Text_Io; with Station; use Station; package body Location is task body Send_Type is Calls : Integer := 2; Done : Boolean := False; begin Put_Line(Location_Type'Image(Centre) & "_SEND alive"); while Calls > 0 loop delay 0.1; Destination.Signal; Calls := Calls - 1; end loop; Put_Line(Location_Type'Image(Centre) & "_SEND dead"); end Send_Type; ------------ task body Receive_Type is Done : Boolean := False; begin Put_Line(Location_Type'Image(Centre) & "_RECEIVE alive"); while not Done loop select accept Ack_Channel do Put_Line("Signal received by DESTINATION"); end Ack_Channel; else delay 0.1; end select; end loop; Put_Line(Location_Type'Image(Centre) & "_RECEIVE dead"); end Receive_Type; end Location; ----------------- station.ads ----------------- package Station is task Destination is entry Signal; end Destination; end Station; ----------------- station.adb ----------------- with Text_Io; use Text_Io; with Definitions; use Definitions; with Location; package body Station is package Chicago_Ptr is new Location (Chicago); task body Destination is Done : Boolean := False; begin Put_Line("DESTINATION alive"); while not Done loop select accept Signal do Put_Line("DESTINATION: Received signal"); Chicago_Ptr.Receive_Ptr.Ack_Channel; end Signal; else delay 0.1; end select; end loop; Put_Line("DESTINATION dead"); end Destination; end Station;