Browse Source

fcl-passrc: parser: fixed default class visibility to visPublic

git-svn-id: trunk@37465 -
Mattias Gaertner 7 years ago
parent
commit
3a0e540dde

+ 8 - 0
packages/fcl-passrc/src/pasresolver.pp

@@ -153,12 +153,20 @@ Works:
   - a:=value
   - a:=value
   - arr[index]
   - arr[index]
 - resourcestrings
 - resourcestrings
+- custom ranges
+  - enum: low(), high(), pred(), succ()
 
 
 ToDo:
 ToDo:
+- custom ranges
+  - enum: ord(), rg(int), int(rg), enum:=rg, rg:=enum, rg:=rg,
+     rgbig:=rgsmall, rgsmall:=rgbig
+     enum=rg, rg=enum, rg=rg, rg1=rg2
+     array[rg], low(array), high(array)
 - range checking:
 - range checking:
   - indexedprop[param]
   - indexedprop[param]
   - case-of unique
   - case-of unique
   - defaultvalue
   - defaultvalue
+- $writableconst off $J-
 - fail to write a loop var inside the loop
 - fail to write a loop var inside the loop
 - warn: create class with abstract methods
 - warn: create class with abstract methods
 - classes - TPasClassType
 - classes - TPasClassType

+ 1 - 6
packages/fcl-passrc/src/pastree.pp

@@ -3506,12 +3506,7 @@ begin
     end
     end
   else
   else
     begin
     begin
-    if (EnumType.Name<>'') then
-      Result:='Set of '+EnumType.Name
-    else if (enumtype is TPasRangeType) then
-      Result:='Set of '+TPasRangeType(enumtype).RangeStart+'..'+TPasRangeType(enumtype).RangeEnd
-    else
-      Raise EParserError.Create('Unknown pastree enum element = '+EnumType.ClassName);
+    Result:='Set of '+EnumType.Name;
     If Full then
     If Full then
       Result:=Name+' = '+Result;
       Result:=Name+' = '+Result;
     end;
     end;

+ 4 - 40
packages/fcl-passrc/src/paswrite.pp

@@ -83,11 +83,7 @@ type
     constructor Create(AStream: TStream); virtual;
     constructor Create(AStream: TStream); virtual;
     destructor Destroy; override;
     destructor Destroy; override;
     procedure AddForwardClasses(aSection: TPasSection); virtual;
     procedure AddForwardClasses(aSection: TPasSection); virtual;
-    procedure WriteRangeType(AType: TPasRangeType); virtual;
     procedure WriteEnumType(AType: TPasEnumType); virtual;
     procedure WriteEnumType(AType: TPasEnumType); virtual;
-    procedure WriteFileType(AType: TPasFileType); virtual;
-    procedure WriteSetType(AType: TPasSetType); virtual;
-    procedure WritePointerType(AType: TPasPointerType); virtual;
     procedure WriteElement(AElement: TPasElement);virtual;
     procedure WriteElement(AElement: TPasElement);virtual;
     procedure WriteType(AType: TPasType; Full : Boolean = True);virtual;
     procedure WriteType(AType: TPasType; Full : Boolean = True);virtual;
     procedure WriteProgram(aModule : TPasProgram); virtual;
     procedure WriteProgram(aModule : TPasProgram); virtual;
@@ -261,30 +257,6 @@ begin
   Add(Atype.GetDeclaration(true));
   Add(Atype.GetDeclaration(true));
 end;
 end;
 
 
-procedure TPasWriter.WriteSetType(AType: TPasSetType);
-
-begin
-  Add(Atype.GetDeclaration(true));
-end;
-
-procedure TPasWriter.WritePointerType(AType: TPasPointerType);
-
-begin
-  Add(Atype.GetDeclaration(true));
-end;
-
-procedure TPasWriter.WriteFileType(AType: TPasFileType);
-
-begin
-  Add(Atype.GetDeclaration(true));
-end;
-
-procedure TPasWriter.WriteRangeType(AType: TPasRangeType);
-
-begin
-  Add(Atype.GetDeclaration(true));
-end;
-
 procedure TPasWriter.WriteType(AType: TPasType; Full : Boolean = True);
 procedure TPasWriter.WriteType(AType: TPasType; Full : Boolean = True);
 
 
 begin
 begin
@@ -297,26 +269,19 @@ begin
     WriteClass(TPasClassType(AType))
     WriteClass(TPasClassType(AType))
   else if AType.ClassType = TPasEnumType then
   else if AType.ClassType = TPasEnumType then
     WriteEnumType(TPasEnumType(AType))
     WriteEnumType(TPasEnumType(AType))
-  else if AType is TPasSetType then
-    WriteSetType(TPasSetType(AType))
   else if AType is TPasProcedureType then
   else if AType is TPasProcedureType then
     WriteProcType(TPasProcedureType(AType))
     WriteProcType(TPasProcedureType(AType))
   else if AType is TPasArrayType then
   else if AType is TPasArrayType then
     WriteArrayType(TPasArrayType(AType))
     WriteArrayType(TPasArrayType(AType))
-  else if AType is TPasRangeType then
-    WriteRangeType(TPasRangeType(AType))
   else if AType is TPasRecordType then
   else if AType is TPasRecordType then
     WriteRecordType(TPasRecordType(AType))
     WriteRecordType(TPasRecordType(AType))
   else if AType is TPasAliasType then
   else if AType is TPasAliasType then
     WriteAliasType(TPasAliasType(AType))
     WriteAliasType(TPasAliasType(AType))
-  else if AType is TPasFileType then
-    WriteFileType(TPasFileType(AType))
   else if AType is TPasPointerType then
   else if AType is TPasPointerType then
-    WritePointerType(TPasPointerType(AType))
-  else if AType is TPasPointerType then
-    WriteRangeType(TPasRangeType(AType))
+    Add(AType.GetDeclaration(true))
   else
   else
-    Raise EPasWriter.CreateFmt('Writing not implemented for %s nodes',[AType.ElementTypeName]);
+    raise EPasWriter.Create('Writing not implemented for ' +
+      AType.ElementTypeName + ' nodes');
   if Full then
   if Full then
     AddLn(';');
     AddLn(';');
 end;
 end;
@@ -927,7 +892,7 @@ procedure TPasWriter.WriteProcImpl(AProc: TPasProcedureImpl);
 
 
 var
 var
   i: Integer;
   i: Integer;
-  E,PE : TPasElement;
+  E,PE  :TPasElement;
 
 
 begin
 begin
   PrepareDeclSection('');
   PrepareDeclSection('');
@@ -947,7 +912,6 @@ begin
   end;
   end;
   AddLn(';');
   AddLn(';');
   IncDeclSectionLevel;
   IncDeclSectionLevel;
-  PE:=Nil;
   for i := 0 to AProc.Locals.Count - 1 do
   for i := 0 to AProc.Locals.Count - 1 do
     begin
     begin
     E:=TPasElement(AProc.Locals[i]);
     E:=TPasElement(AProc.Locals[i]);

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

@@ -190,6 +190,7 @@ type
     procedure FinishScope(ScopeType: TPasScopeType; El: TPasElement); virtual;
     procedure FinishScope(ScopeType: TPasScopeType; El: TPasElement); virtual;
     function FindModule(const AName: String): TPasModule; virtual;
     function FindModule(const AName: String): TPasModule; virtual;
     function NeedArrayValues(El: TPasElement): boolean; virtual;
     function NeedArrayValues(El: TPasElement): boolean; virtual;
+    function GetDefaultClassVisibility(AClass: TPasClassType): TPasMemberVisibility; virtual;
     property Package: TPasPackage read FPackage;
     property Package: TPasPackage read FPackage;
     property InterfaceOnly : Boolean Read FInterfaceOnly Write FInterFaceOnly;
     property InterfaceOnly : Boolean Read FInterfaceOnly Write FInterFaceOnly;
     property ScannerLogEvents : TPScannerLogEvents Read FScannerLogEvents Write FScannerLogEvents;
     property ScannerLogEvents : TPScannerLogEvents Read FScannerLogEvents Write FScannerLogEvents;
@@ -769,6 +770,13 @@ begin
   if El=nil then ;
   if El=nil then ;
 end;
 end;
 
 
+function TPasTreeContainer.GetDefaultClassVisibility(AClass: TPasClassType
+  ): TPasMemberVisibility;
+begin
+  Result:=visPublic;
+  if AClass=nil then ;
+end;
+
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
   EParserError
   EParserError
   ---------------------------------------------------------------------}
   ---------------------------------------------------------------------}
@@ -5895,8 +5903,11 @@ Var
 
 
 begin
 begin
   CurSection:=stNone;
   CurSection:=stNone;
-  CurVisibility := visDefault;
-  HaveClass:=False;
+  haveClass:=false;
+  if Assigned(FEngine) then
+    CurVisibility:=FEngine.GetDefaultClassVisibility(AType)
+  else
+    CurVisibility := visPublic;
   LastToken:=CurToken;
   LastToken:=CurToken;
   while (CurToken<>tkEnd) do
   while (CurToken<>tkEnd) do
     begin
     begin

+ 38 - 38
packages/fcl-passrc/tests/tcclasstype.pas

@@ -45,7 +45,7 @@ type
     procedure TearDown; override;
     procedure TearDown; override;
     procedure DefaultMethod;
     procedure DefaultMethod;
     Procedure AssertParserError(Const Msg : String);
     Procedure AssertParserError(Const Msg : String);
-    Procedure AssertVisibility(V : TPasMemberVisibility = visDefault; Member : TPasElement = Nil);
+    Procedure AssertVisibility(V : TPasMemberVisibility = visPublic; Member : TPasElement = Nil);
     procedure AssertMemberType(AType : TClass; Member : TPaselement = Nil);
     procedure AssertMemberType(AType : TClass; Member : TPaselement = Nil);
     procedure AssertMemberName(AName : string; Member : TPaselement = Nil);
     procedure AssertMemberName(AName : string; Member : TPaselement = Nil);
     Procedure AssertProperty(P : TPasProperty; AVisibility : TPasMemberVisibility;AName,ARead,AWrite,AStored,AImplements : String; AArgCount : Integer; ADefault,ANodefault : Boolean);
     Procedure AssertProperty(P : TPasProperty; AVisibility : TPasMemberVisibility;AName,ARead,AWrite,AStored,AImplements : String; AArgCount : Integer; ADefault,ANodefault : Boolean);
@@ -680,7 +680,7 @@ begin
   AssertNotNull('Have field',Members[1]);
   AssertNotNull('Have field',Members[1]);
   AssertMemberName('b',Members[1]);
   AssertMemberName('b',Members[1]);
   AssertMemberType(TPasVariable,Members[1]);
   AssertMemberType(TPasVariable,Members[1]);
-  AssertVisibility(visDefault,Members[1]);
+  AssertVisibility(visPublic,Members[1]);
 end;
 end;
 
 
 procedure TTestClassType.TestTwoFieldsB;
 procedure TTestClassType.TestTwoFieldsB;
@@ -694,7 +694,7 @@ begin
   AssertNotNull('Have field',Members[1]);
   AssertNotNull('Have field',Members[1]);
   AssertMemberName('b',Members[1]);
   AssertMemberName('b',Members[1]);
   AssertMemberType(TPasVariable,Members[1]);
   AssertMemberType(TPasVariable,Members[1]);
-  AssertVisibility(visDefault,Members[1]);
+  AssertVisibility(visPublic,Members[1]);
 end;
 end;
 
 
 procedure TTestClassType.TestTwoVarFieldsB;
 procedure TTestClassType.TestTwoVarFieldsB;
@@ -879,7 +879,7 @@ begin
   AddMember('Procedure DoSomething');
   AddMember('Procedure DoSomething');
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 members',1,TheClass.members.Count);
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertNotNull('Have method',Method1);
   AssertNotNull('Have method',Method1);
   AssertMemberName('DoSomething');
   AssertMemberName('DoSomething');
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
@@ -894,7 +894,7 @@ begin
   AddMember('{c} Procedure DoSomething');
   AddMember('{c} Procedure DoSomething');
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 members',1,TheClass.members.Count);
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertNotNull('Have method',Method1);
   AssertNotNull('Have method',Method1);
   AssertMemberName('DoSomething');
   AssertMemberName('DoSomething');
   AssertEquals('Comment','c'+sLineBreak,Method1.DocComment);
   AssertEquals('Comment','c'+sLineBreak,Method1.DocComment);
@@ -912,7 +912,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 class procedure',TPasClassProcedure,members[0].ClassType);
   AssertEquals('1 class procedure',TPasClassProcedure,members[0].ClassType);
-  AssertEquals('Default visibility',visDefault,Members[0].Visibility);
+  AssertEquals('Public visibility',visPublic,Members[0].Visibility);
   AssertMemberName('DoSomething');
   AssertMemberName('DoSomething');
   AssertEquals('No modifiers',[],TPasClassProcedure(Members[0]).Modifiers);
   AssertEquals('No modifiers',[],TPasClassProcedure(Members[0]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasClassProcedure(Members[0]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasClassProcedure(Members[0]).ProcType.CallingConvention);
@@ -934,7 +934,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.Members.Count);
   AssertEquals('1 members',1,TheClass.Members.Count);
   AssertEquals('1 class procedure',TPasConstructor,Members[0].ClassType);
   AssertEquals('1 class procedure',TPasConstructor,Members[0].ClassType);
-  AssertEquals('Default visibility',visDefault,Members[0].Visibility);
+  AssertEquals('Public visibility',visPublic,Members[0].Visibility);
   AssertMemberName('Create');
   AssertMemberName('Create');
   AssertEquals('No modifiers',[],TPasConstructor(Members[0]).Modifiers);
   AssertEquals('No modifiers',[],TPasConstructor(Members[0]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasConstructor(Members[0]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasConstructor(Members[0]).ProcType.CallingConvention);
@@ -948,7 +948,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.Members.Count);
   AssertEquals('1 members',1,TheClass.Members.Count);
   AssertEquals('1 class procedure',TPasClassConstructor,Members[0].ClassType);
   AssertEquals('1 class procedure',TPasClassConstructor,Members[0].ClassType);
-  AssertEquals('Default visibility',visDefault,Members[0].Visibility);
+  AssertEquals('Public visibility',visPublic,Members[0].Visibility);
   AssertMemberName('Create');
   AssertMemberName('Create');
   AssertEquals('No modifiers',[],TPasClassConstructor(Members[0]).Modifiers);
   AssertEquals('No modifiers',[],TPasClassConstructor(Members[0]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasClassConstructor(Members[0]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasClassConstructor(Members[0]).ProcType.CallingConvention);
@@ -962,7 +962,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 class procedure',TPasDestructor,members[0].ClassType);
   AssertEquals('1 class procedure',TPasDestructor,members[0].ClassType);
-  AssertEquals('Default visibility',visDefault,Members[0].Visibility);
+  AssertEquals('Public visibility',visPublic,Members[0].Visibility);
   AssertMemberName('Destroy');
   AssertMemberName('Destroy');
   AssertEquals('No modifiers',[],TPasDestructor(Members[0]).Modifiers);
   AssertEquals('No modifiers',[],TPasDestructor(Members[0]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasDestructor(Members[0]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasDestructor(Members[0]).ProcType.CallingConvention);
@@ -976,7 +976,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.Members.Count);
   AssertEquals('1 members',1,TheClass.Members.Count);
   AssertEquals('1 class procedure',TPasClassDestructor,Members[0].ClassType);
   AssertEquals('1 class procedure',TPasClassDestructor,Members[0].ClassType);
-  AssertEquals('Default visibility',visDefault,Members[0].Visibility);
+  AssertEquals('Public visibility',visPublic,Members[0].Visibility);
   AssertMemberName('Destroy');
   AssertMemberName('Destroy');
   AssertEquals('No modifiers',[],TPasClassDestructor(Members[0]).Modifiers);
   AssertEquals('No modifiers',[],TPasClassDestructor(Members[0]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasClassDestructor(Members[0]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasClassDestructor(Members[0]).ProcType.CallingConvention);
@@ -989,7 +989,7 @@ begin
   AddMember('Function DoSomething : integer');
   AddMember('Function DoSomething : integer');
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 members',1,TheClass.members.Count);
-  AssertEquals('Default visibility',visDefault,FunctionMethod1.Visibility);
+  AssertEquals('Public visibility',visPublic,FunctionMethod1.Visibility);
   AssertNotNull('Have method',Member1);
   AssertNotNull('Have method',Member1);
   AssertMemberName('DoSomething');
   AssertMemberName('DoSomething');
   AssertEquals('No modifiers',[],functionMethod1.Modifiers);
   AssertEquals('No modifiers',[],functionMethod1.Modifiers);
@@ -1004,7 +1004,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 members',1,TheClass.members.Count);
   AssertEquals('1 class procedure',TPasClassFunction,members[0].ClassType);
   AssertEquals('1 class procedure',TPasClassFunction,members[0].ClassType);
-  AssertEquals('Default visibility',visDefault,Members[0].Visibility);
+  AssertEquals('Public visibility',visPublic,Members[0].Visibility);
   AssertMemberName('DoSomething');
   AssertMemberName('DoSomething');
   AssertEquals('No modifiers',[],TPasClassFunction(members[0]).Modifiers);
   AssertEquals('No modifiers',[],TPasClassFunction(members[0]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasClassFunction(members[0]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasClassFunction(members[0]).ProcType.CallingConvention);
@@ -1034,7 +1034,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer)');
   AddMember('Procedure DoSomething(A : Integer)');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1044,7 +1044,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) virtual');
   AddMember('Procedure DoSomething(A : Integer) virtual');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1054,7 +1054,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer); virtual');
   AddMember('Procedure DoSomething(A : Integer); virtual');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1064,7 +1064,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) virtual abstract');
   AddMember('Procedure DoSomething(A : Integer) virtual abstract');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Virtual, abstract modifiers',[pmVirtual,pmAbstract],Method1.Modifiers);
   AssertEquals('Virtual, abstract modifiers',[pmVirtual,pmAbstract],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1074,7 +1074,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) virtual; abstract; final');
   AddMember('Procedure DoSomething(A : Integer) virtual; abstract; final');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Virtual, abstract modifiers',[pmVirtual,pmAbstract,pmFinal],Method1.Modifiers);
   AssertEquals('Virtual, abstract modifiers',[pmVirtual,pmAbstract,pmFinal],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1085,7 +1085,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) override');
   AddMember('Procedure DoSomething(A : Integer) override');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Override modifiers',[pmoverride],Method1.Modifiers);
   AssertEquals('Override modifiers',[pmoverride],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1095,7 +1095,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) ReIntroduce');
   AddMember('Procedure DoSomething(A : Integer) ReIntroduce');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Reintroduce modifiers',[pmReintroduce],Method1.Modifiers);
   AssertEquals('Reintroduce modifiers',[pmReintroduce],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1105,7 +1105,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) dynamic');
   AddMember('Procedure DoSomething(A : Integer) dynamic');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Dynamic modifiers',[pmDynamic],Method1.Modifiers);
   AssertEquals('Dynamic modifiers',[pmDynamic],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1115,7 +1115,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) inline');
   AddMember('Procedure DoSomething(A : Integer) inline');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Inline modifiers',[pmInline],Method1.Modifiers);
   AssertEquals('Inline modifiers',[pmInline],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1138,7 +1138,7 @@ begin
   AddMember('Procedure DoSomethingB(A : Integer)');
   AddMember('Procedure DoSomethingB(A : Integer)');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('First Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('First Default visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertNotNull('Have method 2',Method2);
   AssertNotNull('Have method 2',Method2);
@@ -1157,7 +1157,7 @@ begin
   ParseClass;
   ParseClass;
   AssertNotNull('Have member 1',Member1);
   AssertNotNull('Have member 1',Member1);
   AssertEquals('Overload',TPasOverloadedProc,Member1.ClassType);
   AssertEquals('Overload',TPasOverloadedProc,Member1.ClassType);
-  AssertEquals('Default visibility',visDefault,Member1.Visibility);
+  AssertEquals('Public visibility',visPublic,Member1.Visibility);
 end;
 end;
 
 
 procedure TTestClassType.TestMethodHint;
 procedure TTestClassType.TestMethodHint;
@@ -1167,7 +1167,7 @@ begin
   DefaultMethod;
   DefaultMethod;
   HaveHint(hDeprecated,Member1.Hints);
   HaveHint(hDeprecated,Member1.Hints);
   HaveHint(hDeprecated,Method1.ProcType.Hints);
   HaveHint(hDeprecated,Method1.ProcType.Hints);
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1179,7 +1179,7 @@ begin
   DefaultMethod;
   DefaultMethod;
   HaveHint(hDeprecated,Member1.Hints);
   HaveHint(hDeprecated,Member1.Hints);
   HaveHint(hDeprecated,Method1.ProcType.Hints);
   HaveHint(hDeprecated,Method1.ProcType.Hints);
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1189,7 +1189,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) message 123');
   AddMember('Procedure DoSomething(A : Integer) message 123');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('message modifier',[pmMessage],Method1.Modifiers);
   AssertEquals('message modifier',[pmMessage],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Message name','123',Method1.MessageName);
   AssertEquals('Message name','123',Method1.MessageName);
@@ -1200,7 +1200,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) message ''aha''');
   AddMember('Procedure DoSomething(A : Integer) message ''aha''');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('message modifiers',[pmMessage],Method1.Modifiers);
   AssertEquals('message modifiers',[pmMessage],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Message name','''aha''',Method1.MessageName);
   AssertEquals('Message name','''aha''',Method1.MessageName);
@@ -1212,11 +1212,11 @@ begin
   AddMember('Procedure DoSomethingElse');
   AddMember('Procedure DoSomethingElse');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
-  AssertEquals('Default visibility',visDefault,Members[1].Visibility);
-  AssertEquals('Default visibility',TPasProcedure,Members[1].ClassType);
+  AssertEquals('Public visibility',visPublic,Members[1].Visibility);
+  AssertEquals('Public visibility',TPasProcedure,Members[1].ClassType);
   AssertEquals('Virtual modifiers',[],TPasProcedure(Members[1]).Modifiers);
   AssertEquals('Virtual modifiers',[],TPasProcedure(Members[1]).Modifiers);
   AssertEquals('Default calling convention',ccDefault, TPasProcedure(Members[1]).ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, TPasProcedure(Members[1]).ProcType.CallingConvention);
 end;
 end;
@@ -1228,7 +1228,7 @@ begin
   AddMember('Procedure DoSomethingElse');
   AddMember('Procedure DoSomethingElse');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Virtual modifiers',[pmVirtual],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('2 Public visibility',visPublic,Members[1].Visibility);
   AssertEquals('2 Public visibility',visPublic,Members[1].Visibility);
@@ -1798,7 +1798,7 @@ begin
   AssertEquals('Have helper original alias',TPasUnresolvedTypeRef,TheClass.HelperForType.CLassType);
   AssertEquals('Have helper original alias',TPasUnresolvedTypeRef,TheClass.HelperForType.CLassType);
   AssertEquals('Helper original alias name','TOriginal',TheClass.HelperForType.Name);
   AssertEquals('Helper original alias name','TOriginal',TheClass.HelperForType.Name);
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;
@@ -1842,7 +1842,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('Is interface',okInterface,TheClass.ObjKind);
   AssertEquals('Is interface',okInterface,TheClass.ObjKind);
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertNull('No UUID',TheClass.GUIDExpr);
   AssertNull('No UUID',TheClass.GUIDExpr);
@@ -1855,7 +1855,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer) dispid 12');
   AddMember('Procedure DoSomething(A : Integer) dispid 12');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('dispid modifier',[pmDispID],Method1.Modifiers);
   AssertEquals('dispid modifier',[pmDispID],Method1.Modifiers);
   AssertNotNull('dispid expression',Method1.DispIDExpr);
   AssertNotNull('dispid expression',Method1.DispIDExpr);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
@@ -1867,7 +1867,7 @@ begin
   AddMember('Procedure DoSomething(A : Integer); dispid 12');
   AddMember('Procedure DoSomething(A : Integer); dispid 12');
   ParseClass;
   ParseClass;
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('dispid modifier',[pmDispID],Method1.Modifiers);
   AssertEquals('dispid modifier',[pmDispID],Method1.Modifiers);
   AssertNotNull('dispid expression',Method1.DispIDExpr);
   AssertNotNull('dispid expression',Method1.DispIDExpr);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
@@ -1887,7 +1887,7 @@ begin
   AssertNotNull('Method proc type',FunctionMethod1.ProcType);
   AssertNotNull('Method proc type',FunctionMethod1.ProcType);
   AssertMemberName('GetS');
   AssertMemberName('GetS');
   AssertEquals('0 arguments',0,FunctionMethod1.ProcType.Args.Count) ;
   AssertEquals('0 arguments',0,FunctionMethod1.ProcType.Args.Count) ;
-  AssertEquals('Default visibility',visDefault,FunctionMethod1.Visibility);
+  AssertEquals('Public visibility',visPublic,FunctionMethod1.Visibility);
   AssertEquals('No modifiers',[],FunctionMethod1.Modifiers);
   AssertEquals('No modifiers',[],FunctionMethod1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, FunctionMethod1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, FunctionMethod1.ProcType.CallingConvention);
   AssertNull('No UUID',TheClass.GUIDExpr);
   AssertNull('No UUID',TheClass.GUIDExpr);
@@ -1977,7 +1977,7 @@ begin
   ParseClass;
   ParseClass;
   AssertEquals('Is interface',okInterface,TheClass.ObjKind);
   AssertEquals('Is interface',okInterface,TheClass.ObjKind);
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertExpression('UUID',TheClass.GUIDExpr,pekString,'''123''');
   AssertExpression('UUID',TheClass.GUIDExpr,pekString,'''123''');
@@ -2015,7 +2015,7 @@ begin
   AssertEquals('Have helper original alias',TPasUnresolvedTypeRef,TheClass.HelperForType.ClassType);
   AssertEquals('Have helper original alias',TPasUnresolvedTypeRef,TheClass.HelperForType.ClassType);
   AssertEquals('Helper original alias name','TOriginal',TheClass.HelperForType.Name);
   AssertEquals('Helper original alias name','TOriginal',TheClass.HelperForType.Name);
   DefaultMethod;
   DefaultMethod;
-  AssertEquals('Default visibility',visDefault,Method1.Visibility);
+  AssertEquals('Public visibility',visPublic,Method1.Visibility);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('No modifiers',[],Method1.Modifiers);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
   AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention);
 end;
 end;

+ 2 - 0
packages/fcl-passrc/tests/tcresolver.pas

@@ -9208,10 +9208,12 @@ begin
   Add('begin');
   Add('begin');
   Add('  for i:=low(a) to high(a) do s:=a[length(a)-i-1];');
   Add('  for i:=low(a) to high(a) do s:=a[length(a)-i-1];');
   Add('end;');
   Add('end;');
+  Add('const arr: array[0..1] of string = (''A'', ''B'');');
   Add('var s: string;');
   Add('var s: string;');
   Add('begin');
   Add('begin');
   Add('  DoIt([]);');
   Add('  DoIt([]);');
   Add('  DoIt([s,''foo'','''',s+s]);');
   Add('  DoIt([s,''foo'','''',s+s]);');
+  Add('  DoIt(arr);');
   ParseProgram;
   ParseProgram;
 end;
 end;