mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-11 11:38:01 +02:00
69 lines
1.3 KiB
ObjectPascal
69 lines
1.3 KiB
ObjectPascal
{ %OPT=-Sg }
|
|
|
|
{ Old file: tbs0178.pp }
|
|
{ problems with undefined labels and fail outside constructor OK 0.99.9 (PM) }
|
|
|
|
PROGRAM NoLabel; { this program compiles fine with TP but not with FP }
|
|
|
|
type
|
|
ptestobj = ^ttestobj;
|
|
ttestobj = object
|
|
constructor init;
|
|
procedure test_self;
|
|
end;
|
|
|
|
const
|
|
allowed : boolean = false;
|
|
|
|
constructor ttestobj.init;
|
|
begin
|
|
if not allowed then
|
|
fail;
|
|
end;
|
|
procedure ttestobj.test_self;
|
|
function myself : ptestobj;
|
|
begin
|
|
myself:=@self;
|
|
end;
|
|
|
|
begin
|
|
if myself<>@self then
|
|
begin
|
|
Writeln('problem with self');
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
|
|
LABEL
|
|
N1,
|
|
N2,
|
|
FAIL, { this is a reserved word in constructors only! - FP fails here
|
|
}
|
|
More; { label not defined - FP fails, but a warning is enough for that
|
|
}
|
|
{ since label referenced nowhere }
|
|
var ptest : ptestobj;
|
|
self : longint;
|
|
BEGIN
|
|
new(ptest,init);
|
|
if ptest<>nil then
|
|
begin
|
|
Writeln('Fail does not work !!');
|
|
Halt(1);
|
|
end;
|
|
allowed:=true;
|
|
new(ptest,init);
|
|
if ptest=nil then
|
|
begin
|
|
Writeln('Constructor does not work !!');
|
|
Halt(1);
|
|
end
|
|
else
|
|
ptest^.test_self;
|
|
N1: Write;
|
|
N2: Write;
|
|
FAIL: Write;
|
|
self:=1;
|
|
END.
|