[fpc-pascal]Yet another problem concerning Qualifiers
Anton Tichawa
anton.tichawa at chello.at
Sat Jul 10 20:00:14 CEST 2004
Michael.VanCanneyt at Wisa.be wrote:
>On Fri, 9 Jul 2004, Ron Weidner wrote:
>
>
>
>>--- Marcel Martin <mm10 at ellipsa.net> wrote:
>>
>>
>>>Anton Tichawa a ?crit :
>>>
>>>
>>>>Hello List!
>>>>
>>>>Compiling the unit
>>>>
>>>>===
>>>>
>>>>unit test;
>>>>
>>>>interface
>>>>
>>>>procedure test.do_test;
>>>>
>>>>implementation
>>>>
>>>>procedure test.do_test;
>>>>begin
>>>>end;
>>>>
>>>>end.
>>>>
>>>>===
>>>>
>>>>results in compiler errors:
>>>>
>>>>test.pas(5,15) Error: overloaded identifier TEST
>>>>
>>>>
>>>isn't a function
>>>
>>>
>>>>test.pas(5,15) Fatal: Syntax error, ; expected but
>>>>
>>>>
>>>. found
>>>
>>>
>>The following compiled for me...
>>
>> unit test;
>>
>> interface
>>
>> procedure do_test();
>>
>> implementation
>>
>> procedure do_test();
>> begin
>> end;
>>
>> begin
>> end.
>>
>>I think you only need to fully qualify methods
>>(functions or procedures) when they are part of an
>>object.
>>
>>
>
>This is correct. One should never repeat the unit name in a declaration of
>an identifier.
>
I see. Still, the implementation of a class method requires prepending
the container's name, while the implementation of a module's procedure
disallows it. So, when creating pascal code for an arbitrary procedure,
I have to write:
if false then begin
end else if inherits(my_container, cmodule) then begin
my_text.add_string('procedure ' + my_procedure.fname);
end else if inherits(my_container, cclass) then begin
my_text.add_string('procedure ' + my_container.fname + '.' +
my_procedure.fname);
end;
>Delphi also chokes on the original code, albeit with a
>different error:
>
>Copyright (c) 1983,2002 Borland Software Corporation
>test.pp(5) Error: Identifier redeclared: 'test'
>test.pp(9) Error: Identifier redeclared: 'test'
>test.pp(14)
>test.pp(5) Error: Unsatisfied forward or external declaration: '.1'
>
>The last line is particularly interesting, I've never encountered that
>before. A bug in the Delphi compiler? :-)
>
>
>
*smile* they somehow seem to accept and remember the forward declaration
in line 5. But then, even before storing it's name, they reject it, thus
leaving the declaration with a skeleton name '.1'.
More information about the fpc-pascal
mailing list