ソースを参照

fcl-passrc: resolver: nicer error message on invalid set element type

git-svn-id: trunk@41157 -
Mattias Gaertner 6 年 前
コミット
e9c8d9b1b7
1 ファイル変更14 行追加2 行削除
  1. 14 2
      packages/fcl-passrc/src/pasresolver.pp

+ 14 - 2
packages/fcl-passrc/src/pasresolver.pp

@@ -2348,6 +2348,8 @@ begin
     Result:=ExprKindNames[TBinaryExpr(El).Kind]
   else if C=TPasClassType then
     Result:=ObjKindNames[TPasClassType(El).ObjKind]
+  else if C=TPasUnresolvedSymbolRef then
+    Result:=El.Name
   else
     begin
     Result:=GetElementTypeName(TPasElementBaseClass(C));
@@ -5343,6 +5345,14 @@ begin
 end;
 
 procedure TPasResolver.FinishSetType(El: TPasSetType);
+
+  function GetEnumTypePosEl: TPasElement;
+  begin
+    Result:=El.EnumType;
+    if Result.Parent<>El then
+      Result:=El;
+  end;
+
 var
   BaseTypeData: TResElDataBaseType;
   StartResolved, EndResolved: TPasResolverResult;
@@ -5372,10 +5382,12 @@ begin
       BaseTypeData:=TResElDataBaseType(EnumType.CustomData);
       if BaseTypeData.BaseType in (btAllChars+[btBoolean,btByte]) then
         exit;
-      RaiseXExpectedButYFound(20170216151553,'char or boolean',GetElementTypeName(EnumType),EnumType);
+      RaiseXExpectedButYFound(20170216151553,'char or boolean',
+        GetElementTypeName(EnumType),GetEnumTypePosEl);
       end;
     end;
-  RaiseXExpectedButYFound(20170216151557,'enum type',GetElementTypeName(EnumType),EnumType);
+  RaiseXExpectedButYFound(20170216151557,'enum type',
+    GetElementTypeName(EnumType),GetEnumTypePosEl);
 end;
 
 procedure TPasResolver.FinishSubElementType(Parent: TPasElement; El: TPasType);