[patch] Jedi code format improvement. Added support for Threadvar in classes and records.
Original Reporter info from Mantis: DomingoGP @DomingoGP
-
Reporter name: Domingo Galmés
Original Reporter info from Mantis: DomingoGP @DomingoGP
- Reporter name: Domingo Galmés
Description:
This patch adds support for threadvars in classes and records.
I have encountered a problem formatting the whole document, JCF insert blank lines in random position when tries to synchonize the editor text with the already formatted text. The old code tries to keep the original lines that have not changed, but it is enough for JCF to insert or delete a blank line for the synchronization not to work. I have changed the code and now it replaces all the code in the editor.
I have also included another patch with a quick and dirty application to test the changes and debug JCF in case you consider it interesting to include it to facilitate future changes. It is easier to debug the changes with the application than with the IDE component. The app needs the other patch for compile.
Ps. sorry for my bad english.
Steps to reproduce:
// sample unit for testing.
{ %norun }
unit terecs_u1;
{$mode delphi}
interface
type
HWND = integer;
TFoo = record
hWnd : HWND;
reg: record
AnonimousRecord:string;
Age:integer;
end;
private
F1: Integer;
F2: Byte;
public
type
TBar = Integer;
Name=boolean;
TYY = record
Name:string;
Age:integer;
type
TN2=class
Name:string;
protected
Age:integer;
end;
end;
TYZ = record
Name:string;
Age:integer;
private
class threadvar
hola:integer;
dos:boolean;
tres:integer;
class var
lola:integer;
tres:integer;
cuatro:integer;
const
aa:integer=2;
procedure Uno;
function Dos:integer;
end;
const
C: TBar = 1;
var
F3: TBar;
F4: Byte;
class var
F5: TBar;
function Test(n: TBar): TBar;
class function Test1(n: TBar): TBar; static;
procedure Set3(const Value: TBar);
class procedure Set5(const Value: TBar); static;
property P3: TBar read F3 write Set3;
class property P5: TBar read F5 write Set5;
class constructor Create;
class destructor Destroy;
procedure Test2;
procedure Test3;
end;
procedure Test4(AFoo: TFoo);
implementation
type
TMaritalState = (unmarried, married, widowed, divorced);
TPerson = record
// CONSTANT PART
// of course records may be nested
name: record
first, middle, last: string;
end;
sex: (male, female);
// date of birth
dob: TDateTime;
// VARIABLE PART
case maritalState: TMaritalState of
unmarried: ( );
married, widowed: (marriageDate: TDateTime);
divorced: (marriageDateDivorced, divorceDate: TDateTime;
isFirstDivorce: boolean)
end;
function TFoo.Test(n: TBar): TBar;
begin
Result := F3 + F4 + n;
end;
class function TFoo.Test1(n: TBar): TBar;
begin
Result := C + n;
end;
class constructor TFoo.Create;
begin
F5 := 6;
end;
class destructor TFoo.Destroy;
begin
WriteLn('TFoo.Destroy');
end;
procedure TFoo.Set3(const Value: TBar);
begin
F3 := Value;
end;
class procedure TFoo.Set5(const Value: TBar); static;
begin
F5 := Value;
end;
procedure TFoo.Test2;
begin
if Self.C <> 1 then
halt(50);
if Self.F3 <> 7 then
halt(51);
end;
procedure TFoo.Test3;
begin
Test4(Self);
end;
procedure Test4(AFoo: TFoo);
begin
if AFoo.C <> 1 then
halt(100);
if AFoo.P3 <> 7 then
halt(101);
end;
end.