|
@@ -936,7 +936,6 @@ implementation
|
|
|
if (ImplIntf=ImplIntf.VtblImplIntf) and
|
|
|
assigned(ImplIntf.ProcDefs) then
|
|
|
begin
|
|
|
- maybe_new_object_file(list);
|
|
|
for j:=0 to ImplIntf.ProcDefs.Count-1 do
|
|
|
begin
|
|
|
pd:=TProcdef(ImplIntf.ProcDefs[j]);
|
|
@@ -949,7 +948,7 @@ implementation
|
|
|
tmps:=make_mangledname('WRPR',_class.owner,_class.objname^+'_$_'+
|
|
|
ImplIntf.IntfDef.objname^+'_$_'+tostr(j)+'_$_'+pd.mangledname);
|
|
|
{ create wrapper code }
|
|
|
- new_section(list,sec_code,tmps,0);
|
|
|
+ new_section(list,sec_code,tmps,target_info.alignment.procalign);
|
|
|
hlcg.init_register_allocators;
|
|
|
cg.g_intf_wrapper(list,pd,tmps,ImplIntf.ioffset);
|
|
|
hlcg.done_register_allocators;
|
|
@@ -959,23 +958,6 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
- procedure gen_intf_wrappers(list:TAsmList;st:TSymtable);
|
|
|
- var
|
|
|
- i : longint;
|
|
|
- def : tdef;
|
|
|
- begin
|
|
|
- for i:=0 to st.DefList.Count-1 do
|
|
|
- begin
|
|
|
- def:=tdef(st.DefList[i]);
|
|
|
- { if def can contain nested types then handle it symtable }
|
|
|
- if def.typ in [objectdef,recorddef] then
|
|
|
- gen_intf_wrappers(list,tabstractrecorddef(def).symtable);
|
|
|
- if is_class(def) then
|
|
|
- gen_intf_wrapper(list,tobjectdef(def));
|
|
|
- end;
|
|
|
- end;
|
|
|
-
|
|
|
-
|
|
|
procedure do_write_persistent_type_info(st:tsymtable;is_global:boolean);
|
|
|
var
|
|
|
i : longint;
|
|
@@ -1010,6 +992,8 @@ implementation
|
|
|
vmtwriter.free;
|
|
|
include(def.defstates,ds_vmt_written);
|
|
|
end;
|
|
|
+ if is_class(def) then
|
|
|
+ gen_intf_wrapper(current_asmdata.asmlists[al_globals],tobjectdef(def));
|
|
|
end;
|
|
|
procdef :
|
|
|
begin
|
|
@@ -1045,7 +1029,6 @@ implementation
|
|
|
procedure write_persistent_type_info(st:tsymtable;is_global:boolean);
|
|
|
begin
|
|
|
create_hlcodegen;
|
|
|
- gen_intf_wrappers(current_asmdata.asmlists[al_procedures],st);
|
|
|
do_write_persistent_type_info(st,is_global);
|
|
|
destroy_hlcodegen;
|
|
|
end;
|