Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2006-05

How to get rid of hint?

10 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Mattias Gaertner

I want to compute the offset/difference between two pointers. But I didn't found a way to do that without compiler hints.

unit1.pas(42,6) Hint: Conversion between ordinals and pointers is not
portable
var
  p1, p2: pointer;
  i: PtrInt;
begin
  ...
  i:=PtrInt(p1)-PtrInt(p2);
  ...
end;

Any idea, how to get rid of the hint?

Mattias

Florian Klaempfl
to Mattias Gaertner: On Sat, 20 May 2006 22:50:17 +0200 (CEST) Thanks. So the trick to get convert a Pointer…
Mattias Gaertner wrote 12 lines
On Sat, 20 May 2006 22:50:17 +0200 (CEST) (Marco van de Voort) wrote: >> i:=PtrInt(p1)-PtrInt(p2); > i:=prtint(p1-p2); Thanks. So the trick to get convert a Pointer to an ordinal is to add/subtract something. For example: i:=PtrInt(p1-nil); Is there a better trick?

Let me ask the other way round: what do you want to achieve :)?

What type has Pointer-Pointer?

PtrInt

Mattias Gaertner
to Florian Klaempfl
Show quoted text 15 lines
Mattias Gaertner wrote: > On Sat, 20 May 2006 22:50:17 +0200 (CEST) > (Marco van de Voort) wrote: > >>> i:=PtrInt(p1)-PtrInt(p2); >> i:=prtint(p1-p2); > > Thanks. > So the trick to get convert a Pointer to an ordinal is to add/subtract > something. For example: > i:=PtrInt(p1-nil); > > Is there a better trick? Let me ask the other way round: what do you want to achieve :)?

I have some classes, that implement quite abstract structures. Of course pascal wants a type, so they use a base type: Pointer. Now I want to store PtrInt.
And the other way round.
So, I must type case from one to the other and back. With templates or some include file tricks I could probably avoid the problem.

> What type has Pointer-Pointer? > PtrInt

Thanks. I thought so.

Mattias

Florian Klaempfl
to Mattias Gaertner
Mattias Gaertner wrote 24 lines
On Sat, 20 May 2006 23:20:41 +0200 Florian Klaempfl wrote: > Mattias Gaertner wrote: >> On Sat, 20 May 2006 22:50:17 +0200 (CEST) >> (Marco van de Voort) wrote: >> >>>> i:=PtrInt(p1)-PtrInt(p2); >>> i:=prtint(p1-p2); >> Thanks. >> So the trick to get convert a Pointer to an ordinal is to add/subtract >> something. For example: >> i:=PtrInt(p1-nil); >> >> Is there a better trick? > Let me ask the other way round: what do you want to achieve :)? I have some classes, that implement quite abstract structures. Of course pascal wants a type, so they use a base type: Pointer. Now I want to store PtrInt. And the other way round. So, I must type case from one to the other and back. With templates or some include file tricks I could probably avoid the problem.

Wait with this till 2.2 is finish and get first lazarus 1.0 out of the door :)

Mattias Gaertner
to Florian Klaempfl
Show quoted text 28 lines
Mattias Gaertner wrote: > On Sat, 20 May 2006 23:20:41 +0200 > Florian Klaempfl wrote: > >> Mattias Gaertner wrote: >>> On Sat, 20 May 2006 22:50:17 +0200 (CEST) >>> (Marco van de Voort) wrote: >>> >>>>> i:=PtrInt(p1)-PtrInt(p2); >>>> i:=prtint(p1-p2); >>> Thanks. >>> So the trick to get convert a Pointer to an ordinal is to add/subtract >>> something. For example: >>> i:=PtrInt(p1-nil); >>> >>> Is there a better trick? >> Let me ask the other way round: what do you want to achieve :)? > > I have some classes, that implement quite abstract structures. Of course > pascal wants a type, so they use a base type: Pointer. > Now I want to store PtrInt. > And the other way round. > So, I must type case from one to the other and back. > With templates or some include file tricks I could probably avoid the > problem. Wait with this till 2.2 is finish and get first lazarus 1.0 out of the door :)

Well, 1000 bug reports ago I estimated that only 300 todo left. Lazarus 1.0 is a hydra.

Mattias

Florian Klaempfl
to Mattias Gaertner
Mattias Gaertner wrote 32 lines
On Sun, 21 May 2006 18:36:08 +0200 Florian Klaempfl wrote: > Mattias Gaertner wrote: >> On Sat, 20 May 2006 23:20:41 +0200 >> Florian Klaempfl wrote: >> >>> Mattias Gaertner wrote: >>>> On Sat, 20 May 2006 22:50:17 +0200 (CEST) >>>> (Marco van de Voort) wrote: >>>> >>>>>> i:=PtrInt(p1)-PtrInt(p2); >>>>> i:=prtint(p1-p2); >>>> Thanks. >>>> So the trick to get convert a Pointer to an ordinal is to add/subtract >>>> something. For example: >>>> i:=PtrInt(p1-nil); >>>> >>>> Is there a better trick? >>> Let me ask the other way round: what do you want to achieve :)? >> I have some classes, that implement quite abstract structures. Of course >> pascal wants a type, so they use a base type: Pointer. >> Now I want to store PtrInt. >> And the other way round. >> So, I must type case from one to the other and back. >> With templates or some include file tricks I could probably avoid the >> problem. > Wait with this till 2.2 is finish and get first lazarus 1.0 out of the > door :) Well, 1000 bug reports ago I estimated that only 300 todo left. Lazarus 1.0 is a hydra.

We felt the same way at pre 1.0 times with FPC ;(