compiler: don't create a parasymtable for property if property has no parameters

git-svn-id: trunk@19550 -
This commit is contained in:
paul 2011-10-28 01:38:55 +00:00
parent aaabc35058
commit 62b4ef3d1a
3 changed files with 15 additions and 9 deletions

View File

@ -401,6 +401,7 @@ implementation
not (m_delphi in current_settings.modeswitches) then not (m_delphi in current_settings.modeswitches) then
Message(parser_e_cant_publish_that_property); Message(parser_e_cant_publish_that_property);
{ create a list of the parameters } { create a list of the parameters }
p.parast:=tparasymtable.create(nil,0);
symtablestack.push(p.parast); symtablestack.push(p.parast);
sc:=TFPObjectList.create(false); sc:=TFPObjectList.create(false);
repeat repeat
@ -513,10 +514,9 @@ implementation
p.index:=tpropertysym(overridden).index; p.index:=tpropertysym(overridden).index;
p.default:=tpropertysym(overridden).default; p.default:=tpropertysym(overridden).default;
p.propoptions:=tpropertysym(overridden).propoptions; p.propoptions:=tpropertysym(overridden).propoptions;
p.parast.free;
p.parast:=tpropertysym(overridden).parast.getcopy;
if ppo_hasparameters in p.propoptions then if ppo_hasparameters in p.propoptions then
begin begin
p.parast:=tpropertysym(overridden).parast.getcopy;
add_parameters(p,readprocdef,writeprocdef); add_parameters(p,readprocdef,writeprocdef);
paranr:=p.parast.SymList.Count; paranr:=p.parast.SymList.Count;
end; end;

View File

@ -43,7 +43,7 @@ type
{$endif Test_Double_checksum} {$endif Test_Double_checksum}
const const
CurrentPPUVersion = 138; CurrentPPUVersion = 139;
{ buffer sizes } { buffer sizes }
maxentrysize = 1024; maxentrysize = 1024;

View File

@ -957,7 +957,7 @@ implementation
default:=0; default:=0;
propdef:=nil; propdef:=nil;
indexdef:=nil; indexdef:=nil;
parast:=tparasymtable.create(nil,0); parast:=nil;
for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do
propaccesslist[pap]:=tpropaccesslist.create; propaccesslist[pap]:=tpropaccesslist.create;
end; end;
@ -976,8 +976,11 @@ implementation
ppufile.getderef(indexdefderef); ppufile.getderef(indexdefderef);
for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do
propaccesslist[pap]:=ppufile.getpropaccesslist; propaccesslist[pap]:=ppufile.getpropaccesslist;
parast:=tparasymtable.create(nil,0); if ppo_hasparameters in propoptions then
tparasymtable(parast).ppuload(ppufile); begin
parast:=tparasymtable.create(nil,0);
tparasymtable(parast).ppuload(ppufile);
end;
end; end;
@ -1001,7 +1004,8 @@ implementation
indexdefderef.build(indexdef); indexdefderef.build(indexdef);
for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do
propaccesslist[pap].buildderef; propaccesslist[pap].buildderef;
tparasymtable(parast).buildderef; if assigned(parast) then
tparasymtable(parast).buildderef;
end; end;
@ -1014,7 +1018,8 @@ implementation
propdef:=tdef(propdefderef.resolve); propdef:=tdef(propdefderef.resolve);
for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do
propaccesslist[pap].resolve; propaccesslist[pap].resolve;
tparasymtable(parast).deref; if assigned(parast) then
tparasymtable(parast).deref;
end; end;
@ -1038,7 +1043,8 @@ implementation
for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do for pap:=low(tpropaccesslisttypes) to high(tpropaccesslisttypes) do
ppufile.putpropaccesslist(propaccesslist[pap]); ppufile.putpropaccesslist(propaccesslist[pap]);
ppufile.writeentry(ibpropertysym); ppufile.writeentry(ibpropertysym);
tparasymtable(parast).ppuwrite(ppufile); if ppo_hasparameters in propoptions then
tparasymtable(parast).ppuwrite(ppufile);
end; end;