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=0.6 required=5.0 tests=BAYES_05,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!bcm!dimacs.rutgers.edu!rutgers!mcnc!uvaarpa!software.software.org!collard From: collard@software.org (David Collard) Newsgroups: comp.lang.ada Subject: Re: How to NOT give new default to parameter of generic procedure parameter?... Message-ID: <1991Feb15.135505.6333@software.org> Date: 15 Feb 91 13:55:05 GMT References: <1991Feb14.224435.1512@software.org> Sender: news@software.org Organization: spd List-Id: In article <1991Feb14.224435.1512@software.org> stluka@software.org (Fred Stluka) writes: > Here's one for the language lawyers. I don't think there is > a way to do this. Someone please tell me that I'm wrong. > > From within a generic body GEN, I want to call a procedure PROC1 > which was was passed in as a generic parameter PROC. I want to > make the call without specifying any parameters, allowing all of > them to default to the default expressions specified in the > declaration of PROC1. I also do not want to re-specify the default > expressions in my declaration of PROC as a generic formal parameter > to GEN, because this would override the defaults of PROC1 which may > someday be changed. > Are either of these options better? the first takes in your constant as a generic formal and the second takes in a visible function as a generic formal (default). -- (1) -- generic default_for_x : integer; with procedure proc1(x : integer := default_for_x); procedure gen; procedure gen is begin proc1; end gen; with gen; with Text_IO; use Text_IO; procedure boss is def : integer := 1; procedure proc(x : integer := 1) is begin put_line(integer'image(x)); end proc; procedure mygen is new gen(proc1, def); begin mygen; end boss; -- (2) -- generic with function default_for_x return integer is <>; with procedure proc1(x : integer := default_for_x); procedure gen; procedure gen is begin proc1; end gen; with gen; with Text_IO; use Text_IO; procedure boss is function default_for_x return integer is begin return 1; end; procedure proc(x : integer := 1) is begin put_line(integer'image(x)); end proc; procedure mygen is new gen(proc1 => proc); begin mygen; end boss; -- ----------------------------------------------------------------------- D. Thor Collard Internet: collard@software.org Software Productivity Consortium UUNET: ...!uunet!software!collard 2214 Rock Hill Rd, Herndon VA 22070