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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,ea40456edaea3d23 X-Google-Attributes: gid103376,public From: rouillard@acm.org (Jacques Rouillard) Subject: Re: Pascal to Ada translator/ aflex,ayacc GNAT ports Date: 1996/12/02 Message-ID: #1/1 X-Deja-AN: 201874857 distribution: world references: <57uki4INNkae@maz4.sma.ch> organization: ESIM/EII-ISMEA newsgroups: comp.lang.ada Date: 1996-12-02T00:00:00+00:00 List-Id: In article <57uki4INNkae@maz4.sma.ch>, lga@sma.ch wrote: > In article , dewar@merv.cs.nyu.edu (Robert Dewar) writes: > > Wiljan says > > Seems to me that the Pascal WITH is *exactly* analogous to the Ada renaming, > > with a little less to write, but with less flexibility. > > > > > In the MacOs, you often have structures like a Rect which are > > Rect = record > top, bottom, right, left: integer; > end; > > You are typically using WITH when you are calculating with them. The intent > is to make the source easier to read, and only that. (Well, compiler might > write more efficent code as well.) > > my_rect : Rect; > > with my_rect do begin { may have a scope of many lines } > top := top - top_margin; > right := left + (3*(bottom - top)) div 4; > bottom := bottom - bot_margin; > end; > > In this case, the proposed solution would not help much. It would be > preferable to work as in C: no local block, and all the fields are written > in full. An extra local variable cannot do any better. > > my_rect.top := my_rect.top - top_margin; > my_rect.right := my_rect.left + (3*(my_rect.bottom - my_rect.top)) div 4; > my_rect.bottom := my_rect.bottom - bot_margin; > > This is the case every time the structured type is directly the type > of the variable at work. No array of, pointer to, or field in a record > of the structured type. The Ada renaming is quite effective when the > structured type is deeply nested in the variable call. Problem: the withed thing can be returned by a fonction, that may have side effects. function my_rect : Rect; .... with my_rect do begin (*called only once*) top := top - top_margin; right := left + (3*(bottom - top)) div 4; bottom := bottom - bot_margin; end; my_rect.top := my_rect.top - top_margin; my_rect.right := my_rect.left + (3*(my_rect.bottom - my_rect.top)) div 4; my_rect.bottom := my_rect.bottom - bot_margin; (*called 3 times*) The best approximation remains the 'renames'. -- Jacques Rouillard t33(0)491054342 f33(0)491700659 e rouillard@acm.org USA http://vhdl.org/~rouillard EU http://ismea.imt-mrs.fr/~rouillar ---------------------- Va savoir, Charles -------------------------- Ne reponds pas au fou selon |Reponds au fou selon sa demence sa demence, que tu ne l'egales| de peur qu'il ne soit sage toi aussi [Prov 26:4] | a ses yeux [Prov 26:5] --------------------------------------------------------------------