Browse Source

* 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 years ago
parent
commit
e008785152
4 changed files with 3 additions and 5 deletions
  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.generate_vmt;
         vmtbuilder.free;
-        insert_struct_hidden_paras(enumclass);
 
         restore_after_new_class(sstate,islocal,oldsymtablestack);
         current_structdef:=old_current_structdef;
@@ -433,7 +432,6 @@ implementation
         vmtbuilder:=TVMTBuilder.Create(pvclass);
         vmtbuilder.generate_vmt;
         vmtbuilder.free;
-        insert_struct_hidden_paras(pvclass);
 
         restore_after_new_class(sstate,islocal,oldsymtablestack);
       end;

+ 3 - 1
compiler/nobj.pas

@@ -60,7 +60,8 @@ implementation
        globals,verbose,systems,
        node,
        symbase,symtable,symconst,symtype,symcpu,
-       defcmp;
+       defcmp,
+       pparautl;
 
 
 {*****************************************************************************
@@ -922,6 +923,7 @@ implementation
                   add_new_vmt_entry(tprocdef(def),overridesclasshelper);
               end;
           end;
+        insert_struct_hidden_paras(_class);
         build_interface_mappings;
         if assigned(_class.ImplementedInterfaces) 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.generate_vmt;
                         vmtbuilder.free;
-                        insert_struct_hidden_paras(tobjectdef(hdef));
                       end;
 
                     { 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.generate_vmt;
                       vmtbuilder.free;
-                      insert_struct_hidden_paras(tobjectdef(result));
                     end;
                   { handle params, calling convention, etc }
                   procvardef: