mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-06 03:50:31 +02:00
+ secondcalln() : unfinished
This commit is contained in:
parent
bc12eb6d88
commit
68d1a3adcc
217
tests/test/cg/tcall1.pp
Normal file
217
tests/test/cg/tcall1.pp
Normal file
@ -0,0 +1,217 @@
|
||||
{****************************************************************}
|
||||
{ CODE GENERATOR TEST PROGRAM }
|
||||
{ By Carl Eric Codere }
|
||||
{****************************************************************}
|
||||
{ NODE TESTED : secondcalln() }
|
||||
{****************************************************************}
|
||||
{ PRE-REQUISITES: secondload() }
|
||||
{ secondassign() }
|
||||
{ secondtypeconv() }
|
||||
{ secondtryexcept() }
|
||||
{****************************************************************}
|
||||
{ DEFINES: }
|
||||
{ FPC = Target is FreePascal compiler }
|
||||
{****************************************************************}
|
||||
{ REMARKS: This tests secondcalln(), genentrycode() and }
|
||||
{ genexitcode(). }
|
||||
{ }
|
||||
{ }
|
||||
{****************************************************************}
|
||||
program tcall;
|
||||
|
||||
{$mode objfpc}
|
||||
uses sysutils;
|
||||
|
||||
{
|
||||
class:
|
||||
class constructor
|
||||
1a - success
|
||||
1b - failure
|
||||
2 class destructor
|
||||
3 class method
|
||||
4 virtual method
|
||||
5 abstract method
|
||||
6 static method
|
||||
object:
|
||||
object constructor
|
||||
7a - success
|
||||
7b - failure
|
||||
8 object destructor
|
||||
9 method
|
||||
10 virtual method
|
||||
standard:
|
||||
11 function
|
||||
12 procedure
|
||||
13 procedure variable
|
||||
|
||||
modifiers:
|
||||
no parameters 1a 1b
|
||||
parameters
|
||||
- const 1a
|
||||
- value 1a
|
||||
- variable 1a
|
||||
- mixed 1a
|
||||
|
||||
explicit self parameter
|
||||
operator directive
|
||||
assembler directive
|
||||
interrupt directive
|
||||
inline directive
|
||||
cdecl directive
|
||||
pascal directive
|
||||
safecall directive
|
||||
stdcall directive
|
||||
popstack directive
|
||||
register directive
|
||||
}
|
||||
|
||||
const
|
||||
GLOBAL_RESULT = $55;
|
||||
|
||||
var
|
||||
globalresult : integer;
|
||||
failed : boolean;
|
||||
|
||||
type
|
||||
|
||||
tclass1 = class
|
||||
constructor create_none; { class constructor }
|
||||
constructor create_value(l:longint;b: byte);
|
||||
constructor create_var(var l:longint;var b: byte);
|
||||
constructor create_const(const l:longint; const b: byte);
|
||||
constructor create_mixed(var a: byte; b: byte; var c: byte; const d: byte);
|
||||
end;
|
||||
|
||||
tclass2 = class
|
||||
constructor create_none; { class constructor }
|
||||
b: array[1..20000000] of byte;
|
||||
end;
|
||||
|
||||
|
||||
constructor tclass1.create_none;
|
||||
begin
|
||||
Inherited create;
|
||||
globalresult:=GLOBAL_RESULT;
|
||||
end;
|
||||
|
||||
|
||||
constructor tclass1.create_value(l:longint;b: byte);
|
||||
begin
|
||||
Inherited create;
|
||||
globalresult:=b;
|
||||
end;
|
||||
|
||||
constructor tclass1.create_var(var l:longint;var b: byte);
|
||||
begin
|
||||
Inherited create;
|
||||
b:=GLOBAL_RESULT;
|
||||
end;
|
||||
|
||||
constructor tclass1.create_const(const l:longint; const b: byte);
|
||||
begin
|
||||
Inherited create;
|
||||
globalresult := GLOBAL_RESULT;
|
||||
end;
|
||||
|
||||
constructor tclass1.create_mixed(var a: byte; b: byte; var c: byte; const d: byte);
|
||||
begin
|
||||
Inherited create;
|
||||
globalresult := GLOBAL_RESULT;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
constructor tclass2.create_none;
|
||||
begin
|
||||
Inherited create;
|
||||
globalresult:=GLOBAL_RESULT;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure fail;
|
||||
begin
|
||||
WriteLn('Failure.');
|
||||
halt(1);
|
||||
end;
|
||||
|
||||
|
||||
function myheaperror(size : longint): integer;
|
||||
begin
|
||||
myheaperror:=1;
|
||||
end;
|
||||
|
||||
var
|
||||
class_none: tclass1;
|
||||
class_value: tclass1;
|
||||
class_var: tclass1;
|
||||
class_const: tclass1;
|
||||
class_mixed: tclass1;
|
||||
class_none_fail : tclass2;
|
||||
a,b,c,d: byte;
|
||||
l:longint;
|
||||
Begin
|
||||
{ reset test variables }
|
||||
globalresult := 0;
|
||||
failed := false;
|
||||
|
||||
{ required to do correct testing...}
|
||||
heaperror := @myheaperror;
|
||||
|
||||
write('class constructor testing...');
|
||||
{ secondcalln : class constructor success }
|
||||
class_none:=tclass1.create_none;
|
||||
if globalresult <> GLOBAL_RESULT then
|
||||
failed:= true;
|
||||
|
||||
globalresult := 0;
|
||||
class_value:=tclass1.create_value(0,GLOBAL_RESULT);
|
||||
if globalresult <> GLOBAL_RESULT then
|
||||
failed:= true;
|
||||
|
||||
globalresult := 0;
|
||||
b:=0;
|
||||
class_var:=tclass1.create_var(l,b);
|
||||
globalresult:=b;
|
||||
if globalresult <> GLOBAL_RESULT then
|
||||
failed:= true;
|
||||
|
||||
|
||||
globalresult := 0;
|
||||
b:=GLOBAL_RESULT;
|
||||
class_const:=tclass1.create_const(l,b);
|
||||
if globalresult <> GLOBAL_RESULT then
|
||||
failed:= true;
|
||||
|
||||
globalresult := 0;
|
||||
b:=0;
|
||||
a:=0;
|
||||
c:=0;
|
||||
d:=GLOBAL_RESULT;
|
||||
class_mixed:=tclass1.create_mixed(a,b,c,d);
|
||||
if globalresult <> GLOBAL_RESULT then
|
||||
failed:= true;
|
||||
|
||||
globalresult := 0;
|
||||
{ secondcalln : class constructor failure }
|
||||
try
|
||||
class_none_fail:=tclass2.create_none;
|
||||
except
|
||||
on EOutOfMemory do globalresult:=GLOBAL_RESULT;
|
||||
end;
|
||||
if globalresult <> GLOBAL_RESULT then
|
||||
failed:= true;
|
||||
|
||||
if failed then
|
||||
fail
|
||||
else
|
||||
WriteLn('Passed!');
|
||||
|
||||
end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-03-30 23:19:16 carl
|
||||
+ secondcalln() : unfinished
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user