Преглед изворни кода

* insert the hidden parameters for objectdef methods after resolving
overrides but before generating the VMT, so that these hidden parameters
are part of the procdefs stored in the VMT (fixes some LLVM type errors
after r41716)

git-svn-id: trunk@41884 -

Jonas Maebe пре 6 година
родитељ
комит
e008785152
4 измењених фајлова са 3 додато и 5 уклоњено
  1. 0 2
      compiler/jvm/pjvm.pas
  2. 3 1
      compiler/nobj.pas
  3. 0 1
      compiler/pdecl.pas
  4. 0 1
      compiler/pgenutil.pas

+ 0 - 2
compiler/jvm/pjvm.pas

@@ -322,7 +322,6 @@ implementation
         vmtbuilder:=TVMTBuilder.Create(enumclass);
         vmtbuilder:=TVMTBuilder.Create(enumclass);
         vmtbuilder.generate_vmt;
         vmtbuilder.generate_vmt;
         vmtbuilder.free;
         vmtbuilder.free;
-        insert_struct_hidden_paras(enumclass);
 
 
         restore_after_new_class(sstate,islocal,oldsymtablestack);
         restore_after_new_class(sstate,islocal,oldsymtablestack);
         current_structdef:=old_current_structdef;
         current_structdef:=old_current_structdef;
@@ -433,7 +432,6 @@ implementation
         vmtbuilder:=TVMTBuilder.Create(pvclass);
         vmtbuilder:=TVMTBuilder.Create(pvclass);
         vmtbuilder.generate_vmt;
         vmtbuilder.generate_vmt;
         vmtbuilder.free;
         vmtbuilder.free;
-        insert_struct_hidden_paras(pvclass);
 
 
         restore_after_new_class(sstate,islocal,oldsymtablestack);
         restore_after_new_class(sstate,islocal,oldsymtablestack);
       end;
       end;

+ 3 - 1
compiler/nobj.pas

@@ -60,7 +60,8 @@ implementation
        globals,verbose,systems,
        globals,verbose,systems,
        node,
        node,
        symbase,symtable,symconst,symtype,symcpu,
        symbase,symtable,symconst,symtype,symcpu,
-       defcmp;
+       defcmp,
+       pparautl;
 
 
 
 
 {*****************************************************************************
 {*****************************************************************************
@@ -922,6 +923,7 @@ implementation
                   add_new_vmt_entry(tprocdef(def),overridesclasshelper);
                   add_new_vmt_entry(tprocdef(def),overridesclasshelper);
               end;
               end;
           end;
           end;
+        insert_struct_hidden_paras(_class);
         build_interface_mappings;
         build_interface_mappings;
         if assigned(_class.ImplementedInterfaces) and
         if assigned(_class.ImplementedInterfaces) and
            not(is_objc_class_or_protocol(_class)) and
            not(is_objc_class_or_protocol(_class)) and

+ 0 - 1
compiler/pdecl.pas

@@ -888,7 +888,6 @@ implementation
                         vmtbuilder:=TVMTBuilder.Create(tobjectdef(hdef));
                         vmtbuilder:=TVMTBuilder.Create(tobjectdef(hdef));
                         vmtbuilder.generate_vmt;
                         vmtbuilder.generate_vmt;
                         vmtbuilder.free;
                         vmtbuilder.free;
-                        insert_struct_hidden_paras(tobjectdef(hdef));
                       end;
                       end;
 
 
                     { In case of an objcclass, verify that all methods have a message
                     { In case of an objcclass, verify that all methods have a message

+ 0 - 1
compiler/pgenutil.pas

@@ -1059,7 +1059,6 @@ uses
                       vmtbuilder:=TVMTBuilder.Create(tobjectdef(result));
                       vmtbuilder:=TVMTBuilder.Create(tobjectdef(result));
                       vmtbuilder.generate_vmt;
                       vmtbuilder.generate_vmt;
                       vmtbuilder.free;
                       vmtbuilder.free;
-                      insert_struct_hidden_paras(tobjectdef(result));
                     end;
                     end;
                   { handle params, calling convention, etc }
                   { handle params, calling convention, etc }
                   procvardef:
                   procvardef: