* if Restrict_Func /= null confusion
@ 2008-03-30 20:58 ma740988
2008-03-30 21:34 ` jimmaureenrogers
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: ma740988 @ 2008-03-30 20:58 UTC (permalink / raw)
Well folks its been at least 4 years since I've perused and/or written
Ada source. That aside I'm perusing source code written in Ada. So
consider:
-- used to restrict a variable within a range
-- for example: -PI to +PI
type Restrict_Function is access function (X: Real4) return Real4;
type Filt_Data is
record
Restrict_Func : Restrict_Function ;
end record ;
-- within a procedure we have
Fdata : Filt_Data;
Restrict_Func : Restrict_Function := FData.Restrict_Func ;
if Restrict_Func /= null then
-- stuff
endif
At issue: I'm not following the conditional logic 'if (Restrict_Func /
= null)'. Not understanding the impetus behind the check for null.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: if Restrict_Func /= null confusion
2008-03-30 20:58 if Restrict_Func /= null confusion ma740988
@ 2008-03-30 21:34 ` jimmaureenrogers
2008-03-30 21:36 ` Ludovic Brenta
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: jimmaureenrogers @ 2008-03-30 21:34 UTC (permalink / raw)
On Mar 30, 2:58 pm, ma740...@gmail.com wrote:
> Well folks its been at least 4 years since I've perused and/or written
> Ada source. That aside I'm perusing source code written in Ada. So
> consider:
>
> -- used to restrict a variable within a range
> -- for example: -PI to +PI
> type Restrict_Function is access function (X: Real4) return Real4;
>
> type Filt_Data is
> record
> Restrict_Func : Restrict_Function ;
>
> end record ;
>
> -- within a procedure we have
> Fdata : Filt_Data;
> Restrict_Func : Restrict_Function := FData.Restrict_Func ;
>
> if Restrict_Func /= null then
> -- stuff
> endif
>
> At issue: I'm not following the conditional logic 'if (Restrict_Func /
> = null)'. Not understanding the impetus behind the check for null.
Type Restrict_Function is an access type. It is possible for an
instance of Restrict_Function to have a null value. This kind of
problem can occur if you are creating an array of Restrict_Function
and only some of the elements of the array are set to non-null values.
You will encounter a run-time error if you try to dereference a null
access value.
Jim Rogers
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: if Restrict_Func /= null confusion
2008-03-30 20:58 if Restrict_Func /= null confusion ma740988
2008-03-30 21:34 ` jimmaureenrogers
@ 2008-03-30 21:36 ` Ludovic Brenta
2008-03-30 21:37 ` Robert A Duff
2008-03-30 21:44 ` Georg Bauhaus
3 siblings, 0 replies; 5+ messages in thread
From: Ludovic Brenta @ 2008-03-30 21:36 UTC (permalink / raw)
ma740988@gmail.com writes:
> I'm not following the conditional logic 'if (Restrict_Func / =
> null)'. Not understanding the impetus behind the check for null.
If Restrict_Func is null and you try to call the subprogram it
designates, you get a Constraint_Error (ARM 4.9(13)). If you disable
runtime checks, your program is likely to crash.
--
Ludovic Brenta.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: if Restrict_Func /= null confusion
2008-03-30 20:58 if Restrict_Func /= null confusion ma740988
2008-03-30 21:34 ` jimmaureenrogers
2008-03-30 21:36 ` Ludovic Brenta
@ 2008-03-30 21:37 ` Robert A Duff
2008-03-30 21:44 ` Georg Bauhaus
3 siblings, 0 replies; 5+ messages in thread
From: Robert A Duff @ 2008-03-30 21:37 UTC (permalink / raw)
ma740988@gmail.com writes:
> Well folks its been at least 4 years since I've perused and/or written
> Ada source. That aside I'm perusing source code written in Ada. So
> consider:
>
> -- used to restrict a variable within a range
> -- for example: -PI to +PI
> type Restrict_Function is access function (X: Real4) return Real4;
>
> type Filt_Data is
> record
> Restrict_Func : Restrict_Function ;
>
> end record ;
>
>
> -- within a procedure we have
> Fdata : Filt_Data;
> Restrict_Func : Restrict_Function := FData.Restrict_Func ;
>
> if Restrict_Func /= null then
> -- stuff
> endif
>
> At issue: I'm not following the conditional logic 'if (Restrict_Func /
> = null)'. Not understanding the impetus behind the check for null.
Restrict_Func is a pointer to a function. To call the function,
you say something like "Restrict_Func.all(X)". You can leave
the ".all" implicit: "Restrict_Func(X)", but the ".all" still
happens. ".all" on a null pointer raises an exception.
In your example, presumably "stuff" calls the function -- so it needs to
be protected by the 'if'.
It's usually better to declare:
type Restrict_Function is not null access function ...;
^^^^^^^^
so you don't need to worry about null, which is just a tripping hazard.
Or use primitive operations of tagged types and dispatching calls.
- Bob
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: if Restrict_Func /= null confusion
2008-03-30 20:58 if Restrict_Func /= null confusion ma740988
` (2 preceding siblings ...)
2008-03-30 21:37 ` Robert A Duff
@ 2008-03-30 21:44 ` Georg Bauhaus
3 siblings, 0 replies; 5+ messages in thread
From: Georg Bauhaus @ 2008-03-30 21:44 UTC (permalink / raw)
On Sun, 2008-03-30 at 13:58 -0700, ma740988@gmail.com wrote:
> -- used to restrict a variable within a range
> -- for example: -PI to +PI
> type Restrict_Function is access function (X: Real4) return Real4;
>
> type Filt_Data is
> record
> Restrict_Func : Restrict_Function ;
>
> end record ;
>
>
> -- within a procedure we have
> Fdata : Filt_Data;
> Restrict_Func : Restrict_Function := FData.Restrict_Func ;
>
> if Restrict_Func /= null then
> -- stuff
> endif
>
> At issue: I'm not following the conditional logic 'if (Restrict_Func /
> = null)'. Not understanding the impetus behind the check for null.
The type Restrict_Function includes the null value.
The FData.Restrict_Func record component gets the default
initial value for access values. It is therefore null.
So Filt_Data.Restrict_Func is actually null.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-03-30 21:44 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-30 20:58 if Restrict_Func /= null confusion ma740988
2008-03-30 21:34 ` jimmaureenrogers
2008-03-30 21:36 ` Ludovic Brenta
2008-03-30 21:37 ` Robert A Duff
2008-03-30 21:44 ` Georg Bauhaus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox