nobj.pas, cleanup/refactoring:

- removed empty destructors, overriding destructor without calling inherited is incorrect (although harmless here).
* pass target asmlist as parameter to message table generation procedures, instead of using global variables.

git-svn-id: trunk@20303 -
This commit is contained in:
sergei 2012-02-11 09:27:03 +00:00
parent 06aef9350f
commit 3b006c4a9c

View File

@ -49,7 +49,6 @@ interface
procedure intf_allocate_vtbls;
public
constructor create(c:tobjectdef);
destructor destroy;override;
procedure generate_vmt;
procedure build_interface_mappings;
end;
@ -72,9 +71,9 @@ interface
procedure insertmsgstr(p:TObject;arg:pointer);
procedure insertint(p : pprocdeftree;var at : pprocdeftree;var count:longint);
procedure insertstr(p : pprocdeftree;var at : pprocdeftree;var count:longint);
procedure writenames(p : pprocdeftree);
procedure writeintentry(p : pprocdeftree);
procedure writestrentry(p : pprocdeftree);
procedure writenames(list : TAsmList;p : pprocdeftree);
procedure writeintentry(list : TAsmList;p : pprocdeftree);
procedure writestrentry(list : TAsmList;p : pprocdeftree);
{$ifdef WITHDMT}
{ dmt }
procedure insertdmtentry(p:TObject;arg:pointer);
@ -92,8 +91,8 @@ interface
procedure intf_gen_intf_ref(rawdata: TAsmList;AImplIntf:TImplementedInterface);
function intf_write_table:TAsmLabel;
{ generates the message tables for a class }
function genstrmsgtab : tasmlabel;
function genintmsgtab : tasmlabel;
function genstrmsgtab(list : TAsmList) : tasmlabel;
function genintmsgtab(list : TAsmList) : tasmlabel;
function genpublishedmethodstable : tasmlabel;
function generate_field_table : tasmlabel;
{$ifdef WITHDMT}
@ -102,7 +101,6 @@ interface
{$endif WITHDMT}
public
constructor create(c:tobjectdef);
destructor destroy;override;
{ write the VMT to al_globals }
procedure writevmt;
procedure writeinterfaceids;
@ -132,11 +130,6 @@ implementation
end;
destructor TVMTBuilder.destroy;
begin
end;
procedure TVMTBuilder.add_new_vmt_entry(pd:tprocdef; allowoverridingmethod: boolean);
var
i : longint;
@ -833,11 +826,6 @@ implementation
end;
destructor TVMTWriter.destroy;
begin
end;
{**************************************
Message Tables
**************************************}
@ -939,44 +927,44 @@ implementation
end;
procedure TVMTWriter.writenames(p : pprocdeftree);
procedure TVMTWriter.writenames(list : TAsmList;p : pprocdeftree);
var
ca : pchar;
len : byte;
begin
current_asmdata.getdatalabel(p^.nl);
if assigned(p^.l) then
writenames(p^.l);
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_globals].concat(Tai_label.Create(p^.nl));
writenames(list,p^.l);
list.concat(cai_align.create(const_align(sizeof(pint))));
list.concat(Tai_label.Create(p^.nl));
len:=length(p^.data.messageinf.str^);
current_asmdata.asmlists[al_globals].concat(tai_const.create_8bit(len));
list.concat(tai_const.create_8bit(len));
getmem(ca,len+1);
move(p^.data.messageinf.str^[1],ca^,len);
ca[len]:=#0;
current_asmdata.asmlists[al_globals].concat(Tai_string.Create_pchar(ca,len));
list.concat(Tai_string.Create_pchar(ca,len));
if assigned(p^.r) then
writenames(p^.r);
writenames(list,p^.r);
end;
procedure TVMTWriter.writestrentry(p : pprocdeftree);
procedure TVMTWriter.writestrentry(list : TAsmList;p : pprocdeftree);
begin
if assigned(p^.l) then
writestrentry(p^.l);
writestrentry(list,p^.l);
{ write name label }
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_globals].concat(Tai_const.Create_sym(p^.nl));
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_globals].concat(Tai_const.Createname(p^.data.mangledname,0));
list.concat(cai_align.create(const_align(sizeof(pint))));
list.concat(Tai_const.Create_sym(p^.nl));
list.concat(cai_align.create(const_align(sizeof(pint))));
list.concat(Tai_const.Createname(p^.data.mangledname,0));
if assigned(p^.r) then
writestrentry(p^.r);
writestrentry(list,p^.r);
end;
function TVMTWriter.genstrmsgtab : tasmlabel;
function TVMTWriter.genstrmsgtab(list : TAsmList) : tasmlabel;
var
count : longint;
begin
@ -987,40 +975,40 @@ implementation
{ write all names }
if assigned(root) then
writenames(root);
writenames(list,root);
{ now start writing of the message string table }
current_asmdata.getdatalabel(result);
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_globals].concat(Tai_label.Create(result));
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(longint))));
current_asmdata.asmlists[al_globals].concat(Tai_const.Create_32bit(count));
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
list.concat(cai_align.create(const_align(sizeof(pint))));
list.concat(Tai_label.Create(result));
list.concat(cai_align.create(const_align(sizeof(longint))));
list.concat(Tai_const.Create_32bit(count));
list.concat(cai_align.create(const_align(sizeof(pint))));
if assigned(root) then
begin
writestrentry(root);
writestrentry(list,root);
disposeprocdeftree(root);
end;
end;
procedure TVMTWriter.writeintentry(p : pprocdeftree);
procedure TVMTWriter.writeintentry(list : TAsmList;p : pprocdeftree);
begin
if assigned(p^.l) then
writeintentry(p^.l);
writeintentry(list,p^.l);
{ write name label }
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(longint))));
current_asmdata.asmlists[al_globals].concat(Tai_const.Create_32bit(p^.data.messageinf.i));
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_globals].concat(Tai_const.Createname(p^.data.mangledname,0));
list.concat(cai_align.create(const_align(sizeof(longint))));
list.concat(Tai_const.Create_32bit(p^.data.messageinf.i));
list.concat(cai_align.create(const_align(sizeof(pint))));
list.concat(Tai_const.Createname(p^.data.mangledname,0));
if assigned(p^.r) then
writeintentry(p^.r);
writeintentry(list,p^.r);
end;
function TVMTWriter.genintmsgtab : tasmlabel;
function TVMTWriter.genintmsgtab(list : TAsmList) : tasmlabel;
var
r : tasmlabel;
count : longint;
@ -1032,15 +1020,15 @@ implementation
{ now start writing of the message string table }
current_asmdata.getdatalabel(r);
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_globals].concat(Tai_label.Create(r));
list.concat(cai_align.create(const_align(sizeof(pint))));
list.concat(Tai_label.Create(r));
genintmsgtab:=r;
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(longint))));
current_asmdata.asmlists[al_globals].concat(Tai_const.Create_32bit(count));
current_asmdata.asmlists[al_globals].concat(cai_align.create(const_align(sizeof(pint))));
list.concat(cai_align.create(const_align(sizeof(longint))));
list.concat(Tai_const.Create_32bit(count));
list.concat(cai_align.create(const_align(sizeof(pint))));
if assigned(root) then
begin
writeintentry(root);
writeintentry(list,root);
disposeprocdeftree(root);
end;
end;
@ -1504,9 +1492,9 @@ implementation
{ generate message and dynamic tables }
if (oo_has_msgstr in _class.objectoptions) then
strmessagetable:=genstrmsgtab;
strmessagetable:=genstrmsgtab(current_asmdata.asmlists[al_globals]);
if (oo_has_msgint in _class.objectoptions) then
intmessagetable:=genintmsgtab;
intmessagetable:=genintmsgtab(current_asmdata.asmlists[al_globals]);
end;
{ write debug info }