2
0
Эх сурвалжийг харах

* don't complain if the external name of a complete definition and that
of a forward definition don't match, since forward definitions can't
have an external name (nor can they be used in a situation where it's
necessary)

git-svn-id: branches/jvmbackend@18445 -

Jonas Maebe 14 жил өмнө
parent
commit
f1c7e018c4
1 өөрчлөгдсөн 30 нэмэгдсэн , 25 устгасан
  1. 30 25
      compiler/symtable.pas

+ 30 - 25
compiler/symtable.pas

@@ -2164,33 +2164,38 @@ implementation
                    (tobjectdef(ttypesym(srsym).typedef).objecttype=pd.objecttype) and
                    not(oo_is_formal in tobjectdef(ttypesym(srsym).typedef).objectoptions) then
                   begin
-                    { the external name for the formal and the real definition must match }
-                    if assigned(tobjectdef(ttypesym(srsym).typedef).import_lib) or
-                       assigned(pd.import_lib) then
+                    if not(oo_is_forward in tobjectdef(ttypesym(srsym).typedef).objectoptions) then
                       begin
-                        if assigned(pd.import_lib) then
-                          formalname:=pd.import_lib^
+                        { the external name for the formal and the real
+                          definition must match (forward declarations don't have
+                          an external name set yet) }
+                        if assigned(tobjectdef(ttypesym(srsym).typedef).import_lib) or
+                           assigned(pd.import_lib) then
+                          begin
+                            if assigned(pd.import_lib) then
+                              formalname:=pd.import_lib^
+                            else
+                              formalname:='';
+                            formalname:=formalname+'.'+pd.objextname^;
+                            if assigned(tobjectdef(ttypesym(srsym).typedef).import_lib) then
+                              foundname:=tobjectdef(ttypesym(srsym).typedef).import_lib^+'.'
+                            else
+                              foundname:='';
+                            foundname:=foundname+tobjectdef(ttypesym(srsym).typedef).objextname^;
+
+                            formalnameptr:=@formalname;
+                            foundnameptr:=@foundname;
+                          end
                         else
-                          formalname:='';
-                        formalname:=formalname+'.'+pd.objextname^;
-                        if assigned(tobjectdef(ttypesym(srsym).typedef).import_lib) then
-                          foundname:=tobjectdef(ttypesym(srsym).typedef).import_lib^+'.'
-                        else
-                          foundname:='';
-                        foundname:=foundname+tobjectdef(ttypesym(srsym).typedef).objextname^;
-
-                        formalnameptr:=@formalname;
-                        foundnameptr:=@foundname;
-                      end
-                    else
-                      begin
-                        formalnameptr:=pd.objextname;
-                        foundnameptr:=tobjectdef(ttypesym(srsym).typedef).objextname;
-                      end;
-                    if foundnameptr^<>formalnameptr^ then
-                      begin
-                        Message2(sym_e_external_class_name_mismatch1,formalnameptr^,pd.typename);
-                        MessagePos1(srsym.fileinfo,sym_e_external_class_name_mismatch2,foundnameptr^);
+                          begin
+                            formalnameptr:=pd.objextname;
+                            foundnameptr:=tobjectdef(ttypesym(srsym).typedef).objextname;
+                          end;
+                        if foundnameptr^<>formalnameptr^ then
+                          begin
+                            Message2(sym_e_external_class_name_mismatch1,formalnameptr^,pd.typename);
+                            MessagePos1(srsym.fileinfo,sym_e_external_class_name_mismatch2,foundnameptr^);
+                          end;
                       end;
                     result:=tobjectdef(ttypesym(srsym).typedef);
                     if assigned(current_procinfo) and