From f3e9e7a24fee478f2176c110c82006740ce84d58 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 6 Sep 2003 22:27:08 +0000 Subject: [PATCH] * fixed web bug #2669 * cosmetic fix in printnode * tobjectdef.gettypename implemented --- compiler/ncal.pas | 15 ++++++++++----- compiler/ncnv.pas | 18 ++++++++++++++++-- compiler/nmem.pas | 8 ++++++-- compiler/node.pas | 13 +++++++++---- compiler/pexpr.pas | 9 +++++++-- compiler/symdef.pas | 14 +++++++++++++- 6 files changed, 61 insertions(+), 16 deletions(-) diff --git a/compiler/ncal.pas b/compiler/ncal.pas index f533689416..9d5af64b3e 100644 --- a/compiler/ncal.pas +++ b/compiler/ncal.pas @@ -2218,10 +2218,10 @@ type if not assigned(methodpointer) then internalerror(200305063); if (methodpointer.resulttype.def.deftype<>classrefdef) then - begin - methodpointer:=cloadvmtaddrnode.create(methodpointer); - resulttypepass(methodpointer); - end; + begin + methodpointer:=cloadvmtaddrnode.create(methodpointer); + resulttypepass(methodpointer); + end; end else begin @@ -2514,7 +2514,12 @@ begin end. { $Log$ - Revision 1.177 2003-09-03 15:55:00 peter + Revision 1.178 2003-09-06 22:27:08 florian + * fixed web bug 2669 + * cosmetic fix in printnode + * tobjectdef.gettypename implemented + + Revision 1.177 2003/09/03 15:55:00 peter * NEWRA branch merged Revision 1.176.2.3 2003/08/31 21:07:44 daniel diff --git a/compiler/ncnv.pas b/compiler/ncnv.pas index 4bcaa0de00..a9ee528045 100644 --- a/compiler/ncnv.pas +++ b/compiler/ncnv.pas @@ -1173,7 +1173,16 @@ implementation if (tcallnode(left).symtableprocentry.owner.symtabletype=objectsymtable) then begin if assigned(tcallnode(left).methodpointer) then - tloadnode(hp).set_mp(tcallnode(left).methodpointer.getcopy) + begin + { Under certain circumstances the methodpointer is a loadvmtaddrn + which isn't possible if it is used as a method pointer, so + fix this. + If you change this, ensure that tests/tbs/tw2669.pp still works } + if tcallnode(left).methodpointer.nodetype=loadvmtaddrn then + tloadnode(hp).set_mp(tloadvmtaddrnode(tcallnode(left).methodpointer).left.getcopy) + else + tloadnode(hp).set_mp(tcallnode(left).methodpointer.getcopy); + end else tloadnode(hp).set_mp(load_self_node); end; @@ -2093,7 +2102,12 @@ begin end. { $Log$ - Revision 1.117 2003-09-03 15:55:01 peter + Revision 1.118 2003-09-06 22:27:08 florian + * fixed web bug 2669 + * cosmetic fix in printnode + * tobjectdef.gettypename implemented + + Revision 1.117 2003/09/03 15:55:01 peter * NEWRA branch merged Revision 1.116 2003/08/10 17:25:23 peter diff --git a/compiler/nmem.pas b/compiler/nmem.pas index 3ac9e7c6de..11974d945f 100644 --- a/compiler/nmem.pas +++ b/compiler/nmem.pas @@ -382,7 +382,6 @@ implementation if not(left.expectloc in [LOC_CREFERENCE,LOC_REFERENCE]) then begin aktfilepos:=left.fileinfo; - printnode(output,left); CGMessage(cg_e_illegal_expression); end; @@ -855,7 +854,12 @@ begin end. { $Log$ - Revision 1.61 2003-09-03 11:18:37 florian + Revision 1.62 2003-09-06 22:27:08 florian + * fixed web bug 2669 + * cosmetic fix in printnode + * tobjectdef.gettypename implemented + + Revision 1.61 2003/09/03 11:18:37 florian * fixed arm concatcopy + arm support in the common compiler sources added * moved some generic cg code around diff --git a/compiler/node.pas b/compiler/node.pas index 102d5e9b2d..75fbca017e 100644 --- a/compiler/node.pas +++ b/compiler/node.pas @@ -609,9 +609,9 @@ implementation begin write(t,nodetype2str[nodetype]); if assigned(resulttype.def) then - write(t,' ,resulttype = "',resulttype.def.gettypename,'"') + write(t,', resulttype = "',resulttype.def.gettypename,'"') else - write(t,' ,resulttype = '); + write(t,', resulttype = '); writeln(t,', pos = (',fileinfo.line,',',fileinfo.column,')', // ', loc = ',tcgloc2str[location.loc], ', expectloc = ',tcgloc2str[expectloc], @@ -975,7 +975,12 @@ implementation end. { $Log$ - Revision 1.65 2003-09-03 15:55:01 peter + Revision 1.66 2003-09-06 22:27:08 florian + * fixed web bug 2669 + * cosmetic fix in printnode + * tobjectdef.gettypename implemented + + Revision 1.65 2003/09/03 15:55:01 peter * NEWRA branch merged Revision 1.64 2003/09/03 11:18:37 florian @@ -1179,4 +1184,4 @@ end. - list field removed of the tnode class because it's not used currently and can cause hard-to-find bugs -} +} \ No newline at end of file diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas index 0e19b8725a..c0c1df841f 100644 --- a/compiler/pexpr.pas +++ b/compiler/pexpr.pas @@ -1297,7 +1297,7 @@ implementation the type. For all other blocks we return a loadvmt node } if (block_type<>bt_type) then - p1:=cloadvmtaddrnode.create(p1); + p1:=cloadvmtaddrnode.create(p1); end; end else @@ -2419,7 +2419,12 @@ implementation end. { $Log$ - Revision 1.127 2003-09-05 17:41:12 florian + Revision 1.128 2003-09-06 22:27:09 florian + * fixed web bug 2669 + * cosmetic fix in printnode + * tobjectdef.gettypename implemented + + Revision 1.127 2003/09/05 17:41:12 florian * merged Wiktor's Watcom patches in 1.1 Revision 1.126 2003/08/23 22:29:51 peter diff --git a/compiler/symdef.pas b/compiler/symdef.pas index 7b7006b407..0ce8f505ff 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -275,6 +275,7 @@ interface constructor ppuload(ppufile:tcompilerppufile); destructor destroy;override; procedure ppuwrite(ppufile:tcompilerppufile);override; + function gettypename:string;override; procedure deref;override; function getparentdef:tdef;override; function size : longint;override; @@ -4523,6 +4524,12 @@ implementation end; + function tobjectdef.gettypename:string; + begin + gettypename:=typename; + end; + + procedure tobjectdef.deref; var oldrecsyms : tsymtable; @@ -5841,7 +5848,12 @@ implementation end. { $Log$ - Revision 1.160 2003-09-03 15:55:01 peter + Revision 1.161 2003-09-06 22:27:09 florian + * fixed web bug 2669 + * cosmetic fix in printnode + * tobjectdef.gettypename implemented + + Revision 1.160 2003/09/03 15:55:01 peter * NEWRA branch merged Revision 1.159 2003/09/03 11:18:37 florian