1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- { %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.
|