* fixed destructor parsing with preprocessor things

* support dipsoe(p,done())
  * fixed constructor message with dispose(p,<nonexist>)
This commit is contained in:
peter 2000-01-23 16:33:49 +00:00
parent 4216d26c2f
commit f16647ede6

View File

@ -819,7 +819,7 @@ unit pstatmnt;
p,p2 : ptree; p,p2 : ptree;
ht : ttoken; ht : ttoken;
again : boolean; { dummy for do_proc_call } again : boolean; { dummy for do_proc_call }
{destrukname : stringid;} destructorname : stringid;
sym : psym; sym : psym;
classh : pobjectdef; classh : pobjectdef;
pd,pd2 : pdef; pd,pd2 : pdef;
@ -854,7 +854,7 @@ unit pstatmnt;
{ extended syntax of new and dispose } { extended syntax of new and dispose }
{ function styled new is handled in factor } { function styled new is handled in factor }
{ destructors have no parameters } { destructors have no parameters }
{destrukname:=pattern;} destructorname:=pattern;
destructorpos:=tokenpos; destructorpos:=tokenpos;
consume(_ID); consume(_ID);
@ -892,13 +892,16 @@ unit pstatmnt;
{ search cons-/destructor, also in parent classes } { search cons-/destructor, also in parent classes }
storepos:=tokenpos; storepos:=tokenpos;
tokenpos:=destructorpos; tokenpos:=destructorpos;
sym:=search_class_member(classh,pattern); sym:=search_class_member(classh,destructorname);
tokenpos:=storepos; tokenpos:=storepos;
{ the second parameter of new/dispose must be a call } { the second parameter of new/dispose must be a call }
{ to a cons-/destructor } { to a cons-/destructor }
if (not assigned(sym)) or (sym^.typ<>procsym) then if (not assigned(sym)) or (sym^.typ<>procsym) then
begin begin
if tt=hnewn then
Message(parser_e_expr_have_to_be_constructor_call)
else
Message(parser_e_expr_have_to_be_destructor_call); Message(parser_e_expr_have_to_be_destructor_call);
new_dispose_statement:=genzeronode(errorn); new_dispose_statement:=genzeronode(errorn);
end end
@ -912,8 +915,19 @@ unit pstatmnt;
do_member_read(false,sym,p2,pd,again); do_member_read(false,sym,p2,pd,again);
end end
else else
{ destructors can't.} begin
p2:=genmethodcallnode(pprocsym(sym),srsymtable,p2); p2:=genmethodcallnode(pprocsym(sym),srsymtable,p2);
{ support dispose(p,done()); }
if try_to_consume(_LKLAMMER) then
begin
if not try_to_consume(_RKLAMMER) then
begin
Message(parser_e_no_paras_for_destructor);
consume_all_until(_RKLAMMER);
consume(_RKLAMMER);
end;
end;
end;
{ we need the real called method } { we need the real called method }
cleartempgen; cleartempgen;
@ -1331,7 +1345,12 @@ unit pstatmnt;
end. end.
{ {
$Log$ $Log$
Revision 1.120 2000-01-16 22:17:12 peter Revision 1.121 2000-01-23 16:33:49 peter
* fixed destructor parsing with preprocessor things
* support dipsoe(p,done())
* fixed constructor message with dispose(p,<nonexist>)
Revision 1.120 2000/01/16 22:17:12 peter
* renamed call_offset to para_offset * renamed call_offset to para_offset
Revision 1.119 2000/01/12 10:30:50 peter Revision 1.119 2000/01/12 10:30:50 peter