mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-28 11:22:56 +02:00
814 lines
26 KiB
PHP
814 lines
26 KiB
PHP
(* Struture
|
|
program WatchesPrg;
|
|
type
|
|
{$DEFINE Global_Type}
|
|
{$DEFINE Global_Implementation}
|
|
|
|
procedure FooFunc( {$DEFINE FooFunc_Param} }
|
|
type
|
|
{$DEFINE FooFunc_LocalType}
|
|
var
|
|
{$DEFINE FooFunc_LocalVar}
|
|
function SubFoo()():Integer; begin end;
|
|
begin
|
|
{$DEFINE FooFunc_Body}
|
|
end;
|
|
|
|
var
|
|
{$DEFINE Global_Var}
|
|
begin
|
|
{$DEFINE Global_Body}
|
|
FooFunc( {$DEFINE Global_Call_FooFunc} );
|
|
{$DEFINE Global_Body_NIL}
|
|
FooFunc( {$DEFINE Global_Call_FooFunc} );
|
|
end;
|
|
|
|
*)
|
|
|
|
//TODO: globla/local const
|
|
|
|
{$IFDEF Global_Type}
|
|
//type
|
|
TFoo = class;
|
|
{$ENDIF}
|
|
|
|
|
|
{* ******************** RECORD ******************** *}
|
|
{%region RECORD}
|
|
|
|
{%region TYPE}
|
|
{$IFDEF Global_Type}
|
|
//type
|
|
PRec = ^TRec;
|
|
PPRec = ^PRec;
|
|
TRec = record
|
|
ValInt: Integer;
|
|
ValFoo: TFoo;
|
|
end;
|
|
TNewRec = type TRec;
|
|
|
|
PRecSelf = ^TRecSelf;
|
|
PPRecSelf = ^PRecSelf;
|
|
TRecSelf = record
|
|
ValInt: Integer;
|
|
ValPRec: PRec;
|
|
ValPPRec: PPRec;
|
|
ValPRec2: PRecSelf;
|
|
ValPPRec2: PPRecSelf;
|
|
ValRecSelfDArray: Array of PRecSelf;
|
|
ValRecSelfS0Array: Array [0..2] of PRecSelf;
|
|
ValRecSelfS1Array: Array [1..3] of PRecSelf;
|
|
ValRecSelfS3Array: Array [3..6] of PRecSelf;
|
|
end;
|
|
|
|
TRecSelfDArray = Array of TRecSelf;
|
|
TRecSelfS0Array = Array [0..2] of TRecSelf;
|
|
TRecSelfS1Array = Array [1..3] of TRecSelf;
|
|
TRecSelfS3Array = Array [3..6] of TRecSelf;
|
|
|
|
TPRecSelfDArray = Array of PRecSelf;
|
|
TPRecSelfS0Array = Array [0..2] of PRecSelf;
|
|
TPRecSelfS1Array = Array [1..3] of PRecSelf;
|
|
TPRecSelfS3Array = Array [3..6] of PRecSelf;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalType}
|
|
//type
|
|
PLocalRec = ^TLocalRec;
|
|
TLocalRec = record
|
|
ValInt: Integer;
|
|
ValBar: TFoo;
|
|
ValPRec: PRec;
|
|
ValPLocalRec: PLocalRec;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
{%endregion TYPE}
|
|
|
|
{%region VARIABLES}
|
|
{$IFDEF FooFunc_Param}
|
|
//procedure FooFunc(
|
|
ArgTRec: TRec; var VArgTRec: TRec;
|
|
ArgPRec: PRec; var VArgPRec: PRec;
|
|
ArgPPRec: PPRec; var VArgPPRec: PPRec;
|
|
ArgTNewRec: TNewRec; var VArgTNewRec: TNewRec;
|
|
|
|
ArgTRecSelf: TRecSelf; var VArgTRecSelf: TRecSelf;
|
|
ArgPRecSelf: PRecSelf; var VArgPRecSelf: PRecSelf;
|
|
ArgPPRecSelf: PPRecSelf; var VArgPPRecSelf: PPRecSelf;
|
|
|
|
ArgTRecSelfDArray: TRecSelfDArray; var VArgTRecSelfDArray: TRecSelfDArray;
|
|
ArgTRecSelfS0Array: TRecSelfS0Array; var VArgTRecSelfS0Array: TRecSelfS0Array;
|
|
ArgTRecSelfS1Array: TRecSelfS1Array; var VArgTRecSelfS1Array: TRecSelfS1Array;
|
|
ArgTRecSelfS3Array: TRecSelfS3Array; var VArgTRecSelfS3Array: TRecSelfS3Array;
|
|
|
|
ArgTPRecSelfDArray: TPRecSelfDArray; var VArgTPRecSelfDArray: TPRecSelfDArray;
|
|
ArgTPRecSelfS0Array: TPRecSelfS0Array; var VArgTPRecSelfS0Array: TPRecSelfS0Array;
|
|
ArgTPRecSelfS1Array: TPRecSelfS1Array; var VArgTPRecSelfS1Array: TPRecSelfS1Array;
|
|
ArgTPRecSelfS3Array: TPRecSelfS3Array; var VArgTPRecSelfS3Array: TPRecSelfS3Array;
|
|
{$ENDIF}
|
|
{$IFDEF Global_Call_FooFunc}
|
|
//FooFunc(
|
|
{ records }
|
|
GlobTRec, GlobTRec,
|
|
GlobPRec, GlobPRec,
|
|
GlobPPRec, GlobPPRec,
|
|
GlobTNewRec, GlobTNewRec,
|
|
|
|
GlobTRecSelf, GlobTRecSelf2,
|
|
GlobPRecSelf, GlobPRecSelf2,
|
|
GlobPPRecSelf, GlobPPRecSelf2,
|
|
|
|
GlobTRecSelfDArray, GlobTRecSelfDArray2,
|
|
GlobTRecSelfS0Array, GlobTRecSelfS0Array2,
|
|
GlobTRecSelfS1Array, GlobTRecSelfS1Array2,
|
|
GlobTRecSelfS3Array, GlobTRecSelfS3Array2,
|
|
|
|
GlobTPRecSelfDArray, GlobTPRecSelfDArray2,
|
|
GlobTPRecSelfS0Array, GlobTPRecSelfS0Array2,
|
|
GlobTPRecSelfS1Array, GlobTPRecSelfS1Array2,
|
|
GlobTPRecSelfS3Array, GlobTPRecSelfS3Array2,
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalVar}
|
|
//var
|
|
{ records }
|
|
VarTRec: TRec;
|
|
VarPRec: PRec;
|
|
VarPPRec: PPRec;
|
|
VarTNewRec: TNewRec;
|
|
|
|
PVarTRec: ^TRec;
|
|
PVarTNewRec: ^TNewRec;
|
|
|
|
VarRecA: record val: Integer; end;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Var}
|
|
//var
|
|
{ records }
|
|
GlobTRec, GlobTRec1, GlobTRec2: TRec;
|
|
GlobPRec, GlobPRec2: PRec;
|
|
GlobPPRec: PPRec;
|
|
GlobTNewRec: TNewRec;
|
|
|
|
PGlobTRec: ^TRec;
|
|
PGlobTNewRec: ^TNewRec;
|
|
|
|
GlobTRecSelf, GlobTRecSelf2: TRecSelf;
|
|
GlobPRecSelf, GlobPRecSelf2: PRecSelf;
|
|
GlobPPRecSelf, GlobPPRecSelf2: PPRecSelf;
|
|
|
|
GlobTRecSelfDArray, GlobTRecSelfDArray2: TRecSelfDArray;
|
|
GlobTRecSelfS0Array, GlobTRecSelfS0Array2: TRecSelfS0Array;
|
|
GlobTRecSelfS1Array, GlobTRecSelfS1Array2: TRecSelfS1Array;
|
|
GlobTRecSelfS3Array, GlobTRecSelfS3Array2: TRecSelfS3Array;
|
|
|
|
GlobTPRecSelfDArray, GlobTPRecSelfDArray2: TPRecSelfDArray;
|
|
GlobTPRecSelfS0Array, GlobTPRecSelfS0Array2: TPRecSelfS0Array;
|
|
GlobTPRecSelfS1Array, GlobTPRecSelfS1Array2: TPRecSelfS1Array;
|
|
GlobTPRecSelfS3Array, GlobTPRecSelfS3Array2: TPRecSelfS3Array;
|
|
|
|
{$ENDIF}
|
|
{%endregion VARIABLES}
|
|
|
|
{%region CODE (initilization)}
|
|
{$IFDEF FooFunc_Body}
|
|
//begin
|
|
{ records }
|
|
VarTRec := ArgTRec;
|
|
VarPRec := ArgPRec;
|
|
VarPPRec := ArgPPRec;
|
|
VarTNewRec := ArgTNewRec;
|
|
|
|
PVarTRec := @ArgTRec;
|
|
PVarTNewRec := @ArgTNewRec;
|
|
|
|
VarRecA.val := 1;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body}
|
|
//begin
|
|
{ records }
|
|
GlobTRec.ValInt := -1;
|
|
GlobTRec.ValFoo := nil;
|
|
|
|
GlobTRec1.ValInt := 1;
|
|
GlobTRec1.ValFoo := TFoo.Create;
|
|
GlobTRec1.ValFoo.ValueInt := 11;
|
|
|
|
GlobTRec2.ValInt := 2;
|
|
GlobTRec2.ValFoo := TFoo.Create;
|
|
GlobTRec2.ValFoo.ValueInt := 22;
|
|
|
|
GlobPRec := @GlobTRec1;
|
|
GlobPRec2 := @GlobTRec2;
|
|
GlobPPRec := @GlobPRec2;
|
|
|
|
GlobTNewRec.ValInt := 3;
|
|
GlobTNewRec.ValFoo := nil;
|
|
|
|
PGlobTRec := @GlobTNewRec;
|
|
PGlobTNewRec := @GlobTNewRec;
|
|
|
|
//GlobTRecSelf, GlobTRecSelf2: TRecSelf;
|
|
GlobTRecSelf.ValInt := 100;
|
|
GlobTRecSelf.ValPRec := @GlobTRec1; // Valint=1
|
|
GlobTRecSelf.ValPPRec := @GlobPRec2; // Valint=2
|
|
GlobTRecSelf.ValPRec2 := @GlobTRecSelf; // self
|
|
GlobTRecSelf.ValPPRec2 := @GlobTRecSelf.ValPRec2;
|
|
|
|
GlobTRecSelf2.ValInt := 102;
|
|
GlobTRecSelf2.ValPRec := @GlobTRec1; // Valint=1
|
|
GlobTRecSelf2.ValPPRec := @GlobPRec2; // Valint=2
|
|
GlobTRecSelf2.ValPRec2 := @GlobTRecSelf2;
|
|
GlobTRecSelf2.ValPPRec2 := @GlobTRecSelf2.ValPRec2;
|
|
|
|
SetLength(GlobTRecSelf.ValRecSelfDArray, 2);
|
|
GlobTRecSelf.ValRecSelfDArray[0] := @GlobTRecSelf2;
|
|
GlobTRecSelf.ValRecSelfDArray[1] := @GlobTRecSelf;
|
|
GlobTRecSelf.ValRecSelfS0Array[0] := @GlobTRecSelf2;
|
|
GlobTRecSelf.ValRecSelfS0Array[1] := @GlobTRecSelf;
|
|
GlobTRecSelf.ValRecSelfS1Array[1] := @GlobTRecSelf2;
|
|
GlobTRecSelf.ValRecSelfS1Array[2] := @GlobTRecSelf;
|
|
GlobTRecSelf.ValRecSelfS3Array[3] := @GlobTRecSelf2;
|
|
GlobTRecSelf.ValRecSelfS3Array[4] := @GlobTRecSelf;
|
|
|
|
SetLength(GlobTRecSelf2.ValRecSelfDArray, 2);
|
|
GlobTRecSelf2.ValRecSelfDArray[0] := @GlobTRecSelf;
|
|
GlobTRecSelf2.ValRecSelfDArray[1] := @GlobTRecSelf2;
|
|
GlobTRecSelf2.ValRecSelfS0Array[0] := @GlobTRecSelf;
|
|
GlobTRecSelf2.ValRecSelfS0Array[1] := @GlobTRecSelf2;
|
|
GlobTRecSelf2.ValRecSelfS1Array[1] := @GlobTRecSelf;
|
|
GlobTRecSelf2.ValRecSelfS1Array[2] := @GlobTRecSelf2;
|
|
GlobTRecSelf2.ValRecSelfS3Array[3] := @GlobTRecSelf;
|
|
GlobTRecSelf2.ValRecSelfS3Array[4] := @GlobTRecSelf2;
|
|
|
|
//GlobPRecSelf, GlobPRecSelf2: PRecSelf;
|
|
GlobPRecSelf := @GlobTRecSelf;
|
|
GlobPRecSelf2 := @GlobTRecSelf2;
|
|
|
|
//GlobPPRecSelf, GlobPPRecSelf2: PPRecSelf;
|
|
GlobPPRecSelf := @GlobPRecSelf;
|
|
GlobPPRecSelf2 := @GlobPRecSelf2;
|
|
|
|
//GlobTRecSelfDArray, GlobTRecSelfDArray2: TRecSelfDArray;
|
|
SetLength(GlobTRecSelfDArray, 2);
|
|
SetLength(GlobTRecSelfDArray2, 2);
|
|
GlobTRecSelfDArray[0] := GlobTRecSelf;
|
|
GlobTRecSelfDArray[1] := GlobTRecSelf2;
|
|
GlobTRecSelfDArray2[0] := GlobTRecSelf;
|
|
GlobTRecSelfDArray2[1] := GlobTRecSelf2;
|
|
|
|
//GlobTRecSelfS0Array, GlobTRecSelfS0Array2: TRecSelfS0Array;
|
|
GlobTRecSelfS0Array[0] := GlobTRecSelf;
|
|
GlobTRecSelfS0Array[1] := GlobTRecSelf2;
|
|
GlobTRecSelfS0Array2[0] := GlobTRecSelf;
|
|
GlobTRecSelfS0Array2[1] := GlobTRecSelf2;
|
|
//GlobTRecSelfS1Array, GlobTRecSelfS1Array2: TRecSelfS1Array;
|
|
GlobTRecSelfS1Array[1] := GlobTRecSelf;
|
|
GlobTRecSelfS1Array[2] := GlobTRecSelf2;
|
|
GlobTRecSelfS1Array2[1] := GlobTRecSelf;
|
|
GlobTRecSelfS1Array2[2] := GlobTRecSelf2;
|
|
//GlobTRecSelfS3Array, GlobTRecSelfS3Array2: TRecSelfS3Array;
|
|
GlobTRecSelfS3Array[3] := GlobTRecSelf;
|
|
GlobTRecSelfS3Array[4] := GlobTRecSelf2;
|
|
GlobTRecSelfS3Array2[3] := GlobTRecSelf;
|
|
GlobTRecSelfS3Array2[4] := GlobTRecSelf2;
|
|
|
|
//GlobTPRecSelfDArray, GlobTPRecSelfDArray2: TPRecSelfDArray;
|
|
SetLength(GlobTPRecSelfDArray, 2);
|
|
SetLength(GlobTPRecSelfDArray2, 2);
|
|
GlobTPRecSelfDArray[0] := @GlobTRecSelfDArray[0];
|
|
GlobTPRecSelfDArray[1] := @GlobTRecSelfDArray[1];
|
|
GlobTPRecSelfDArray2[0] := @GlobTRecSelfDArray2[0];
|
|
GlobTPRecSelfDArray2[1] := @GlobTRecSelfDArray2[1];
|
|
|
|
|
|
//GlobTPRecSelfS0Array, GlobTPRecSelfS0Array2: TPRecSelfS0Array;
|
|
//GlobTPRecSelfS1Array, GlobTPRecSelfS1Array2: TPRecSelfS1Array;
|
|
//GlobTPRecSelfS3Array, GlobTPRecSelfS3Array2: TPRecSelfS3Array;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body_NIL}
|
|
//begin
|
|
{ records }
|
|
//GlobTRec := nil;
|
|
GlobPRec := nil;
|
|
GlobPPRec := nil;
|
|
//GlobTNewRec := nil;
|
|
{$ENDIF}
|
|
|
|
{%endregion CODE (initilization)}
|
|
|
|
{%endregion RECORD}
|
|
|
|
{* ******************** CLASSES ******************** *}
|
|
{%region CLASSES TypeCast }
|
|
{$IFDEF Global_Type}
|
|
//type
|
|
TClassTCast = class public b: Integer; end;
|
|
TClassTCastObject = class(TObject) public b: Integer; l: Array of Integer; end;
|
|
TClassTCastComponent = class(TComponent) public b: Integer; end;
|
|
|
|
{$IFDEF USE_W1}
|
|
TClassTCastUW1 = class(TClassUW1Base) public b: Integer; end;
|
|
TClassTCastUW1Object = class(TClassUW1BaseObject) public b: Integer; end;
|
|
TClassTCastUW1Component = class(TClassUW1BaseComponent) public b: Integer; end;
|
|
{$ENDIF}
|
|
|
|
TClassTCast2 = class(TClassTCast)
|
|
private
|
|
privMember1: Integer;
|
|
protected
|
|
protMember1: Integer;
|
|
public
|
|
publMember1: Integer;
|
|
c: Integer;
|
|
procedure ClassTCast2Method1; //procedure TClassTCast2.ClassTCast2Method1;
|
|
end;
|
|
TClassTCast3 = type TClassTCast;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalVar}
|
|
// VarO..., VarNO... : TObject; // cast to real class
|
|
VarOTestTCast, VarOTestTCastObj, VarOTestTCastComp, VarOTestTCast2: TObject;
|
|
VarNOTestTCast, VarNOTestTCastObj, VarNOTestTCastComp, VarNOTestTCast2: TObject; // nil
|
|
{$IFDEF USE_W1}
|
|
VarOTestTCastUW1, VarOTestTCastUW1Obj, VarOTestTCastUW1Comp: TObject;
|
|
VarNOTestTCastUW1, VarNOTestTCastUW1Obj, VarNOTestTCastUW1Comp: TObject; // nil
|
|
{$ENDIF}
|
|
|
|
// VarC..., VarNC...: TComponent; // cast to real class OR object
|
|
VarCTestTCastComp, VarNCTestTCastComp: TComponent;
|
|
{$IFDEF USE_W1}
|
|
VarCTestTCastUW1Comp, VarNCTestTCastUW1Comp: TComponent;
|
|
{$ENDIF}
|
|
|
|
// VarB.., VarBN...: TBase;
|
|
VarBTestTCast2, VarBNTestTCast2: TClassTCast;
|
|
|
|
// Var.., VarN...: TRealType; // cast to lower class
|
|
VarTestTCast, VarNTestTCast: TClassTCast;
|
|
VarTestTCastObj, VarNTestTCastObj: TClassTCastObject;
|
|
VarTestTCastComp, VarNTestTCastComp: TClassTCastComponent;
|
|
VarTestTCast2, VarNTestTCast2: TClassTCast2;
|
|
VarTestTCast3, VarNTestTCast3: TClassTCast3;
|
|
{$IFDEF USE_W1}
|
|
VarUTestTCastUW1, VarNUTestTCastUW1: TClassUW1Base;
|
|
VarUTestTCastUW1Obj, VarNUTestTCastUW1Obj: TClassUW1BaseObject;
|
|
VarUTestTCastUW1Comp, VarNUTestTCastUW1Comp: TClassUW1BaseComponent;
|
|
VarTestTCastUW1, VarNTestTCastUW1: TClassTCastUW1;
|
|
VarTestTCastUW1Obj, VarNTestTCastUW1Obj: TClassTCastUW1Object;
|
|
VarTestTCastUW1Comp, VarNTestTCastUW1Comp: TClassTCastUW1Component;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_Body}
|
|
// Declared TObject
|
|
VarOTestTCast := TClassTCast.Create;
|
|
VarOTestTCastObj := TClassTCastObject.Create;
|
|
SetLength(TClassTCastObject(VarOTestTCastObj).l, 3);
|
|
TClassTCastObject(VarOTestTCastObj).l[1] := 1144;
|
|
VarOTestTCastComp := TClassTCastComponent.Create(nil);
|
|
VarOTestTCast2 := TClassTCast.Create;
|
|
VarNOTestTCast := nil;
|
|
VarNOTestTCastObj := nil;
|
|
VarNOTestTCastComp := nil;
|
|
VarNOTestTCast2 := nil;
|
|
{$IFDEF USE_W1}
|
|
VarOTestTCastUW1 := TClassTCastUW1.Create;
|
|
VarOTestTCastUW1Obj := TClassTCastUW1Object.Create;
|
|
VarOTestTCastUW1Comp := TClassTCastUW1Component.Create(nil);
|
|
VarNOTestTCastUW1 := nil;
|
|
VarNOTestTCastUW1Obj := nil;
|
|
VarNOTestTCastUW1Comp := nil;
|
|
{$ENDIF}
|
|
|
|
// declared TComponent
|
|
VarCTestTCastComp := TClassTCastComponent.Create(nil);
|
|
VarNCTestTCastComp := nil;
|
|
{$IFDEF USE_W1}
|
|
VarCTestTCastUW1Comp := TClassTCastUW1Component.Create(nil);
|
|
VarNCTestTCastUW1Comp := nil;
|
|
{$ENDIF}
|
|
|
|
// declared TClassTCast
|
|
VarBTestTCast2 := TClassTCast2.Create;
|
|
VarBNTestTCast2 := nil;
|
|
|
|
VarTestTCast := TClassTCast.Create;
|
|
VarNTestTCast := nil;
|
|
// Declared TClassTCastObject;
|
|
VarTestTCastObj := TClassTCastObject.Create;
|
|
VarNTestTCastObj := nil;
|
|
// declared TClassTCastComponent;
|
|
VarTestTCastComp := TClassTCastComponent.Create(nil);
|
|
VarNTestTCastComp := nil;
|
|
// declared TClassTCast2
|
|
VarTestTCast2 := TClassTCast2.Create;
|
|
VarNTestTCast2 := nil;
|
|
// declared TClassTCast3
|
|
VarTestTCast3 := TClassTCast3.Create;
|
|
VarNTestTCast3 := nil;
|
|
{$IFDEF USE_W1}
|
|
VarUTestTCastUW1 := TClassTCastUW1.Create;
|
|
VarNUTestTCastUW1 := nil;
|
|
VarUTestTCastUW1Obj := TClassTCastUW1Object.Create;
|
|
VarNUTestTCastUW1Obj := nil;
|
|
VarUTestTCastUW1Comp := TClassTCastUW1Component.Create(nil);
|
|
VarNUTestTCastUW1Comp := nil;
|
|
VarTestTCastUW1 := TClassTCastUW1.Create;
|
|
VarNTestTCastUW1 := nil;
|
|
VarTestTCastUW1Obj := TClassTCastUW1Object.Create;
|
|
VarNTestTCastUW1Obj := nil;
|
|
VarTestTCastUW1Comp := TClassTCastUW1Component.Create(nil);
|
|
VarNTestTCastUW1Comp := nil;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
{%endregion CLASSES TypeCast}
|
|
|
|
{%region CLASSES}
|
|
|
|
{%region TYPE}
|
|
{$IFDEF Global_Type}
|
|
TFooStatArray = Array[3..7] of boolean;
|
|
TFooDynArray = Array of boolean;
|
|
TString25 = string[25];
|
|
TFooTestRecord = record x1:boolean; x2:integer; xr: record x1:boolean; x2:integer; end; end;
|
|
|
|
TFoo = class
|
|
private
|
|
a1: TFooStatArray;
|
|
a2: TFooDynArray;
|
|
a3: Array[3..7, 2..4] of boolean;
|
|
a4: Array of Array of boolean;
|
|
a5: array [1..2] of record x1:boolean; x2:integer; xr: record x1:boolean; x2:integer; end; end;
|
|
a6: array [1..2,3..4] of record x1:boolean; x2:integer; xr: record x1:boolean; x2:integer; end; end;
|
|
a7: array of record x1:boolean; x2:integer; xr: record x1:boolean; x2:integer; end; end;
|
|
a8: array of array of record x1:boolean; x2:integer; xr: record x1:boolean; x2:integer; end; end;
|
|
r1: record x1:boolean; x2:integer; xr: record x1:boolean; x2:integer; end; end;
|
|
r2: TFooTestRecord;
|
|
s1: string[25];
|
|
s2: TString25;
|
|
|
|
function GetValueInt: Integer;
|
|
procedure SetValueInt(AValue: Integer);
|
|
public
|
|
ValueInt: Integer;
|
|
ValueFoo: TFoo;
|
|
ValueRec: TRec;
|
|
FooText: string[20];
|
|
FooString: String;
|
|
FooChar: Char;
|
|
property PropInt: Integer read ValueInt write ValueInt;
|
|
property PropIntGS: Integer read GetValueInt write SetValueInt;
|
|
end;
|
|
|
|
TFooChild = class(TFoo) end;
|
|
TFooKid = class(TFoo) end;
|
|
|
|
PFoo = ^TFoo;
|
|
PPFoo = ^PFoo;
|
|
TSamePFoo = PFoo;
|
|
TNewPFoo = {type} PFoo; // fpc crash
|
|
|
|
TSameFoo = TFoo;
|
|
TNewFoo = type TFoo;
|
|
PNewFoo = ^TNewFoo;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Implementation}
|
|
{ TFoo }
|
|
|
|
function TFoo.GetValueInt: Integer;
|
|
begin
|
|
Result := PropInt;
|
|
end;
|
|
|
|
procedure TFoo.SetValueInt(AValue: Integer);
|
|
begin
|
|
PropInt := AValue;
|
|
end;
|
|
|
|
procedure TClassTCast2.ClassTCast2Method1;
|
|
begin
|
|
// break on next line
|
|
writeln(1);
|
|
end;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalType}
|
|
//type
|
|
{$ENDIF}
|
|
{%endregion TYPE}
|
|
|
|
{%region VARIABLES}
|
|
{$IFDEF FooFunc_Param}
|
|
{ Classes }
|
|
ArgTFoo: TFoo; var VArgTFoo: TFoo;
|
|
ArgPFoo: PFoo; var VArgPFoo: PFoo;
|
|
ArgPPFoo: PPFoo; var VArgPPFoo: PPFoo;
|
|
ArgTSamePFoo: TSamePFoo; var VArgTSamePFoo: TSamePFoo;
|
|
ArgTNewPFoo: TNewPFoo; var VArgTNewPFoo: TNewPFoo;
|
|
|
|
ArgTSameFoo: TSameFoo; var VArgTSameFoo: TSameFoo;
|
|
ArgTNewFoo: TNewFoo; var VArgTNewFoo: TNewFoo;
|
|
ArgPNewFoo: PNewFoo; var VArgPNewFoo: PNewFoo;
|
|
{$ENDIF}
|
|
{$IFDEF Global_Call_FooFunc}
|
|
//FooFunc(
|
|
{ Classes }
|
|
GlobTFoo, GlobTFoo,
|
|
GlobPFoo, GlobPFoo,
|
|
GlobPPFoo, GlobPPFoo,
|
|
GlobTSamePFoo, GlobTSamePFoo,
|
|
GlobTNewPFoo, GlobTNewPFoo,
|
|
|
|
GlobTSameFoo, GlobTSameFoo,
|
|
GlobTNewFoo, GlobTNewFoo,
|
|
GlobPNewFoo, GlobPNewFoo,
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalVar}
|
|
//var
|
|
{ Classes }
|
|
VarTFoo: TFoo;
|
|
VarPFoo: PFoo;
|
|
VarPPFoo: PPFoo;
|
|
VarTSamePFoo: TSamePFoo;
|
|
VarTNewPFoo: TNewPFoo;
|
|
|
|
VarTSameFoo: TSameFoo;
|
|
VarTNewFoo: TNewFoo;
|
|
VarPNewFoo: PNewFoo;
|
|
|
|
PVarTFoo: ^TFoo;
|
|
PVarPFoo: ^PFoo;
|
|
PVarTSamePFoo: ^TSamePFoo;
|
|
PVarTSameFoo: ^TSameFoo;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Var}
|
|
//var
|
|
{ Classes }
|
|
GlobTFoo, GlobTFoo1, GlobTFoo2, GlobTFooNil: TFoo;
|
|
GlobPFoo: PFoo;
|
|
GlobPPFoo: PPFoo;
|
|
GlobTSamePFoo: TSamePFoo;
|
|
GlobTNewPFoo: TNewPFoo;
|
|
|
|
GlobTSameFoo: TSameFoo;
|
|
GlobTNewFoo: TNewFoo;
|
|
GlobPNewFoo: PNewFoo;
|
|
|
|
PGlobTFoo: ^TFoo;
|
|
PGlobPFoo: ^PFoo;
|
|
PGlobTSamePFoo: ^TSamePFoo;
|
|
PGlobTSameFoo: ^TSameFoo;
|
|
{$ENDIF}
|
|
{%endregion VARIABLES}
|
|
|
|
{%region CODE (initilization)}
|
|
{$IFDEF FooFunc_Body}
|
|
//begin
|
|
{ Classes }
|
|
VarTFoo := ArgTFoo;
|
|
VarPFoo := ArgPFoo;
|
|
VarPPFoo := ArgPPFoo;
|
|
VarTSamePFoo := ArgTSamePFoo;
|
|
VarTNewPFoo := ArgTNewPFoo;
|
|
|
|
VarTSameFoo := ArgTSameFoo;
|
|
VarTNewFoo := ArgTNewFoo;
|
|
VarPNewFoo := ArgPNewFoo;
|
|
|
|
PVarTFoo := @ArgTFoo;
|
|
PVarPFoo := @ArgPFoo;
|
|
PVarTSamePFoo := @ArgTSamePFoo;
|
|
PVarTSameFoo := @ArgTSameFoo;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body}
|
|
//begin
|
|
{ Classes }
|
|
GlobTFoo := TFoo.Create;
|
|
GlobTFoo.ValueInt := -11;
|
|
GlobTFoo.FooText := 'mem of TFoo '' "';
|
|
GlobTFoo.FooString := 'a 1 \ " '' '#9'...';
|
|
GlobTFoo.FooChar := '\';
|
|
GlobTFoo1 := TFoo.Create;
|
|
GlobTFoo1.ValueInt := 31;
|
|
GlobTFoo2 := TFoo.Create;
|
|
GlobTFoo2.ValueInt := 32;
|
|
GlobTFooNil := nil;
|
|
GlobPFoo := @GlobTFoo1;
|
|
GlobPPFoo := @GlobPFoo;
|
|
GlobTSamePFoo := @GlobTFoo2;
|
|
GlobTNewPFoo := @GlobTFoo;
|
|
|
|
GlobTSameFoo := TFoo.Create;
|
|
GlobTSameFoo.ValueInt := 41;
|
|
GlobTNewFoo := TNewFoo.Create;
|
|
GlobTNewFoo.ValueInt := 42;
|
|
GlobPNewFoo := @GlobTSameFoo;
|
|
|
|
PGlobTFoo := @GlobTFoo;
|
|
PGlobPFoo := @PGlobTFoo;
|
|
PGlobTSamePFoo := @GlobTFoo;
|
|
PGlobTSameFoo := @GlobTFoo;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body_NIL}
|
|
//begin
|
|
{ Classes }
|
|
GlobTFoo := nil;
|
|
GlobPFoo := nil;
|
|
GlobPPFoo := nil;
|
|
GlobTSamePFoo := nil;
|
|
GlobTNewPFoo := nil;
|
|
|
|
GlobTSameFoo := nil;
|
|
GlobTNewFoo := nil;
|
|
GlobPNewFoo := nil;
|
|
{$ENDIF}
|
|
|
|
{%endregion CODE (initilization)}
|
|
{%endregion CLASSES}
|
|
|
|
|
|
{* ******************** CLASSTYPES ******************** *}
|
|
|
|
{%region FooFunc}
|
|
{$IFDEF FooFunc_Param}
|
|
//procedure FooFunc(
|
|
{ ClassesTyps }
|
|
ArgTFooClass: TFooClass; var VArgTFooClass: TFooClass;
|
|
ArgPFooClass: PFooClass; var VArgPFooClass: PFooClass;
|
|
ArgPPFooClass: PPFooClass; var VArgPPFooClass: PPFooClass;
|
|
ArgTNewFooClass: TNewFooClass; var VArgTNewFooClass: TNewFooClass;
|
|
ArgPNewFooClass: PNewFooClass; var VArgPNewFooClass: PNewFooClass;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalVar}
|
|
//var
|
|
{ ClassesTyps }
|
|
VarTFooClass: TFooClass;
|
|
VarPFooClass: PFooClass;
|
|
VarPPFooClass: PPFooClass;
|
|
VarTNewFooClass: TNewFooClass;
|
|
VarPNewFooClass: PNewFooClass;
|
|
|
|
PVarTFooClass: ^TFooClass;
|
|
|
|
{ OBJECT }
|
|
VarOldObject: TOldObject;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_Body}
|
|
//begin
|
|
{ ClassesTypes }
|
|
VarTFooClass := ArgTFooClass;
|
|
VarPFooClass := ArgPFooClass;
|
|
VarPPFooClass := ArgPPFooClass;
|
|
VarTNewFooClass := ArgTNewFooClass;
|
|
VarPNewFooClass := ArgPNewFooClass;
|
|
|
|
PVarTFooClass := @ArgTFooClass;
|
|
|
|
{ OBJECT }
|
|
VarOldObject.OldVal := 1;
|
|
{$ENDIF}
|
|
{%endregion FooFunc}
|
|
|
|
|
|
{%region GLOBAL}
|
|
{$IFDEF Global_Type}
|
|
{ ClassesTypes }
|
|
TFooClass = Class of TFoo;
|
|
PFooClass = ^TFooClass;
|
|
PPFooClass = ^PFooClass;
|
|
|
|
TNewFooClass = class of TNewFoo;
|
|
PNewFooClass = ^TNewFooClass;
|
|
|
|
{ OBJECT }
|
|
TOldObject = object
|
|
OldVal: Integer;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Var}
|
|
{ ClassesTyps }
|
|
GlobTFooClass: TFooClass;
|
|
GlobPFooClass: PFooClass;
|
|
GlobPPFooClass: PPFooClass;
|
|
GlobTNewFooClass: TNewFooClass;
|
|
GlobPNewFooClass: PNewFooClass;
|
|
|
|
PGlobTFooClass: ^TFooClass;
|
|
|
|
GlobClassTCast2: TClassTCast2;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body}
|
|
//begin
|
|
{ ClassesTyps }
|
|
GlobTFooClass := TFooKid;
|
|
GlobPFooClass := @GlobTFooClass;
|
|
GlobPPFooClass := @GlobPFooClass;
|
|
GlobTNewFooClass := TNewFoo;
|
|
GlobPNewFooClass := @GlobTNewFooClass;
|
|
|
|
PGlobTFooClass := @GlobTNewFooClass;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body_Extra}
|
|
//begin
|
|
GlobClassTCast2 := TClassTCast2.Create;
|
|
GlobClassTCast2.privMember1 := 411;
|
|
GlobClassTCast2.protMember1 := 412;
|
|
GlobClassTCast2.publMember1 := 413;
|
|
GlobClassTCast2.ClassTCast2Method1;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Body_NIL}
|
|
//begin
|
|
{ ClassesTyps }
|
|
GlobTFooClass := nil;
|
|
GlobPFooClass := nil;
|
|
GlobPPFooClass := nil;
|
|
GlobTNewFooClass := nil;
|
|
GlobPNewFooClass := nil;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF Global_Call_FooFunc}
|
|
//FooFunc(
|
|
{ ClassesTyps }
|
|
GlobTFooClass, GlobTFooClass,
|
|
GlobPFooClass, GlobPFooClass,
|
|
GlobPPFooClass, GlobPPFooClass,
|
|
GlobTNewFooClass, GlobTNewFooClass,
|
|
GlobPNewFooClass, GlobPNewFooClass,
|
|
{$ENDIF}
|
|
{%endregion GLOBAL}
|
|
|
|
|
|
{%region CLASSES Auto-TypeCast }
|
|
{$IFDEF Global_Type}
|
|
//type
|
|
TAutoCastClassBase = class
|
|
public
|
|
b: Integer;
|
|
end;
|
|
TAutoCastClass = class(TAutoCastClassBase)
|
|
public
|
|
C: Integer;
|
|
N1: TAutoCastClass;
|
|
N2, VarAutoCastClassBase1: TAutoCastClassBase;
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_LocalVar}
|
|
// VarO..., VarNO... : TObject; // cast to real class
|
|
VarAutoCastClassBase1: TAutoCastClassBase;
|
|
VarAutoCastClassBaseArr: Array [1..4] of TAutoCastClassBase;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF FooFunc_Body}
|
|
VarAutoCastClassBase1 := TAutoCastClass.Create;
|
|
TAutoCastClass(VarAutoCastClassBase1).b := 2;
|
|
TAutoCastClass(VarAutoCastClassBase1).C := 3;
|
|
TAutoCastClass(VarAutoCastClassBase1).N1 := TAutoCastClass.Create;
|
|
TAutoCastClass(TAutoCastClass(VarAutoCastClassBase1).N1).b := 105;
|
|
TAutoCastClass(TAutoCastClass(VarAutoCastClassBase1).N1).c := 1;
|
|
TAutoCastClass(VarAutoCastClassBase1).N2 := TAutoCastClass.Create;
|
|
TAutoCastClass(TAutoCastClass(VarAutoCastClassBase1).N2).b := 101;
|
|
TAutoCastClass(TAutoCastClass(VarAutoCastClassBase1).N2).c := 1;
|
|
TAutoCastClass(VarAutoCastClassBase1).VarAutoCastClassBase1 := TAutoCastClass.Create;
|
|
TAutoCastClass(TAutoCastClass(VarAutoCastClassBase1).VarAutoCastClassBase1).b := 104;
|
|
TAutoCastClass(TAutoCastClass(VarAutoCastClassBase1).VarAutoCastClassBase1).c := 4;
|
|
|
|
VarAutoCastClassBaseArr[1] := TAutoCastClass.Create;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).b := 11;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).c := 111;
|
|
|
|
VarAutoCastClassBaseArr[2] := TAutoCastClass.Create;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).b := 12;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).c := 112;
|
|
|
|
VarAutoCastClassBaseArr[3] := TAutoCastClass.Create;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).b := 13;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).c := 113;
|
|
|
|
VarAutoCastClassBaseArr[4] := TAutoCastClass.Create;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).b := 14;
|
|
TAutoCastClass(VarAutoCastClassBaseArr[1]).c := 114;
|
|
|
|
|
|
{$ENDIF}
|
|
{%endregion CLASSES Auto-TypeCast}
|
|
|
|
|