[fpc-pascal] uses in 'filename'
Michael Van Canneyt
michael at freepascal.org
Thu Feb 22 12:48:21 CET 2018
On Thu, 22 Feb 2018, Mattias Gaertner wrote:
> Hi,
>
> FPC allows to use two different units with the same name:
>
> uses foo in 'unit1.pas', bar in 'sub/unit1.pas';
>
> Which might fail with linking errors.
>
> Is this a feature or a bug?
A feature.
First of all, normally it won't work either way, because you must use "unit foo;" and "unit bar;" in the
files. A quick test confirms this:
home:~/source/testsub> fpc a.pp
unit1.pas(1,9) Error: Illegal unit name: foo (expecting FOO)
unit1.pas(7,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Where
a.pp:
-----
uses foo in 'unit1.pas', bar in 'sub/unit1.pas';
begin
dofoo;
dobar;
end.
Unit1.pp:
---------
unit foo;
interface
procedure dofoo;
implementation
procedure dofoo;
begin
writeln('foo');
end;
end.
sub/unit1.pp:
-------------
unit bar;
interface
procedure dobar;
implementation
procedure dobar;
begin
writeln('bar');
end;
end.
But if you tell the compiler to ignore the unit filenames (-Un) then you get
home:~/source/testsub> fpc -Un a.pp
home:~/source/testsub> ./a
foo
bar
And then it works perfectly.
All assembler is prefixed using the declared
unit name:
.file "unit1.pas"
# Begin asmlist al_procedures
.section .text.n_foo_$$_dofoo
etc.
Michael.
More information about the fpc-pascal
mailing list