comp.lang.ada
 help / color / mirror / Atom feed
From: kilgallen@eisner.decus.org (Larry Kilgallen)
Subject: Re: Pascal to Ada translator/ aflex,ayacc GNAT ports
Date: 1996/12/02
Date: 1996-12-02T00:00:00+00:00	[thread overview]
Message-ID: <1996Dec2.093152.1@eisner> (raw)
In-Reply-To: 57uki4INNkae@maz4.sma.ch


In article <57uki4INNkae@maz4.sma.ch>, lga@sma.ch (Laurent Gasser) writes:

> 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.

Note that Macintosh Pascal compilers have often been constructed
so as not to help the user regarding interaction between "with"
statements and memory-moving toolbox calls.  Thus if the "with"
statement base calculation dereferences an unlocked handle
(pointer to a pointer to data) no toolbox calls which might
relocate heap should be made within the scope of that "with".

Pascal code which ignores that problem might be hit only after
translation to Ada, and for those trying to port code rather
than point fingers (yes, it was bad Macintosh Pascal) a translator
would be more valuable if it unrolled the problem "with" clauses
(even if the best it could do was to unroll _all_ "with" clauses).

Or can one rename something based on an aliased pointer ?

Larry Kilgallen




  reply	other threads:[~1996-12-02  0:00 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-11-27  0:00 Pascal to Ada translator/ aflex,ayacc GNAT ports Martin C. Carlisle
1996-11-27  0:00 ` Michael Feldman
1996-11-28  0:00   ` steved
1996-11-29  0:00     ` Robert Dewar
1996-11-29  0:00       ` Larry Kilgallen
1996-11-29  0:00       ` wiljan
1996-11-29  0:00         ` Robert Dewar
1996-11-30  0:00           ` wiljan
1996-11-30  0:00             ` Robert Dewar
1996-12-01  0:00               ` wiljan
1996-12-01  0:00                 ` Michael Feldman
1996-12-01  0:00                 ` Robert Dewar
1996-12-02  0:00           ` Laurent Gasser
1996-12-02  0:00             ` Larry Kilgallen [this message]
1996-12-02  0:00             ` Jacques Rouillard
replies disabled

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