From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Date: 4 May 93 13:45:33 GMT From: cis.ohio-state.edu!pacific.mps.ohio-state.edu!linac!uwm.edu!cs.utexas.edu !usc!howland.reston.ans.net!ira.uka.de!scsing.switch.ch!sicsun!disuns2.epfl.ch! di.epfl.ch!Magnus.Kempe@ucbvax. (Magnus Kempe) Subject: Re: Passing procedures as parameters to procedures. Message-ID: <1993May4.154040@di.epfl.ch> List-Id: In article <1s5gae$kr4@huon.itd.adelaide.edu.au>, andrewd@winnie.cs.adelaide.ed u.au (Andrew Dunstan,,2285592,) writes: : : As I pointed out in this group about a year ago, there are some things : that you want to be able to do that you just can't with generics. If : anybody can provide me with a good, clean, Ada equivalent of the : following Pascal code, I'll send him/her (first winner only!) a good : bottle of Australian red wine (damn this Beaujolais business!). : [Pascal code omitted] The solution is to make "D" visible. package Wrap_AD is procedure D; generic with procedure B; procedure A_G; end Wrap_AD; package body Wrap_AD is procedure D is begin null; end D; procedure A_G is begin B; end A_G; end Wrap_AD; generic with procedure Y; procedure X_G; procedure X_G is begin Y; end X_G; procedure X is new X_G (Wrap_AD.D); procedure A is new Wrap_AD.A_G (X); ... A; ... Two drawbacks: if D needs to access local variables of A_G, these variables must be made global (but may be hidden in the body of Wrap_A); the parameter B to A_G need not call D, but you may consider it a "feature", a more powerful variant. Good enough? -- Magnus Kempe "No nation was ever drunk when wine was cheap." magnus@lglsun.epfl.ch -- Thomas Jefferson