mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 10:29:24 +02:00
first web bugs in webtbs
This commit is contained in:
parent
5def4fada6
commit
34e57eeff5
50
tests/webtbs/tbug555.pp
Normal file
50
tests/webtbs/tbug555.pp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{ FPC behaves interestingly once encountered virtual method
|
||||||
|
declared as
|
||||||
|
procedure TWhateverObject.Method1; assembler; asm ... end;
|
||||||
|
if you ever try to overload such method _in another unit_,
|
||||||
|
than compile _second unit_, and than try to compile it again (???)-
|
||||||
|
you will end up with the message "Function header does not match
|
||||||
|
forward declaration of TNewObject.Method1" although in reality
|
||||||
|
it does match perfectly.
|
||||||
|
sometimes i encounter the same message even on non-assembler methods,
|
||||||
|
but i have not been able to reproduce them cleanly nor find the
|
||||||
|
reason for such behavior.}
|
||||||
|
|
||||||
|
unit tbug555;
|
||||||
|
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses
|
||||||
|
tbug555a;
|
||||||
|
|
||||||
|
type
|
||||||
|
TBugObjChild = Object(TBugObj)
|
||||||
|
procedure Method1;
|
||||||
|
procedure Method2;virtual;
|
||||||
|
procedure Method3;
|
||||||
|
procedure Method4;virtual;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure TBugObjChild.Method1;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBugObjChild.Method2;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$ASMMODE ATT}
|
||||||
|
procedure TBugObjChild.Method3;assembler;
|
||||||
|
asm
|
||||||
|
movl $1,%eax
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBugObjChild.Method4;assembler;
|
||||||
|
asm
|
||||||
|
movl $1,%eax
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
57
tests/webtbs/tbug555a.pp
Normal file
57
tests/webtbs/tbug555a.pp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{ FPC behaves interestingly once encountered virtual method
|
||||||
|
declared as
|
||||||
|
procedure TWhateverObject.Method1; assembler; asm ... end;
|
||||||
|
if you ever try to overload such method _in another unit_,
|
||||||
|
than compile _second unit_, and than try to compile it again (???)-
|
||||||
|
you will end up with the message "Function header does not match
|
||||||
|
forward declaration of TNewObject.Method1" although in reality
|
||||||
|
it does match perfectly.
|
||||||
|
sometimes i encounter the same message even on non-assembler methods,
|
||||||
|
but i have not been able to reproduce them cleanly nor find the
|
||||||
|
reason for such behavior.}
|
||||||
|
|
||||||
|
unit tbug555a;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TBugObj = Object
|
||||||
|
constructor Init;
|
||||||
|
procedure Method1;
|
||||||
|
procedure Method2;virtual;
|
||||||
|
procedure Method3;
|
||||||
|
procedure Method4;virtual;
|
||||||
|
destructor Done;virtual;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
Constructor TBugObj.Init;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$ASMMODE ATT}
|
||||||
|
procedure TBugObj.Method1;assembler;
|
||||||
|
asm
|
||||||
|
movl $1,%eax
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBugObj.Method2;assembler;
|
||||||
|
asm
|
||||||
|
movl $1,%eax
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBugObj.Method3;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBugObj.Method4;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
Destructor TBugObj.Done;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
34
tests/webtbs/tbug630.pp
Normal file
34
tests/webtbs/tbug630.pp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{ Program 1 : memory waste
|
||||||
|
dummy test }
|
||||||
|
|
||||||
|
USES SysUtils;
|
||||||
|
|
||||||
|
procedure test_it;
|
||||||
|
var
|
||||||
|
sRec : TSearchRec;
|
||||||
|
begin
|
||||||
|
writeln(memAvail);
|
||||||
|
findFirst('c:\*.*',faVolumeId,sRec);
|
||||||
|
findClose(sRec);
|
||||||
|
writeln(sRec.name);
|
||||||
|
writeln(memAvail); { 288 bytes waste ! }
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Writeln('Before call ',MemAvail);
|
||||||
|
test_it;
|
||||||
|
Writeln('After call : ',MemAvail);
|
||||||
|
end.
|
||||||
|
(*{ Program 2 : correct }
|
||||||
|
|
||||||
|
USES Dos;
|
||||||
|
|
||||||
|
var
|
||||||
|
sRec : searchRec;
|
||||||
|
begin
|
||||||
|
writeln(memAvail);
|
||||||
|
findFirst('c:\*.*',volumeid,sRec);
|
||||||
|
findClose(sRec);
|
||||||
|
writeln(sRec.name);
|
||||||
|
writeln(memAvail); { no memory waste ! }
|
||||||
|
end. *)
|
18
tests/webtbs/tbug701a.pp
Normal file
18
tests/webtbs/tbug701a.pp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
var
|
||||||
|
s : string;
|
||||||
|
|
||||||
|
procedure UseString(const as : string);
|
||||||
|
begin
|
||||||
|
s:=as;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure MyExit;
|
||||||
|
begin
|
||||||
|
Writeln('Last call to UseString was with as = ',s);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
exitproc:=@MyExit;
|
||||||
|
UseString('Dummy test');
|
||||||
|
end.
|
||||||
|
|
78
tests/webtbs/tbug711.pp
Normal file
78
tests/webtbs/tbug711.pp
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
program TestGetPutim; {Compiled with the 0.99.13 version under GO32V2!}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$ifdef go32v2}
|
||||||
|
dpmiexcp,
|
||||||
|
{$endif go32v2}
|
||||||
|
graph;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var graphdriver,graphmode :integer;
|
||||||
|
|
||||||
|
imsize:longint;
|
||||||
|
|
||||||
|
im:pointer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
begin
|
||||||
|
{$ifdef win32}
|
||||||
|
graphdriver:=VGA;
|
||||||
|
graphmode:=detect;
|
||||||
|
{$else not win32}
|
||||||
|
graphdriver:=VESA;
|
||||||
|
graphmode:=$103;
|
||||||
|
{$endif}
|
||||||
|
Initgraph(graphdriver,graphmode,'');
|
||||||
|
|
||||||
|
{************}
|
||||||
|
(*
|
||||||
|
setcolor(6);
|
||||||
|
|
||||||
|
moveto(0,0); {Some drawing}
|
||||||
|
|
||||||
|
lineto(500,500);
|
||||||
|
|
||||||
|
circle(95,95,80);
|
||||||
|
|
||||||
|
{************}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{!!!!!!!!!!!!}
|
||||||
|
|
||||||
|
imsize:= imagesize(0,0,300,300); {This is the part we have problem with.}
|
||||||
|
|
||||||
|
getmem(im,imsize); {The result we get after PutImage is}
|
||||||
|
|
||||||
|
getimage(0,0,300,300,im^); {chaotic independently from the graphmode!}
|
||||||
|
|
||||||
|
putimage(50,50,im^,0); {We tested this on a S3Trio 3D videcard,}
|
||||||
|
|
||||||
|
{which is VESA compatible.}
|
||||||
|
|
||||||
|
{!!!!!!!!!!!!}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
readln;
|
||||||
|
{repeat until keypressed;}
|
||||||
|
*)
|
||||||
|
closegraph;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
I. Groma
|
||||||
|
|
||||||
|
groma@metal.elte.hu
|
||||||
|
|
||||||
|
Budapest 11/24/1999
|
||||||
|
|
||||||
|
}
|
17
tests/webtbs/tbug719.pp
Normal file
17
tests/webtbs/tbug719.pp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
uses
|
||||||
|
sysutils;
|
||||||
|
|
||||||
|
var
|
||||||
|
S : string;
|
||||||
|
SR : TSearchRec;
|
||||||
|
r : longint;
|
||||||
|
begin
|
||||||
|
r:=FindFirst('*.*',faAnyFile,SR);
|
||||||
|
while r=0 do
|
||||||
|
begin
|
||||||
|
S:=DateTimeToStr(FileDateToDateTime(FileAge(SR.Name)));
|
||||||
|
Writeln(SR.Name,' has Date ',S);
|
||||||
|
r:=FindNext(SR);
|
||||||
|
end;
|
||||||
|
FindClose(SR);
|
||||||
|
end.
|
9
tests/webtbs/tbug744.pp
Normal file
9
tests/webtbs/tbug744.pp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Unit tbug744;
|
||||||
|
|
||||||
|
Interface
|
||||||
|
|
||||||
|
Uses tbug744a;
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
|
||||||
|
end.
|
10
tests/webtbs/tbug744a.pp
Normal file
10
tests/webtbs/tbug744a.pp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Unit tbug744a;
|
||||||
|
|
||||||
|
Interface
|
||||||
|
|
||||||
|
Uses tbug744;
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
4
tests/webtbs/tbug748.pp
Normal file
4
tests/webtbs/tbug748.pp
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
begin
|
||||||
|
writeln('Hello World');
|
||||||
|
end.
|
||||||
|
{this comment produces Unexpected end of file}
|
6
tests/webtbs/tbug751.pp
Normal file
6
tests/webtbs/tbug751.pp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
var x,y:integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
y:=5;
|
||||||
|
for x:=0 to 10 do if x<y then writeln(x);
|
||||||
|
end.
|
40
tests/webtbs/tbug753.pp
Normal file
40
tests/webtbs/tbug753.pp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{$MODE objfpc}
|
||||||
|
{$H+}
|
||||||
|
program stackcrash;
|
||||||
|
uses sysutils;
|
||||||
|
type
|
||||||
|
TMyClass = class
|
||||||
|
public
|
||||||
|
procedure Proc1;
|
||||||
|
procedure Proc2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMyClass.Proc1;
|
||||||
|
var
|
||||||
|
x, y: Integer;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
exit;
|
||||||
|
except
|
||||||
|
on e: Exception do begin e.Message := '[Proc1]' + e.Message; raise e end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMyClass.Proc2;
|
||||||
|
var
|
||||||
|
x: array[0..7] of Byte;
|
||||||
|
crash: Boolean;
|
||||||
|
begin
|
||||||
|
crash := True; // <--- ! This corrupts the stack?!?
|
||||||
|
raise Exception.Create('I will crash now...');
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
obj: TMyClass;
|
||||||
|
begin
|
||||||
|
obj := TMyClass.Create;
|
||||||
|
obj.Proc1;
|
||||||
|
WriteLn('Proc1 done, calling Proc2...');
|
||||||
|
obj.Proc2;
|
||||||
|
WriteLn('Proc2 done');
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user