[fpc-pascal] IE 200307043

Frank Peelo f26p at eircom.net
Wed May 27 14:49:26 CEST 2009


Prince Riley wrote:
> 
> Frank,
> 
> I think the crux of the matter here is how to make the distinction 
> between a pointer with 'no value' and one that is initialized or set to 
> the 'lowest possible value in the range'. The quote I mentioned comes 
> directly from Borland's Object Pascal  Langage Manual

"The reserved word nil is a special constant that can be
assigned to any pointer. When nil is assigned to a pointer, the
pointer doesn't reference anything."

I'm only quibbling with the equation of "doesn't reference anything" 
with "lowest possible value in the range". On many architectures, a 
pointer value of 0 might be a reasonable choice for "doesn't reference 
anything" because the CPU has interrupt vectors there, or uses address 0 
for something else. But my point is that this is not guaranteed. Nil 
might not even point to valid data memory.

> You can check on this, but when I looked it up the 'nil' constant in a 
> Object Pascal Language reference and what the reserved word 'nil' , a 
> special constant, means in terms of pointer value (it's not an address) 
> I was not able to find  and what adding/subtracting/multiplying it by  a 
> literal numeric value (or another valid pointer value) to 'nil' would 
> create.

But I'm more puzzled by what it would /mean/. In spite of your bracketed 
comment here, you seem to be thinking that nil is an address: i.e. 
adding/subtracting/multiplying a literal would mean something. I'm just 
pointing out that, if you think it's an address, it's undefined. Because 
it's not any address. So adding something to it doesn't mean anything.

...
> If you 
> then set another breakpoint on the next instruction, 
> 
> p := p + 1;
> 
> you'll notice that the first thing that happens is 'p' get set to a 
> valid segment address and then the offset, and not the base segment, is 
> incremented by a value of '1' (again on a Intel CPU machine). 

Yup, GIGO.

FP





More information about the fpc-pascal mailing list