소스 검색

* fix for operators

pierre 27 년 전
부모
커밋
4a85a1b59e
1개의 변경된 파일15개의 추가작업 그리고 2개의 파일을 삭제
  1. 15 2
      compiler/tccal.pas

+ 15 - 2
compiler/tccal.pas

@@ -757,7 +757,11 @@ implementation
                    p^.procdefinition:=procs^.data;
                    p^.resulttype:=procs^.data^.retdef;
                    { big error for with statements
-                   p^.symtableproc:=p^.procdefinition^.owner; }
+                   p^.symtableproc:=p^.procdefinition^.owner;
+                   but neede for overloaded operators !! }
+                   if p^.symtableproc=nil then
+                     p^.symtableproc:=p^.procdefinition^.owner;
+
                    p^.location.loc:=LOC_MEM;
 {$ifdef CHAINPROCSYMS}
                    { object with method read;
@@ -919,6 +923,12 @@ implementation
                 typen,hnewn : ;
                 else
                   begin
+                     { if ((p^.procdefinition^.options and (poconstructor or podestructor)) <> 0) and
+                        (assigned(p^.symtable) and (p^.symtable^.symtabletype=withsymtable) then
+                       begin
+                          CGmessage(cg_e_cannot_call_cons_dest_inside_with);
+                       end; Is accpeted by Delphi !! }
+
                      { R.Assign is not a constructor !!! }
                      { but for R^.Assign, R must be valid !! }
                      if ((p^.procdefinition^.options and poconstructor) <> 0) or
@@ -983,7 +993,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.15  1998-12-10 09:47:32  florian
+  Revision 1.16  1998-12-10 14:57:52  pierre
+   * fix for operators
+
+  Revision 1.15  1998/12/10 09:47:32  florian
     + basic operations with int64/qord (compiler with -dint64)
     + rtti of enumerations extended: names are now written