mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 06:29:42 +02:00
added checking for token=_ID after _POINT is parsed
This commit is contained in:
parent
e32e9da818
commit
d804452dcc
@ -1677,81 +1677,92 @@ implementation
|
|||||||
do_resulttypepass(p1);
|
do_resulttypepass(p1);
|
||||||
end;
|
end;
|
||||||
case p1.resulttype.def.deftype of
|
case p1.resulttype.def.deftype of
|
||||||
recorddef:
|
recorddef:
|
||||||
begin
|
begin
|
||||||
hsym:=tsym(trecorddef(p1.resulttype.def).symtable.search(pattern));
|
if token=_ID then
|
||||||
check_hints(hsym);
|
begin
|
||||||
if assigned(hsym) and
|
hsym:=tsym(trecorddef(p1.resulttype.def).symtable.search(pattern));
|
||||||
(hsym.typ=varsym) then
|
|
||||||
p1:=csubscriptnode.create(hsym,p1)
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Message1(sym_e_illegal_field,pattern);
|
|
||||||
p1.destroy;
|
|
||||||
p1:=cerrornode.create;
|
|
||||||
end;
|
|
||||||
consume(_ID);
|
|
||||||
end;
|
|
||||||
variantdef:
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
classrefdef:
|
|
||||||
begin
|
|
||||||
classh:=tobjectdef(tclassrefdef(p1.resulttype.def).pointertype.def);
|
|
||||||
hsym:=searchsym_in_class(classh,pattern);
|
|
||||||
check_hints(hsym);
|
|
||||||
if hsym=nil then
|
|
||||||
begin
|
|
||||||
Message1(sym_e_id_no_member,pattern);
|
|
||||||
p1.destroy;
|
|
||||||
p1:=cerrornode.create;
|
|
||||||
{ try to clean up }
|
|
||||||
consume(_ID);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
consume(_ID);
|
|
||||||
do_member_read(classh,getaddr,hsym,p1,again,[]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
objectdef:
|
|
||||||
begin
|
|
||||||
store_static:=allow_only_static;
|
|
||||||
allow_only_static:=false;
|
|
||||||
classh:=tobjectdef(p1.resulttype.def);
|
|
||||||
hsym:=searchsym_in_class(classh,pattern);
|
|
||||||
check_hints(hsym);
|
check_hints(hsym);
|
||||||
allow_only_static:=store_static;
|
if assigned(hsym) and
|
||||||
if hsym=nil then
|
(hsym.typ=varsym) then
|
||||||
|
p1:=csubscriptnode.create(hsym,p1)
|
||||||
|
else
|
||||||
begin
|
begin
|
||||||
|
Message1(sym_e_illegal_field,pattern);
|
||||||
|
p1.destroy;
|
||||||
|
p1:=cerrornode.create;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
consume(_ID);
|
||||||
|
end;
|
||||||
|
variantdef:
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
classrefdef:
|
||||||
|
begin
|
||||||
|
if token=_ID then
|
||||||
|
begin
|
||||||
|
classh:=tobjectdef(tclassrefdef(p1.resulttype.def).pointertype.def);
|
||||||
|
hsym:=searchsym_in_class(classh,pattern);
|
||||||
|
check_hints(hsym);
|
||||||
|
if hsym=nil then
|
||||||
|
begin
|
||||||
Message1(sym_e_id_no_member,pattern);
|
Message1(sym_e_id_no_member,pattern);
|
||||||
p1.destroy;
|
p1.destroy;
|
||||||
p1:=cerrornode.create;
|
p1:=cerrornode.create;
|
||||||
{ try to clean up }
|
{ try to clean up }
|
||||||
consume(_ID);
|
consume(_ID);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
consume(_ID);
|
consume(_ID);
|
||||||
do_member_read(classh,getaddr,hsym,p1,again,[]);
|
do_member_read(classh,getaddr,hsym,p1,again,[]);
|
||||||
end;
|
end;
|
||||||
end;
|
end
|
||||||
|
else { Error }
|
||||||
pointerdef:
|
Consume(_ID);
|
||||||
begin
|
end;
|
||||||
Message(parser_e_invalid_qualifier);
|
objectdef:
|
||||||
if tpointerdef(p1.resulttype.def).pointertype.def.deftype in [recorddef,objectdef,classrefdef] then
|
begin
|
||||||
Message(parser_h_maybe_deref_caret_missing);
|
if token=_ID then
|
||||||
end;
|
begin
|
||||||
|
store_static:=allow_only_static;
|
||||||
else
|
allow_only_static:=false;
|
||||||
begin
|
classh:=tobjectdef(p1.resulttype.def);
|
||||||
Message(parser_e_invalid_qualifier);
|
hsym:=searchsym_in_class(classh,pattern);
|
||||||
p1.destroy;
|
check_hints(hsym);
|
||||||
p1:=cerrornode.create;
|
allow_only_static:=store_static;
|
||||||
consume(_ID);
|
if hsym=nil then
|
||||||
end;
|
begin
|
||||||
|
Message1(sym_e_id_no_member,pattern);
|
||||||
|
p1.destroy;
|
||||||
|
p1:=cerrornode.create;
|
||||||
|
{ try to clean up }
|
||||||
|
consume(_ID);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
consume(_ID);
|
||||||
|
do_member_read(classh,getaddr,hsym,p1,again,[]);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else { Error }
|
||||||
|
Consume(_ID);
|
||||||
|
end;
|
||||||
|
pointerdef:
|
||||||
|
begin
|
||||||
|
Message(parser_e_invalid_qualifier);
|
||||||
|
if tpointerdef(p1.resulttype.def).pointertype.def.deftype in [recorddef,objectdef,classrefdef] then
|
||||||
|
Message(parser_h_maybe_deref_caret_missing);
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Message(parser_e_invalid_qualifier);
|
||||||
|
p1.destroy;
|
||||||
|
p1:=cerrornode.create;
|
||||||
|
{ Error }
|
||||||
|
consume(_ID);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2492,7 +2503,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.169 2004-11-01 15:32:12 peter
|
Revision 1.170 2004-11-04 17:57:58 peter
|
||||||
|
added checking for token=_ID after _POINT is parsed
|
||||||
|
|
||||||
|
Revision 1.169 2004/11/01 15:32:12 peter
|
||||||
* support @labelsym
|
* support @labelsym
|
||||||
|
|
||||||
Revision 1.168 2004/11/01 10:33:01 peter
|
Revision 1.168 2004/11/01 10:33:01 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user