浏览代码

* fixed web bug #2669
* cosmetic fix in printnode
* tobjectdef.gettypename implemented

florian 22 年之前
父节点
当前提交
f3e9e7a24f
共有 6 个文件被更改,包括 61 次插入16 次删除
  1. 10 5
      compiler/ncal.pas
  2. 16 2
      compiler/ncnv.pas
  3. 6 2
      compiler/nmem.pas
  4. 9 4
      compiler/node.pas
  5. 7 2
      compiler/pexpr.pas
  6. 13 1
      compiler/symdef.pas

+ 10 - 5
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

+ 16 - 2
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

+ 6 - 2
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

+ 9 - 4
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 = <nil>');
+          write(t,', resulttype = <nil>');
         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
 
-}
+}

+ 7 - 2
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

+ 13 - 1
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