Browse Source

* Fix bug #26612, parsing of descendent of specialized class

git-svn-id: trunk@30326 -
michael 10 years ago
parent
commit
72180d1010
2 changed files with 134 additions and 77 deletions
  1. 2 1
      packages/fcl-passrc/src/pparser.pp
  2. 132 76
      packages/fcl-passrc/tests/tcclasstype.pas

+ 2 - 1
packages/fcl-passrc/src/pparser.pp

@@ -988,7 +988,7 @@ function TPasParser.ParseType(Parent: TPasElement; Const TypeName : String = '';
 
 
 Const
 Const
   // These types are allowed only when full type declarations
   // These types are allowed only when full type declarations
-  FullTypeTokens = [tkGeneric,tkSpecialize,tkClass,tkInterface,tkType];
+  FullTypeTokens = [tkGeneric,{tkSpecialize,}tkClass,tkInterface,tkType];
   // Parsing of these types already takes care of hints
   // Parsing of these types already takes care of hints
   NoHintTokens = [tkProcedure,tkFunction];
   NoHintTokens = [tkProcedure,tkFunction];
 var
 var
@@ -1639,6 +1639,7 @@ begin
         Result.Overloads.Add(OldMember);
         Result.Overloads.Add(OldMember);
         Result.SourceFilename:=OldMember.SourceFilename;
         Result.SourceFilename:=OldMember.SourceFilename;
         Result.SourceLinenumber:=OldMember.SourceLinenumber;
         Result.SourceLinenumber:=OldMember.SourceLinenumber;
+        Result.DocComment:=Oldmember.DocComment;
         AList[i] := Result;
         AList[i] := Result;
         end;
         end;
       end;
       end;

+ 132 - 76
packages/fcl-passrc/tests/tcclasstype.pas

@@ -19,6 +19,7 @@ type
     FParent : String;
     FParent : String;
     FEnded,
     FEnded,
     FStarted: Boolean;
     FStarted: Boolean;
+    procedure AssertSpecializedClass(C: TPasClassType);
     function GetC(AIndex: Integer): TPasConst;
     function GetC(AIndex: Integer): TPasConst;
     function GetF1: TPasVariable;
     function GetF1: TPasVariable;
     function GetM(AIndex : Integer): TPasElement;
     function GetM(AIndex : Integer): TPasElement;
@@ -36,6 +37,7 @@ type
     Procedure EndClass(AEnd : String = 'end');
     Procedure EndClass(AEnd : String = 'end');
     Procedure AddMember(S : String);
     Procedure AddMember(S : String);
     Procedure ParseClass;
     Procedure ParseClass;
+    Procedure DoParseClass(FromSpecial : Boolean = False);
     procedure SetUp; override;
     procedure SetUp; override;
     procedure TearDown; override;
     procedure TearDown; override;
     procedure DefaultMethod;
     procedure DefaultMethod;
@@ -66,6 +68,8 @@ type
     procedure TestEmptyEndNoParent;
     procedure TestEmptyEndNoParent;
     Procedure TestOneInterface;
     Procedure TestOneInterface;
     Procedure TestTwoInterfaces;
     Procedure TestTwoInterfaces;
+    procedure TestOneSpecializedClass;
+    procedure TestOneSpecializedClassInterface;
     Procedure TestOneField;
     Procedure TestOneField;
     Procedure TestOneFieldComment;
     Procedure TestOneFieldComment;
     Procedure TestOneVarField;
     Procedure TestOneVarField;
@@ -219,7 +223,7 @@ begin
   Result:=TPasConst(Members[AIndex]);
   Result:=TPasConst(Members[AIndex]);
 end;
 end;
 
 
-Procedure TTestClassType.StartClass(AParent: String; InterfaceList: String);
+procedure TTestClassType.StartClass(AParent: String; InterfaceList: String);
 
 
 Var
 Var
   S : String;
   S : String;
@@ -237,7 +241,7 @@ begin
   FParent:=AParent;
   FParent:=AParent;
 end;
 end;
 
 
-Procedure TTestClassType.StartClassHelper(ForType: String; AParent: String);
+procedure TTestClassType.StartClassHelper(ForType: String; AParent: String);
 Var
 Var
   S : String;
   S : String;
 begin
 begin
@@ -253,7 +257,7 @@ begin
   FParent:=AParent;
   FParent:=AParent;
 end;
 end;
 
 
-Procedure TTestClassType.StartInterface(AParent: String; UUID: String);
+procedure TTestClassType.StartInterface(AParent: String; UUID: String);
 Var
 Var
   S : String;
   S : String;
 begin
 begin
@@ -267,7 +271,7 @@ begin
   FParent:=AParent;
   FParent:=AParent;
 end;
 end;
 
 
-Procedure TTestClassType.StartRecordHelper(ForType: String; AParent: String);
+procedure TTestClassType.StartRecordHelper(ForType: String; AParent: String);
 Var
 Var
   S : String;
   S : String;
 begin
 begin
@@ -283,14 +287,14 @@ begin
   FParent:=AParent;
   FParent:=AParent;
 end;
 end;
 
 
-Procedure TTestClassType.StartVisibility(A: TPasMemberVisibility);
+procedure TTestClassType.StartVisibility(A: TPasMemberVisibility);
 begin
 begin
   if not FStarted then
   if not FStarted then
     StartClass;
     StartClass;
   FDecl.Add('  '+VisibilityNames[A]);
   FDecl.Add('  '+VisibilityNames[A]);
 end;
 end;
 
 
-Procedure TTestClassType.EndClass(AEnd: String);
+procedure TTestClassType.EndClass(AEnd: String);
 begin
 begin
   if FEnded then exit;
   if FEnded then exit;
   if not FStarted then
   if not FStarted then
@@ -300,14 +304,20 @@ begin
     FDecl.Add('  '+AEnd);
     FDecl.Add('  '+AEnd);
 end;
 end;
 
 
-Procedure TTestClassType.AddMember(S: String);
+procedure TTestClassType.AddMember(S: String);
 begin
 begin
   if Not FStarted then
   if Not FStarted then
     StartClass;
     StartClass;
   FDecl.Add('    '+S+';');
   FDecl.Add('    '+S+';');
 end;
 end;
 
 
-Procedure TTestClassType.ParseClass;
+procedure TTestClassType.ParseClass;
+
+begin
+  DoParseClass(False);
+end;
+
+procedure TTestClassType.DoParseClass(FromSpecial: Boolean);
 begin
 begin
   EndClass;
   EndClass;
   Add('Type');
   Add('Type');
@@ -325,8 +335,15 @@ begin
   if (FParent<>'') then
   if (FParent<>'') then
      begin
      begin
      AssertNotNull('Have parent class',TheClass.AncestorType);
      AssertNotNull('Have parent class',TheClass.AncestorType);
-     AssertEquals('Parent class',TPasUnresolvedTypeRef,TheClass.AncestorType.ClassType);
-     AssertEquals('Parent class name',FParent,TPasUnresolvedTypeRef(TheClass.AncestorType).Name);
+     if FromSpecial then
+       begin
+       AssertEquals('Parent class',TPasClassType,TheClass.AncestorType.ClassType);
+       end
+     else
+       begin
+       AssertEquals('Parent class',TPasUnresolvedTypeRef,TheClass.AncestorType.ClassType);
+       AssertEquals('Parent class name',FParent,TPasUnresolvedTypeRef(TheClass.AncestorType).Name);
+       end;
      end;
      end;
   if (TheClass.ObjKind<>okInterface) then
   if (TheClass.ObjKind<>okInterface) then
     AssertNull('No interface, No GUID',TheClass.GUIDExpr);
     AssertNull('No interface, No GUID',TheClass.GUIDExpr);
@@ -353,7 +370,7 @@ begin
   inherited TearDown;
   inherited TearDown;
 end;
 end;
 
 
-Procedure TTestClassType.AssertVisibility(V: TPasMemberVisibility;
+procedure TTestClassType.AssertVisibility(V: TPasMemberVisibility;
   Member: TPasElement);
   Member: TPasElement);
 begin
 begin
   If Member=Nil then
   If Member=Nil then
@@ -376,7 +393,7 @@ begin
   AssertEquals('Member name ',AName,Member.Name)
   AssertEquals('Member name ',AName,Member.Name)
 end;
 end;
 
 
-Procedure TTestClassType.AssertProperty(P: TPasProperty;
+procedure TTestClassType.AssertProperty(P: TPasProperty;
   AVisibility: TPasMemberVisibility; AName, ARead, AWrite, AStored,
   AVisibility: TPasMemberVisibility; AName, ARead, AWrite, AStored,
   AImplements: String; AArgCount: Integer; ADefault, ANodefault: Boolean);
   AImplements: String; AArgCount: Integer; ADefault, ANodefault: Boolean);
 begin
 begin
@@ -425,7 +442,7 @@ begin
   AssertEquals('No members',0,TheClass.Members.Count);
   AssertEquals('No members',0,TheClass.Members.Count);
 end;
 end;
 
 
-Procedure TTestClassType.TestOneInterface;
+procedure TTestClassType.TestOneInterface;
 begin
 begin
   StartClass('TObject','ISomething');
   StartClass('TObject','ISomething');
   ParseClass;
   ParseClass;
@@ -435,7 +452,7 @@ begin
   AssertEquals('Interface name','ISomething',TPasUnresolvedTypeRef(TheClass.Interfaces[0]).Name);
   AssertEquals('Interface name','ISomething',TPasUnresolvedTypeRef(TheClass.Interfaces[0]).Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestTwoInterfaces;
+procedure TTestClassType.TestTwoInterfaces;
 begin
 begin
   StartClass('TObject','ISomething, ISomethingElse');
   StartClass('TObject','ISomething, ISomethingElse');
   ParseClass;
   ParseClass;
@@ -448,7 +465,46 @@ begin
   AssertEquals('Interface name','ISomethingElse',TPasUnresolvedTypeRef(TheClass.Interfaces[1]).Name);
   AssertEquals('Interface name','ISomethingElse',TPasUnresolvedTypeRef(TheClass.Interfaces[1]).Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestOneField;
+procedure TTestClassType.AssertSpecializedClass(C : TPasClassType);
+
+begin
+  AssertEquals('Parent class name is empty','',C.Name);
+  AssertNotNull('Have ancestor type',C.AncestorType);
+  AssertEquals('Have ancestor type name','TMyList',C.AncestorType.Name);
+  AssertNotNull('Have generic template types',C.GenericTemplateTypes);
+  AssertEquals('Have generic template types',1,C.GenericTemplateTypes.Count);
+  AssertEquals('Class name ',TPasGenericTemplateType,TObject(C.GenericTemplateTypes[0]).ClassType);
+  AssertEquals('Have generic template types','Integer',TPasElement(C.GenericTemplateTypes[0]).Name);
+end;
+
+procedure TTestClassType.TestOneSpecializedClass;
+
+Var
+  C : TPasClassType;
+
+begin
+  StartClass('Specialize TMyList<Integer>','');
+  DoParseClass(True);
+  C:=TPasClassType(TheClass.AncestorType);
+  AssertSpecializedClass(C);
+end;
+
+procedure TTestClassType.TestOneSpecializedClassInterface;
+Var
+  C : TPasClassType;
+
+begin
+  StartClass('Specialize TMyList<Integer>','ISomething');
+  DoParseClass(True);
+  C:=TPasClassType(TheClass.AncestorType);
+  AssertSpecializedClass(C);
+  AssertEquals('Have 1 interface',1,TheClass.Interfaces.Count);
+  AssertNotNull('Correct class',TheClass.Interfaces[0]);
+  AssertEquals('Correct class',TPasUnresolvedTypeRef,TObject(TheClass.Interfaces[0]).ClassType);
+  AssertEquals('Interface name','ISomething',TPasUnresolvedTypeRef(TheClass.Interfaces[0]).Name);
+end;
+
+procedure TTestClassType.TestOneField;
 begin
 begin
   AddMember('a : integer');
   AddMember('a : integer');
   ParseClass;
   ParseClass;
@@ -457,7 +513,7 @@ begin
   AssertVisibility;
   AssertVisibility;
 end;
 end;
 
 
-Procedure TTestClassType.TestOneFieldComment;
+procedure TTestClassType.TestOneFieldComment;
 begin
 begin
   AddComment:=true;
   AddComment:=true;
   AddMember('{c}a : integer');
   AddMember('{c}a : integer');
@@ -467,7 +523,7 @@ begin
   AssertVisibility;
   AssertVisibility;
 end;
 end;
 
 
-Procedure TTestClassType.TestOneVarField;
+procedure TTestClassType.TestOneVarField;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   FDecl.Add('var');
   FDecl.Add('var');
@@ -478,7 +534,7 @@ begin
   AssertVisibility(visPublished);
   AssertVisibility(visPublished);
 end;
 end;
 
 
-Procedure TTestClassType.TestOneClassField;
+procedure TTestClassType.TestOneClassField;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   FDecl.Add('class var');
   FDecl.Add('class var');
@@ -491,7 +547,7 @@ begin
      Fail('Field is not a class field');
      Fail('Field is not a class field');
 end;
 end;
 
 
-Procedure TTestClassType.TestOneFieldVisibility;
+procedure TTestClassType.TestOneFieldVisibility;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('a : integer');
   AddMember('a : integer');
@@ -501,7 +557,7 @@ begin
   AssertVisibility(visPublished);
   AssertVisibility(visPublished);
 end;
 end;
 
 
-Procedure TTestClassType.TestOneFieldDeprecated;
+procedure TTestClassType.TestOneFieldDeprecated;
 begin
 begin
   AddMember('a : integer deprecated');
   AddMember('a : integer deprecated');
   ParseClass;
   ParseClass;
@@ -511,7 +567,7 @@ begin
   AssertVisibility;
   AssertVisibility;
 end;
 end;
 
 
-Procedure TTestClassType.TestTwoFields;
+procedure TTestClassType.TestTwoFields;
 begin
 begin
   AddMember('a : integer');
   AddMember('a : integer');
   AddMember('b : integer');
   AddMember('b : integer');
@@ -526,7 +582,7 @@ begin
   AssertVisibility(visDefault,Members[1]);
   AssertVisibility(visDefault,Members[1]);
 end;
 end;
 
 
-Procedure TTestClassType.TestTwoFieldsB;
+procedure TTestClassType.TestTwoFieldsB;
 begin
 begin
   AddMember('a,b : integer');
   AddMember('a,b : integer');
   ParseClass;
   ParseClass;
@@ -540,7 +596,7 @@ begin
   AssertVisibility(visDefault,Members[1]);
   AssertVisibility(visDefault,Members[1]);
 end;
 end;
 
 
-Procedure TTestClassType.TestTwoVarFieldsB;
+procedure TTestClassType.TestTwoVarFieldsB;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   FDecl.Add('var');
   FDecl.Add('var');
@@ -556,7 +612,7 @@ begin
   AssertVisibility(visPublic,Members[1]);
   AssertVisibility(visPublic,Members[1]);
 end;
 end;
 
 
-Procedure TTestClassType.TestTwoFieldsVisibility;
+procedure TTestClassType.TestTwoFieldsVisibility;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   AddMember('a,b : integer');
   AddMember('a,b : integer');
@@ -571,7 +627,7 @@ begin
   AssertVisibility(visPublic,Members[1]);
   AssertVisibility(visPublic,Members[1]);
 end;
 end;
 
 
-Procedure TTestClassType.TestConstProtectedEnd;
+procedure TTestClassType.TestConstProtectedEnd;
 begin
 begin
   // After bug report 25720
   // After bug report 25720
    StartVisibility(visPrivate);
    StartVisibility(visPrivate);
@@ -585,7 +641,7 @@ begin
    ParseClass;
    ParseClass;
 end;
 end;
 
 
-Procedure TTestClassType.TestTypeProtectedEnd;
+procedure TTestClassType.TestTypeProtectedEnd;
 begin
 begin
   // After bug report 25720
   // After bug report 25720
    StartVisibility(visPrivate);
    StartVisibility(visPrivate);
@@ -599,7 +655,7 @@ begin
    ParseClass;
    ParseClass;
 end;
 end;
 
 
-Procedure TTestClassType.TestVarProtectedEnd;
+procedure TTestClassType.TestVarProtectedEnd;
 begin
 begin
   // After bug report 25720
   // After bug report 25720
    StartVisibility(visPrivate);
    StartVisibility(visPrivate);
@@ -655,7 +711,7 @@ begin
   AssertMemberName('unimplemented');
   AssertMemberName('unimplemented');
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodSimple;
+procedure TTestClassType.TestMethodSimple;
 begin
 begin
   AddMember('Procedure DoSomething');
   AddMember('Procedure DoSomething');
   ParseClass;
   ParseClass;
@@ -669,7 +725,7 @@ begin
   AssertEquals('No arguments',0,Method1.ProcType.Args.Count)
   AssertEquals('No arguments',0,Method1.ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodSimpleComment;
+procedure TTestClassType.TestMethodSimpleComment;
 begin
 begin
   AddComment:=True;
   AddComment:=True;
   AddMember('{c} Procedure DoSomething');
   AddMember('{c} Procedure DoSomething');
@@ -681,7 +737,7 @@ begin
   AssertEquals('Comment','c'+sLineBreak,Method1.DocComment);
   AssertEquals('Comment','c'+sLineBreak,Method1.DocComment);
 end;
 end;
 
 
-Procedure TTestClassType.TestClassMethodSimple;
+procedure TTestClassType.TestClassMethodSimple;
 begin
 begin
   AddMember('Class Procedure DoSomething');
   AddMember('Class Procedure DoSomething');
   ParseClass;
   ParseClass;
@@ -695,7 +751,7 @@ begin
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestClassMethodSimpleComment;
+procedure TTestClassType.TestClassMethodSimpleComment;
 begin
 begin
   AddComment:=True;
   AddComment:=True;
   AddMember('{c} Class Procedure DoSomething');
   AddMember('{c} Class Procedure DoSomething');
@@ -703,7 +759,7 @@ begin
   AssertEquals('Comment','c'+sLineBreak,Members[0].DocComment);
   AssertEquals('Comment','c'+sLineBreak,Members[0].DocComment);
 end;
 end;
 
 
-Procedure TTestClassType.TestConstructor;
+procedure TTestClassType.TestConstructor;
 begin
 begin
   AddMember('Constructor Create');
   AddMember('Constructor Create');
   ParseClass;
   ParseClass;
@@ -717,7 +773,7 @@ begin
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestClassConstructor;
+procedure TTestClassType.TestClassConstructor;
 begin
 begin
   AddMember('Class Constructor Create');
   AddMember('Class Constructor Create');
   ParseClass;
   ParseClass;
@@ -731,7 +787,7 @@ begin
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestDestructor;
+procedure TTestClassType.TestDestructor;
 begin
 begin
   AddMember('Destructor Destroy');
   AddMember('Destructor Destroy');
   ParseClass;
   ParseClass;
@@ -745,7 +801,7 @@ begin
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestClassDestructor;
+procedure TTestClassType.TestClassDestructor;
 begin
 begin
   AddMember('Class Destructor Destroy');
   AddMember('Class Destructor Destroy');
   ParseClass;
   ParseClass;
@@ -759,7 +815,7 @@ begin
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
   AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestFunctionMethodSimple;
+procedure TTestClassType.TestFunctionMethodSimple;
 begin
 begin
   AddMember('Function DoSomething : integer');
   AddMember('Function DoSomething : integer');
   ParseClass;
   ParseClass;
@@ -773,7 +829,7 @@ begin
   AssertEquals('No arguments',0,functionMethod1.ProcType.Args.Count)
   AssertEquals('No arguments',0,functionMethod1.ProcType.Args.Count)
 end;
 end;
 
 
-Procedure TTestClassType.TestClassFunctionMethodSimple;
+procedure TTestClassType.TestClassFunctionMethodSimple;
 begin
 begin
   AddMember('Class Function DoSomething : integer');
   AddMember('Class Function DoSomething : integer');
   ParseClass;
   ParseClass;
@@ -799,12 +855,12 @@ begin
   AssertEquals('Argument name','A',TPasVariable(Method1.ProcType.Args[0]).Name);
   AssertEquals('Argument name','A',TPasVariable(Method1.ProcType.Args[0]).Name);
 end;
 end;
 
 
-Procedure TTestClassType.AssertParserError(Const Msg: String);
+procedure TTestClassType.AssertParserError(const Msg: String);
 begin
 begin
   AssertException(Msg,EParserError,@ParseClass)
   AssertException(Msg,EParserError,@ParseClass)
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodOneArg;
+procedure TTestClassType.TestMethodOneArg;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer)');
   AddMember('Procedure DoSomething(A : Integer)');
   ParseClass;
   ParseClass;
@@ -814,7 +870,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodVirtual;
+procedure TTestClassType.TestMethodVirtual;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) virtual');
   AddMember('Procedure DoSomething(A : Integer) virtual');
   ParseClass;
   ParseClass;
@@ -824,7 +880,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodVirtualSemicolon;
+procedure TTestClassType.TestMethodVirtualSemicolon;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer); virtual');
   AddMember('Procedure DoSomething(A : Integer); virtual');
   ParseClass;
   ParseClass;
@@ -834,7 +890,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodVirtualAbstract;
+procedure TTestClassType.TestMethodVirtualAbstract;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) virtual abstract');
   AddMember('Procedure DoSomething(A : Integer) virtual abstract');
   ParseClass;
   ParseClass;
@@ -845,7 +901,7 @@ begin
 end;
 end;
 
 
 
 
-Procedure TTestClassType.TestMethodOverride;
+procedure TTestClassType.TestMethodOverride;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) override');
   AddMember('Procedure DoSomething(A : Integer) override');
   ParseClass;
   ParseClass;
@@ -885,7 +941,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodVisibility;
+procedure TTestClassType.TestMethodVisibility;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   AddMember('Procedure DoSomething(A : Integer)');
   AddMember('Procedure DoSomething(A : Integer)');
@@ -896,7 +952,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodSVisibility;
+procedure TTestClassType.TestMethodSVisibility;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer)');
   AddMember('Procedure DoSomething(A : Integer)');
   StartVisibility(visPublic);
   StartVisibility(visPublic);
@@ -914,7 +970,7 @@ begin
   AssertEquals('Argument name','A',TPasVariable(Method2.ProcType.Args[0]).Name);
   AssertEquals('Argument name','A',TPasVariable(Method2.ProcType.Args[0]).Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodOverloadVisibility;
+procedure TTestClassType.TestMethodOverloadVisibility;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer)');
   AddMember('Procedure DoSomething(A : Integer)');
   StartVisibility(visPublic);
   StartVisibility(visPublic);
@@ -925,7 +981,7 @@ begin
   AssertEquals('Default visibility',visDefault,Member1.Visibility);
   AssertEquals('Default visibility',visDefault,Member1.Visibility);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodHint;
+procedure TTestClassType.TestMethodHint;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) deprecated');
   AddMember('Procedure DoSomething(A : Integer) deprecated');
   ParseClass;
   ParseClass;
@@ -937,7 +993,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestMethodVirtualHint;
+procedure TTestClassType.TestMethodVirtualHint;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) virtual; deprecated');
   AddMember('Procedure DoSomething(A : Integer) virtual; deprecated');
   ParseClass;
   ParseClass;
@@ -949,7 +1005,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.TestIntegerMessageMethod;
+procedure TTestClassType.TestIntegerMessageMethod;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) message 123');
   AddMember('Procedure DoSomething(A : Integer) message 123');
   ParseClass;
   ParseClass;
@@ -960,7 +1016,7 @@ begin
   AssertEquals('Message name','123',Method1.MessageName);
   AssertEquals('Message name','123',Method1.MessageName);
 end;
 end;
 
 
-Procedure TTestClassType.TestStringMessageMethod;
+procedure TTestClassType.TestStringMessageMethod;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) message ''aha''');
   AddMember('Procedure DoSomething(A : Integer) message ''aha''');
   ParseClass;
   ParseClass;
@@ -971,7 +1027,7 @@ begin
   AssertEquals('Message name','''aha''',Method1.MessageName);
   AssertEquals('Message name','''aha''',Method1.MessageName);
 end;
 end;
 
 
-Procedure TTestClassType.Test2Methods;
+procedure TTestClassType.Test2Methods;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) virtual');
   AddMember('Procedure DoSomething(A : Integer) virtual');
   AddMember('Procedure DoSomethingElse');
   AddMember('Procedure DoSomethingElse');
@@ -986,7 +1042,7 @@ begin
   AssertEquals('Default calling convention',ccDefault, TPasProcedure(Members[1]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasProcedure(Members[1]).ProcType.CallingConvention);
 end;
 end;
 
 
-Procedure TTestClassType.Test2MethodsDifferentVisibility;
+procedure TTestClassType.Test2MethodsDifferentVisibility;
 begin
 begin
   AddMember('Procedure DoSomething(A : Integer) virtual');
   AddMember('Procedure DoSomething(A : Integer) virtual');
   StartVisibility(visPublic);
   StartVisibility(visPublic);
@@ -1003,7 +1059,7 @@ begin
 
 
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyRedeclare;
+procedure TTestClassType.TestPropertyRedeclare;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something');
   AddMember('Property Something');
@@ -1016,7 +1072,7 @@ begin
   Assertequals('No default value','',Property1.DefaultValue);
   Assertequals('No default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyRedeclareComment;
+procedure TTestClassType.TestPropertyRedeclareComment;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddComment:=True;
   AddComment:=True;
@@ -1026,7 +1082,7 @@ begin
   AssertEquals('comment','p'+sLineBreak,Property1.DocComment);
   AssertEquals('comment','p'+sLineBreak,Property1.DocComment);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyRedeclareDefault;
+procedure TTestClassType.TestPropertyRedeclareDefault;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   AddMember('Property Something; default;');
   AddMember('Property Something; default;');
@@ -1041,7 +1097,7 @@ begin
   AssertEquals('Is default property',True, Property1.IsDefault);
   AssertEquals('Is default property',True, Property1.IsDefault);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyReadOnly;
+procedure TTestClassType.TestPropertyReadOnly;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Read FSomething');
   AddMember('Property Something : integer Read FSomething');
@@ -1056,7 +1112,7 @@ begin
   Assertequals('No default value','',Property1.DefaultValue);
   Assertequals('No default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyReadWrite;
+procedure TTestClassType.TestPropertyReadWrite;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Read FSomething Write FSomething');
   AddMember('Property Something : integer Read FSomething Write FSomething');
@@ -1071,7 +1127,7 @@ begin
   Assertequals('No default value','',Property1.DefaultValue);
   Assertequals('No default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyWriteOnly;
+procedure TTestClassType.TestPropertyWriteOnly;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Write FSomething');
   AddMember('Property Something : integer Write FSomething');
@@ -1086,7 +1142,7 @@ begin
   Assertequals('No default value','',Property1.DefaultValue);
   Assertequals('No default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyDefault;
+procedure TTestClassType.TestPropertyDefault;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Read FSomething Write FSomething default 1');
   AddMember('Property Something : integer Read FSomething Write FSomething default 1');
@@ -1101,7 +1157,7 @@ begin
   Assertequals('Default value','1',Property1.DefaultValue);
   Assertequals('Default value','1',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyNoDefault;
+procedure TTestClassType.TestPropertyNoDefault;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Read FSomething Write FSomething nodefault');
   AddMember('Property Something : integer Read FSomething Write FSomething nodefault');
@@ -1116,7 +1172,7 @@ begin
   Assertequals('No Default value','',Property1.DefaultValue);
   Assertequals('No Default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyIndex;
+procedure TTestClassType.TestPropertyIndex;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Index 2 Read GetF Write SetF');
   AddMember('Property Something : integer Index 2 Read GetF Write SetF');
@@ -1131,7 +1187,7 @@ begin
   Assertequals('No Default value','',Property1.DefaultValue);
   Assertequals('No Default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyStored;
+procedure TTestClassType.TestPropertyStored;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Read GetF Write SetF Stored CheckStored');
   AddMember('Property Something : integer Read GetF Write SetF Stored CheckStored');
@@ -1146,7 +1202,7 @@ begin
   Assertequals('No Default value','',Property1.DefaultValue);
   Assertequals('No Default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyStoredFalse;
+procedure TTestClassType.TestPropertyStoredFalse;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : integer Read GetF Write SetF Stored False');
   AddMember('Property Something : integer Read GetF Write SetF Stored False');
@@ -1161,7 +1217,7 @@ begin
   Assertequals('No Default value','',Property1.DefaultValue);
   Assertequals('No Default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyFullyQualifiedType;
+procedure TTestClassType.TestPropertyFullyQualifiedType;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : unita.typeb Read FSomething');
   AddMember('Property Something : unita.typeb Read FSomething');
@@ -1176,7 +1232,7 @@ begin
   Assertequals('No default value','',Property1.DefaultValue);
   Assertequals('No default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyArrayReadOnly;
+procedure TTestClassType.TestPropertyArrayReadOnly;
 Var
 Var
   A : TPasArgument;
   A : TPasArgument;
 begin
 begin
@@ -1200,7 +1256,7 @@ begin
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyArrayReadWrite;
+procedure TTestClassType.TestPropertyArrayReadWrite;
 Var
 Var
   A : TPasArgument;
   A : TPasArgument;
 begin
 begin
@@ -1224,7 +1280,7 @@ begin
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyArrayReadOnlyDefault;
+procedure TTestClassType.TestPropertyArrayReadOnlyDefault;
 
 
 Var
 Var
   A : TPasArgument;
   A : TPasArgument;
@@ -1249,7 +1305,7 @@ begin
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyArrayReadWriteDefault;
+procedure TTestClassType.TestPropertyArrayReadWriteDefault;
 Var
 Var
   A : TPasArgument;
   A : TPasArgument;
 begin
 begin
@@ -1273,7 +1329,7 @@ begin
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
   AssertEquals('Argument class type name','Integer',A.ArgType.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyArrayMultiDimReadOnly;
+procedure TTestClassType.TestPropertyArrayMultiDimReadOnly;
 Var
 Var
   A : TPasArgument;
   A : TPasArgument;
 begin
 begin
@@ -1305,7 +1361,7 @@ begin
   AssertEquals('Argument 2 class type name','Integer',A.ArgType.Name);
   AssertEquals('Argument 2 class type name','Integer',A.ArgType.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyImplements;
+procedure TTestClassType.TestPropertyImplements;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : AInterface Read FSomething Implements ISomeInterface');
   AddMember('Property Something : AInterface Read FSomething Implements ISomeInterface');
@@ -1321,7 +1377,7 @@ begin
 
 
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyImplementsFullyQualifiedName;
+procedure TTestClassType.TestPropertyImplementsFullyQualifiedName;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : AInterface Read FSomething Implements UnitB.ISomeInterface');
   AddMember('Property Something : AInterface Read FSomething Implements UnitB.ISomeInterface');
@@ -1336,7 +1392,7 @@ begin
   Assertequals('Default value','',Property1.DefaultValue);
   Assertequals('Default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestPropertyReadFromRecordField;
+procedure TTestClassType.TestPropertyReadFromRecordField;
 begin
 begin
   StartVisibility(visPublished);
   StartVisibility(visPublished);
   AddMember('Property Something : Integer Read FPoint.X');
   AddMember('Property Something : Integer Read FPoint.X');
@@ -1366,7 +1422,7 @@ begin
   Assertequals('Default value','',Property1.DefaultValue);
   Assertequals('Default value','',Property1.DefaultValue);
 end;
 end;
 
 
-Procedure TTestClassType.TestLocalSimpleType;
+procedure TTestClassType.TestLocalSimpleType;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   FDecl.add('Type');
   FDecl.add('Type');
@@ -1381,7 +1437,7 @@ begin
   AssertEquals('method name','Something', Method2.Name);
   AssertEquals('method name','Something', Method2.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestLocalSimpleTypes;
+procedure TTestClassType.TestLocalSimpleTypes;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   FDecl.add('Type');
   FDecl.add('Type');
@@ -1401,7 +1457,7 @@ begin
   AssertEquals('method name','Something', Method3.Name);
   AssertEquals('method name','Something', Method3.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestLocalSimpleConst;
+procedure TTestClassType.TestLocalSimpleConst;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   FDecl.add('Const');
   FDecl.add('Const');
@@ -1417,7 +1473,7 @@ begin
   AssertEquals('method name','Something', Method2.Name);
   AssertEquals('method name','Something', Method2.Name);
 end;
 end;
 
 
-Procedure TTestClassType.TestLocalSimpleConsts;
+procedure TTestClassType.TestLocalSimpleConsts;
 begin
 begin
   StartVisibility(visPublic);
   StartVisibility(visPublic);
   FDecl.add('Const');
   FDecl.add('Const');