RES: [fpc-pascal] dot within unit file name

Michael Van Canneyt michael at freepascal.org
Fri Jan 18 15:50:20 CET 2008



On Fri, 18 Jan 2008, Vinzent Hoefler wrote:

> On Friday 18 January 2008 15:19, Michael Van Canneyt wrote:
> 
> > > I saw this week a CodeGear Guy in a cg ng talking about that.
> > > In Win32 its is Just dots in the name, nothing else.
> >
> > If he said that, he is totally braindead and doesn't have a clue
> > about what he is talking.
> 
> Well, the discussion and explanation that have been provided so far, 
> back up that braindead guy's statement.

Of course not:

tell me, what does a.b.c.d mean if you have a record a with field b,
and you have a uses a.b.c in your uses clause ?

so
----------------------------
unit a.b.c;

interface

Var
  D : Integer;

implementation

end.
----------------------------

and then:
----------------------------

unit test;

interface

uses a.b.c;

Type
  T = record
   b : integer;
  end;

Implementation

var
  A : T;

begin
  A.b.c.d:=3;// ???
end.
----------------------------
 
To the user, it may appear as a bunch of dots. To the compiler, it doesn't
know how to map the a.b.c.d:

1. Scoping rules dictate that the first match is the variable a.  
   So, it finds a as a variable. 
2. then it finds b in the fields of T. OK, it's on the right track! 
3. But then it looks for C, but doesn't find it -> error, what now ?

nevertheless (a.b.c).d would be a correct reference to integer d in unit a.b.c
(the brackets serve just to make a point, they are not real notation).

So, what to do ? Throw an error, or set d in unit a.b.c. ?
And what about searching for (a).b.c.d and (a.b).c.d ? What combinations of
dots and brackets must be tried ? (namespaces could also be a and a.b)

Maybe someone with delphi for .net available can run the above test ?

Michael.



More information about the fpc-pascal mailing list