فهرست منبع

* procvar is not compared in addrn

peter 22 سال پیش
والد
کامیت
18b1a27d2c
2فایلهای تغییر یافته به همراه25 افزوده شده و 6 حذف شده
  1. 12 4
      compiler/nld.pas
  2. 13 2
      compiler/nmem.pas

+ 12 - 4
compiler/nld.pas

@@ -378,10 +378,14 @@ implementation
                     begin
                     begin
                       if Tprocsym(symtableentry).procdef_count>1 then
                       if Tprocsym(symtableentry).procdef_count>1 then
                        CGMessage(parser_e_no_overloaded_procvars);
                        CGMessage(parser_e_no_overloaded_procvars);
-                      resulttype.setdef(tprocsym(symtableentry).first_procdef);
-                    end
+                      procdef:=tprocsym(symtableentry).first_procdef;
+                    end;
+
+                   { Delphi returns Pointer as type }
+                   if not(m_tp_procvar in aktmodeswitches) then
+                    resulttype.setdef(procdef)
                    else
                    else
-                    resulttype.setdef(procdef);
+                    resulttype:=voidpointertype;
 
 
                    { process methodpointer }
                    { process methodpointer }
                    if assigned(left) then
                    if assigned(left) then
@@ -474,6 +478,7 @@ implementation
                    { method pointer ? }
                    { method pointer ? }
                    if assigned(left) then
                    if assigned(left) then
                      begin
                      begin
+                        expectloc:=LOC_CREFERENCE;
                         firstpass(left);
                         firstpass(left);
                         registers32:=max(registers32,left.registers32);
                         registers32:=max(registers32,left.registers32);
                         registersfpu:=max(registersfpu,left.registersfpu);
                         registersfpu:=max(registersfpu,left.registersfpu);
@@ -1259,7 +1264,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.84  2003-04-22 23:50:23  peter
+  Revision 1.85  2003-04-23 10:10:54  peter
+    * procvar is not compared in addrn
+
+  Revision 1.84  2003/04/22 23:50:23  peter
     * firstpass uses expectloc
     * firstpass uses expectloc
     * checks if there are differences between the expectloc and
     * checks if there are differences between the expectloc and
       location.loc from secondpass in EXTDEBUG
       location.loc from secondpass in EXTDEBUG

+ 13 - 2
compiler/nmem.pas

@@ -401,10 +401,18 @@ implementation
             if not(m_tp_procvar in aktmodeswitches) then
             if not(m_tp_procvar in aktmodeswitches) then
               begin
               begin
                  if assigned(getprocvardef) then
                  if assigned(getprocvardef) then
-                  hp3:=getprocvardef
+                  begin
+                    hp3:=tprocsym(tloadnode(left).symtableentry).search_procdef_byprocvardef(getprocvardef);
+                    if not assigned(hp3)  then
+                     begin
+                       CGMessage2(type_e_incompatible_types,tprocsym(tloadnode(left).symtableentry).first_procdef.typename,getprocvardef.typename);
+                       exit;
+                     end;
+                  end
                  else
                  else
                   hp3:=tabstractprocdef(tprocsym(tloadnode(left).symtableentry).first_procdef);
                   hp3:=tabstractprocdef(tprocsym(tloadnode(left).symtableentry).first_procdef);
 
 
+
                  { create procvardef }
                  { create procvardef }
                  resulttype.setdef(tprocvardef.create);
                  resulttype.setdef(tprocvardef.create);
                  tprocvardef(resulttype.def).proctypeoption:=hp3.proctypeoption;
                  tprocvardef(resulttype.def).proctypeoption:=hp3.proctypeoption;
@@ -1052,7 +1060,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.48  2003-04-22 23:50:23  peter
+  Revision 1.49  2003-04-23 10:10:54  peter
+    * procvar is not compared in addrn
+
+  Revision 1.48  2003/04/22 23:50:23  peter
     * firstpass uses expectloc
     * firstpass uses expectloc
     * checks if there are differences between the expectloc and
     * checks if there are differences between the expectloc and
       location.loc from secondpass in EXTDEBUG
       location.loc from secondpass in EXTDEBUG