浏览代码

* 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.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: