mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 06:49:27 +02:00
* compiler works again compiled with $R+
git-svn-id: trunk@16848 -
This commit is contained in:
parent
e39a220945
commit
ec2d294287
@ -2767,7 +2767,8 @@ implementation
|
||||
else
|
||||
p1:=sub_expr(succ(pred_level),true,typeonly);
|
||||
repeat
|
||||
if (token in operator_levels[pred_level]) and
|
||||
if (token in [NOTOKEN..last_operator]) and
|
||||
(token in operator_levels[pred_level]) and
|
||||
((token<>_EQ) or accept_equal) then
|
||||
begin
|
||||
oldt:=token;
|
||||
|
@ -367,18 +367,18 @@ implementation
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ There is comment few lines before ie 200512115
|
||||
saying "We are parsing the same objectdef, the def index numbers
|
||||
are the same". This is wrong (index numbers are not same)
|
||||
in case there is specialization (S2 in this case) inside
|
||||
specialized generic (G2 in this case) which is equal to
|
||||
some previous specialization (S1 in this case). In that case,
|
||||
new symbol is not added to currently specialized type
|
||||
(S in this case) for that specializations (S2 in this case),
|
||||
and this results in that specialization and generic definition
|
||||
don't have same number of elements in their object symbol tables.
|
||||
This patch adds undefined def to ensure that those
|
||||
two symbol tables will have same number of elements.
|
||||
{ There is comment few lines before ie 200512115
|
||||
saying "We are parsing the same objectdef, the def index numbers
|
||||
are the same". This is wrong (index numbers are not same)
|
||||
in case there is specialization (S2 in this case) inside
|
||||
specialized generic (G2 in this case) which is equal to
|
||||
some previous specialization (S1 in this case). In that case,
|
||||
new symbol is not added to currently specialized type
|
||||
(S in this case) for that specializations (S2 in this case),
|
||||
and this results in that specialization and generic definition
|
||||
don't have same number of elements in their object symbol tables.
|
||||
This patch adds undefined def to ensure that those
|
||||
two symbol tables will have same number of elements.
|
||||
}
|
||||
tundefineddef.create;
|
||||
end;
|
||||
@ -938,7 +938,7 @@ implementation
|
||||
lv,hv : TConstExprInt;
|
||||
old_block_type : tblock_type;
|
||||
dospecialize : boolean;
|
||||
structdef: tabstractrecorddef;
|
||||
structdef: tdef;
|
||||
begin
|
||||
old_block_type:=block_type;
|
||||
dospecialize:=false;
|
||||
@ -949,13 +949,13 @@ implementation
|
||||
structdef:=current_structdef;
|
||||
while assigned(structdef) and (structdef.typ in [objectdef,recorddef]) do
|
||||
begin
|
||||
if (structdef.objname^=pattern) then
|
||||
if (tabstractrecorddef(structdef).objname^=pattern) then
|
||||
begin
|
||||
consume(_ID);
|
||||
def:=structdef;
|
||||
exit;
|
||||
end;
|
||||
structdef:=tabstractrecorddef(structdef.owner.defowner);
|
||||
structdef:=tdef(structdef.owner.defowner);
|
||||
end;
|
||||
end;
|
||||
{ Generate a specialization in FPC mode? }
|
||||
|
@ -761,7 +761,7 @@ implementation
|
||||
begin
|
||||
if b_needs_init_final then
|
||||
exit;
|
||||
{ don't check static symbols - they can be present in structures only and
|
||||
{ don't check static symbols - they can be present in structures only and
|
||||
always have a reference to a symbol defined on unit level }
|
||||
if sp_static in tsym(sym).symoptions then
|
||||
exit;
|
||||
@ -1916,7 +1916,7 @@ implementation
|
||||
(srsymtable.defowner.typ in [recorddef,objectdef]) and
|
||||
(srsymtable.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||
(srsymtable.defowner.owner.iscurrentunit) then
|
||||
contextstructdef:=tobjectdef(srsymtable.defowner)
|
||||
contextstructdef:=tabstractrecorddef(srsymtable.defowner)
|
||||
else
|
||||
contextstructdef:=current_structdef;
|
||||
if not (srsym.owner.symtabletype in [objectsymtable,recordsymtable]) or
|
||||
@ -1980,7 +1980,7 @@ implementation
|
||||
else
|
||||
begin
|
||||
srsym:=tsym(srsymtable.FindWithHash(hashedid));
|
||||
if assigned(srsym) and
|
||||
if assigned(srsym) and
|
||||
not(srsym.typ in [fieldvarsym,paravarsym,propertysym,procsym,labelsym]) and
|
||||
(not (srsym.owner.symtabletype in [objectsymtable,recordsymtable]) or is_visible_for_object(srsym,current_structdef)) then
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user