mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 20:52:09 +01:00 
			
		
		
		
	* fixed small tp7 things
* boolean:=longbool and longbool fixed
This commit is contained in:
		
							parent
							
								
									ef7da87e66
								
							
						
					
					
						commit
						7c2bb05a9a
					
				| @ -146,307 +146,332 @@ implementation | |||||||
|        { we walk the wanted (def_to) types and check then the def_from |        { we walk the wanted (def_to) types and check then the def_from | ||||||
|          types if there is a conversion possible } |          types if there is a conversion possible } | ||||||
|          case def_to^.deftype of |          case def_to^.deftype of | ||||||
|              orddef : begin |            orddef : | ||||||
|                         if (def_from^.deftype=orddef) then |              begin | ||||||
|                          begin |                if (def_from^.deftype=orddef) then | ||||||
|                            doconv:=basedefconverts[porddef(def_from)^.typ,porddef(def_to)^.typ]; |                 begin | ||||||
|                            if (doconv<>tc_not_possible) and |                   doconv:=basedefconverts[porddef(def_from)^.typ,porddef(def_to)^.typ]; | ||||||
|                               (explicit or not(doconv in [tc_int_2_bool])) then |                   b:=true; | ||||||
|                              b:=true; |                   if (doconv=tc_not_possible) or | ||||||
|  |                      ((doconv=tc_int_2_bool) and | ||||||
|  |                       (not explicit) and | ||||||
|  |                       (not is_boolean(def_from))) then | ||||||
|  |                    b:=true; | ||||||
|  |                 end; | ||||||
|  |              end; | ||||||
|  | 
 | ||||||
|  |           stringdef : | ||||||
|  |              begin | ||||||
|  |                case def_from^.deftype of | ||||||
|  |                 stringdef : begin | ||||||
|  |                               doconv:=tc_string_to_string; | ||||||
|  |                               b:=true; | ||||||
|  |                             end; | ||||||
|  |                    orddef : begin | ||||||
|  |                             { char to string} | ||||||
|  |                               if is_equal(def_from,cchardef) then | ||||||
|  |                                begin | ||||||
|  |                                  doconv:=tc_char_to_string; | ||||||
|  |                                  b:=true; | ||||||
|  |                                end; | ||||||
|  |                             end; | ||||||
|  |                  arraydef : begin | ||||||
|  |                             { string to array of char, the length check is done by the firstpass of this node } | ||||||
|  |                               if is_equal(parraydef(def_from)^.definition,cchardef) then | ||||||
|  |                                begin | ||||||
|  |                                  doconv:=tc_chararray_2_string; | ||||||
|  |                                  b:=true; | ||||||
|  |                                end; | ||||||
|  |                             end; | ||||||
|  |                pointerdef : begin | ||||||
|  |                             { pchar can be assigned to short/ansistrings } | ||||||
|  |                               if is_pchar(def_from) then | ||||||
|  |                                begin | ||||||
|  |                                  doconv:=tc_pchar_2_string; | ||||||
|  |                                  b:=true; | ||||||
|  |                                end; | ||||||
|  |                             end; | ||||||
|  |                end; | ||||||
|  |              end; | ||||||
|  | 
 | ||||||
|  |            floatdef : | ||||||
|  |              begin | ||||||
|  |                case def_from^.deftype of | ||||||
|  |                 orddef : begin { ordinal to real } | ||||||
|  |                            if pfloatdef(def_to)^.typ=f32bit then | ||||||
|  |                             doconv:=tc_int_2_fix | ||||||
|  |                            else | ||||||
|  |                             doconv:=tc_int_2_real; | ||||||
|  |                            b:=true; | ||||||
|                          end; |                          end; | ||||||
|                       end; |               floatdef : begin { 2 float types ? } | ||||||
|           stringdef : begin |                            if pfloatdef(def_from)^.typ=pfloatdef(def_to)^.typ then | ||||||
|                         case def_from^.deftype of |                              doconv:=tc_equal | ||||||
|                          stringdef : begin |                            else | ||||||
|                                        doconv:=tc_string_to_string; |                              begin | ||||||
|                                        b:=true; |                                 if pfloatdef(def_from)^.typ=f32bit then | ||||||
|                                      end; |                                   doconv:=tc_fix_2_real | ||||||
|                             orddef : begin |                                 else | ||||||
|                                      { char to string} |                                   if pfloatdef(def_to)^.typ=f32bit then | ||||||
|                                        if is_equal(def_from,cchardef) then |                                     doconv:=tc_real_2_fix | ||||||
|                                         begin |                                   else | ||||||
|                                           doconv:=tc_char_to_string; |                                     doconv:=tc_real_2_real; | ||||||
|                                           b:=true; |                                 { comp isn't a floating type } | ||||||
|                                         end; |  | ||||||
|                                      end; |  | ||||||
|                           arraydef : begin |  | ||||||
|                                      { string to array of char, the length check is done by the firstpass of this node } |  | ||||||
|                                        if is_equal(parraydef(def_from)^.definition,cchardef) then |  | ||||||
|                                         begin |  | ||||||
|                                           doconv:=tc_chararray_2_string; |  | ||||||
|                                           b:=true; |  | ||||||
|                                         end; |  | ||||||
|                                      end; |  | ||||||
|                         pointerdef : begin |  | ||||||
|                                      { pchar can be assigned to short/ansistrings } |  | ||||||
|                                        if is_pchar(def_from) then |  | ||||||
|                                         begin |  | ||||||
|                                           doconv:=tc_pchar_2_string; |  | ||||||
|                                           b:=true; |  | ||||||
|                                         end; |  | ||||||
|                                      end; |  | ||||||
|                         end; |  | ||||||
|                       end; |  | ||||||
|            floatdef : begin |  | ||||||
|                         case def_from^.deftype of |  | ||||||
|                          orddef : begin { ordinal to real } |  | ||||||
|                                     if pfloatdef(def_to)^.typ=f32bit then |  | ||||||
|                                      doconv:=tc_int_2_fix |  | ||||||
|                                     else |  | ||||||
|                                      doconv:=tc_int_2_real; |  | ||||||
|                                     b:=true; |  | ||||||
|                                   end; |  | ||||||
|                        floatdef : begin { 2 float types ? } |  | ||||||
|                                     if pfloatdef(def_from)^.typ=pfloatdef(def_to)^.typ then |  | ||||||
|                                       doconv:=tc_equal |  | ||||||
|                                     else |  | ||||||
|                                       begin |  | ||||||
|                                          if pfloatdef(def_from)^.typ=f32bit then |  | ||||||
|                                            doconv:=tc_fix_2_real |  | ||||||
|                                          else |  | ||||||
|                                            if pfloatdef(def_to)^.typ=f32bit then |  | ||||||
|                                              doconv:=tc_real_2_fix |  | ||||||
|                                            else |  | ||||||
|                                              doconv:=tc_real_2_real; |  | ||||||
|                                          { comp isn't a floating type } |  | ||||||
| {$ifdef i386} | {$ifdef i386} | ||||||
|                                          if (pfloatdef(def_to)^.typ=s64bit) and |                                 if (pfloatdef(def_to)^.typ=s64bit) and | ||||||
|                                             (pfloatdef(def_from)^.typ<>s64bit) and |                                    (pfloatdef(def_from)^.typ<>s64bit) and | ||||||
|                                             not (explicit) then |                                    not (explicit) then | ||||||
|                                            CGMessage(type_w_convert_real_2_comp); |                                   CGMessage(type_w_convert_real_2_comp); | ||||||
| {$endif} | {$endif} | ||||||
|                                       end; |                              end; | ||||||
|                                     b:=true; |  | ||||||
|                                   end; |  | ||||||
|                         end; |  | ||||||
|                       end; |  | ||||||
|             enumdef : begin |  | ||||||
|                         if (def_from^.deftype=enumdef) then |  | ||||||
|                          begin |  | ||||||
|                            if assigned(penumdef(def_from)^.basedef) then |  | ||||||
|                             hd1:=penumdef(def_from)^.basedef |  | ||||||
|                            else |  | ||||||
|                             hd1:=def_from; |  | ||||||
|                            if assigned(penumdef(def_to)^.basedef) then |  | ||||||
|                             hd2:=penumdef(def_to)^.basedef |  | ||||||
|                            else |  | ||||||
|                             hd2:=def_to; |  | ||||||
|                            b:=(hd1=hd2); |  | ||||||
|                          end; |  | ||||||
|                       end; |  | ||||||
|            arraydef : begin |  | ||||||
|                       { open array is also compatible with a single element of its base type } |  | ||||||
|                         if is_open_array(def_to) and |  | ||||||
|                            is_equal(parraydef(def_to)^.definition,def_from) then |  | ||||||
|                          begin |  | ||||||
|                            doconv:=tc_equal; |  | ||||||
|                            b:=true; |                            b:=true; | ||||||
|                          end |                          end; | ||||||
|                         else |                end; | ||||||
|                          begin |              end; | ||||||
|                            case def_from^.deftype of | 
 | ||||||
|                             pointerdef : begin |            enumdef : | ||||||
|                                            if (parraydef(def_to)^.lowrange=0) and |              begin | ||||||
|                                               is_equal(ppointerdef(def_from)^.definition,parraydef(def_to)^.definition) then |                if (def_from^.deftype=enumdef) then | ||||||
|                                             begin |                 begin | ||||||
|                                               doconv:=tc_pointer_to_array; |                   if assigned(penumdef(def_from)^.basedef) then | ||||||
|                                               b:=true; |                    hd1:=penumdef(def_from)^.basedef | ||||||
|                                             end; |                   else | ||||||
|                                          end; |                    hd1:=def_from; | ||||||
|                              stringdef : begin |                   if assigned(penumdef(def_to)^.basedef) then | ||||||
|                                            { array of char to string } |                    hd2:=penumdef(def_to)^.basedef | ||||||
|                                            if is_equal(parraydef(def_to)^.definition,cchardef) then |                   else | ||||||
|                                             begin |                    hd2:=def_to; | ||||||
|                                               doconv:=tc_string_chararray; |                   b:=(hd1=hd2); | ||||||
|                                               b:=true; |                 end; | ||||||
|                                             end; |              end; | ||||||
|                                          end; | 
 | ||||||
|  |            arraydef : | ||||||
|  |              begin | ||||||
|  |              { open array is also compatible with a single element of its base type } | ||||||
|  |                if is_open_array(def_to) and | ||||||
|  |                   is_equal(parraydef(def_to)^.definition,def_from) then | ||||||
|  |                 begin | ||||||
|  |                   doconv:=tc_equal; | ||||||
|  |                   b:=true; | ||||||
|  |                 end | ||||||
|  |                else | ||||||
|  |                 begin | ||||||
|  |                   case def_from^.deftype of | ||||||
|  |                    pointerdef : begin | ||||||
|  |                                   if (parraydef(def_to)^.lowrange=0) and | ||||||
|  |                                      is_equal(ppointerdef(def_from)^.definition,parraydef(def_to)^.definition) then | ||||||
|  |                                    begin | ||||||
|  |                                      doconv:=tc_pointer_to_array; | ||||||
|  |                                      b:=true; | ||||||
|  |                                    end; | ||||||
|  |                                 end; | ||||||
|  |                     stringdef : begin | ||||||
|  |                                   { array of char to string } | ||||||
|  |                                   if is_equal(parraydef(def_to)^.definition,cchardef) then | ||||||
|  |                                    begin | ||||||
|  |                                      doconv:=tc_string_chararray; | ||||||
|  |                                      b:=true; | ||||||
|  |                                    end; | ||||||
|  |                                 end; | ||||||
|  |                   end; | ||||||
|  |                 end; | ||||||
|  |              end; | ||||||
|  | 
 | ||||||
|  |            pointerdef : | ||||||
|  |              begin | ||||||
|  |                case def_from^.deftype of | ||||||
|  |                stringdef : begin | ||||||
|  |                              { string constant to zero terminated string constant } | ||||||
|  |                              if (fromtreetype=stringconstn) and | ||||||
|  |                                 is_pchar(def_to) then | ||||||
|  |                               begin | ||||||
|  |                                 doconv:=tc_cstring_charpointer; | ||||||
|  |                                 b:=true; | ||||||
|  |                               end; | ||||||
|                            end; |                            end; | ||||||
|                          end; |                   orddef : begin | ||||||
|                       end; |                              { char constant to zero terminated string constant } | ||||||
|          pointerdef : begin |                              if (fromtreetype=ordconstn) and is_equal(def_from,cchardef) and | ||||||
|                         case def_from^.deftype of |                                  is_pchar(def_to) then | ||||||
|                         stringdef : begin |                               begin | ||||||
|                                       { string constant to zero terminated string constant } |                                 doconv:=tc_cchar_charpointer; | ||||||
|                                       if (fromtreetype=stringconstn) and |                                 b:=true; | ||||||
|                                          is_pchar(def_to) then |                               end; | ||||||
|                                        begin |                            end; | ||||||
|                                          doconv:=tc_cstring_charpointer; |                 arraydef : begin | ||||||
|                                          b:=true; |                              { chararray to pointer } | ||||||
|                                        end; |                              if (parraydef(def_from)^.lowrange=0) and | ||||||
|                                     end; |                                 is_equal(parraydef(def_from)^.definition,ppointerdef(def_to)^.definition) then | ||||||
|                            orddef : begin |                               begin | ||||||
|                                       { char constant to zero terminated string constant } |                                 doconv:=tc_array_to_pointer; | ||||||
|                                       if (fromtreetype=ordconstn) and is_equal(def_from,cchardef) and |                                 b:=true; | ||||||
|                                           is_pchar(def_to) then |                               end; | ||||||
|                                        begin |                            end; | ||||||
|                                          doconv:=tc_cchar_charpointer; |               pointerdef : begin | ||||||
|                                          b:=true; |                              { child class pointer can be assigned to anchestor pointers } | ||||||
|                                        end; |                              if ( | ||||||
|                                     end; |                                  (ppointerdef(def_from)^.definition^.deftype=objectdef) and | ||||||
|                          arraydef : begin |                                  (ppointerdef(def_to)^.definition^.deftype=objectdef) and | ||||||
|                                       { chararray to pointer } |                                  pobjectdef(ppointerdef(def_from)^.definition)^.isrelated( | ||||||
|                                       if (parraydef(def_from)^.lowrange=0) and |                                    pobjectdef(ppointerdef(def_to)^.definition)) | ||||||
|                                          is_equal(parraydef(def_from)^.definition,ppointerdef(def_to)^.definition) then |                                 ) or | ||||||
|                                        begin |                                 { all pointers can be assigned to void-pointer } | ||||||
|                                          doconv:=tc_array_to_pointer; |                                 is_equal(ppointerdef(def_to)^.definition,voiddef) or | ||||||
|                                          b:=true; |                                 { in my opnion, is this not clean pascal } | ||||||
|                                        end; |                                 { well, but it's handy to use, it isn't ? (FK) } | ||||||
|                                     end; |                                 is_equal(ppointerdef(def_from)^.definition,voiddef) then | ||||||
|                        pointerdef : begin |                                begin | ||||||
|                                       { child class pointer can be assigned to anchestor pointers } |                                  doconv:=tc_equal; | ||||||
|                                       if ( |                                  b:=true; | ||||||
|                                           (ppointerdef(def_from)^.definition^.deftype=objectdef) and |                                end; | ||||||
|                                           (ppointerdef(def_to)^.definition^.deftype=objectdef) and |                            end; | ||||||
|                                           pobjectdef(ppointerdef(def_from)^.definition)^.isrelated( |               procvardef : begin | ||||||
|                                             pobjectdef(ppointerdef(def_to)^.definition)) |                              { procedure variable can be assigned to an void pointer } | ||||||
|                                          ) or |                              { Not anymore. Use the @ operator now.} | ||||||
|                                          { all pointers can be assigned to void-pointer } |                              if not(m_tp_procvar in aktmodeswitches) and | ||||||
|                                          is_equal(ppointerdef(def_to)^.definition,voiddef) or |                                 (ppointerdef(def_to)^.definition^.deftype=orddef) and | ||||||
|                                          { in my opnion, is this not clean pascal } |                                 (porddef(ppointerdef(def_to)^.definition)^.typ=uvoid) then | ||||||
|                                          { well, but it's handy to use, it isn't ? (FK) } |                               begin | ||||||
|                                          is_equal(ppointerdef(def_from)^.definition,voiddef) then |                                 doconv:=tc_equal; | ||||||
|                                         begin |                                 b:=true; | ||||||
|                                           doconv:=tc_equal; |                               end; | ||||||
|                                           b:=true; |                            end; | ||||||
|                                         end; |              classrefdef, | ||||||
|                                     end; |                objectdef : begin | ||||||
|                        procvardef : begin |                              { class types and class reference type | ||||||
|                                       { procedure variable can be assigned to an void pointer } |                                can be assigned to void pointers      } | ||||||
|                                       { Not anymore. Use the @ operator now.} |                              if ( | ||||||
|                                       if not(m_tp_procvar in aktmodeswitches) and |                                  ((def_from^.deftype=objectdef) and pobjectdef(def_from)^.isclass) or | ||||||
|                                          (ppointerdef(def_to)^.definition^.deftype=orddef) and |                                  (def_from^.deftype=classrefdef) | ||||||
|                                          (porddef(ppointerdef(def_to)^.definition)^.typ=uvoid) then |                                 ) and | ||||||
|                                        begin |                                 (ppointerdef(def_to)^.definition^.deftype=orddef) and | ||||||
|                                          doconv:=tc_equal; |                                 (porddef(ppointerdef(def_to)^.definition)^.typ=uvoid) then | ||||||
|                                          b:=true; |                                begin | ||||||
|                                        end; |                                  doconv:=tc_equal; | ||||||
|                                     end; |                                  b:=true; | ||||||
|                       classrefdef, |                                end; | ||||||
|                         objectdef : begin |                            end; | ||||||
|                                       { class types and class reference type |                end; | ||||||
|                                         can be assigned to void pointers      } |              end; | ||||||
|                                       if ( | 
 | ||||||
|                                           ((def_from^.deftype=objectdef) and pobjectdef(def_from)^.isclass) or |            setdef : | ||||||
|                                           (def_from^.deftype=classrefdef) |              begin | ||||||
|                                          ) and |                { automatic arrayconstructor -> set conversion } | ||||||
|                                          (ppointerdef(def_to)^.definition^.deftype=orddef) and |                if (def_from^.deftype=arraydef) and (parraydef(def_from)^.IsConstructor) then | ||||||
|                                          (porddef(ppointerdef(def_to)^.definition)^.typ=uvoid) then |                 begin | ||||||
|                                         begin |                   doconv:=tc_arrayconstructor_2_set; | ||||||
|                                           doconv:=tc_equal; |                   b:=true; | ||||||
|                                           b:=true; |                 end; | ||||||
|                                         end; |              end; | ||||||
|                                     end; | 
 | ||||||
|                         end; |            procvardef : | ||||||
|                       end; |              begin | ||||||
|              setdef : begin |                { proc -> procvar } | ||||||
|                         { automatic arrayconstructor -> set conversion } |                if (def_from^.deftype=procdef) then | ||||||
|                         if (def_from^.deftype=arraydef) and (parraydef(def_from)^.IsConstructor) then |                 begin | ||||||
|                          begin |                   def_from^.deftype:=procvardef; | ||||||
|                            doconv:=tc_arrayconstructor_2_set; |                   doconv:=tc_proc2procvar; | ||||||
|                            b:=true; |                   b:=is_equal(def_from,def_to); | ||||||
|                          end; |                   def_from^.deftype:=procdef; | ||||||
|                       end; |                 end | ||||||
|          procvardef : begin |                else | ||||||
|                         { proc -> procvar } |                 { for example delphi allows the assignement from pointers } | ||||||
|                         if (def_from^.deftype=procdef) then |                 { to procedure variables                                  } | ||||||
|                          begin |                 if (m_pointer_2_procedure in aktmodeswitches) and | ||||||
|                            def_from^.deftype:=procvardef; |                   (def_from^.deftype=pointerdef) and | ||||||
|                            doconv:=tc_proc2procvar; |                   (ppointerdef(def_from)^.definition^.deftype=orddef) and | ||||||
|                            b:=is_equal(def_from,def_to); |                   (porddef(ppointerdef(def_from)^.definition)^.typ=uvoid) then | ||||||
|                            def_from^.deftype:=procdef; |                 begin | ||||||
|                          end |                    doconv:=tc_equal; | ||||||
|                         else |                    b:=true; | ||||||
|                          { for example delphi allows the assignement from pointers } |                 end | ||||||
|                          { to procedure variables                                  } |                else | ||||||
|                          if (m_pointer_2_procedure in aktmodeswitches) and |                { nil is compatible with procvars } | ||||||
|                            (def_from^.deftype=pointerdef) and |                 if (fromtreetype=niln) then | ||||||
|                            (ppointerdef(def_from)^.definition^.deftype=orddef) and |                  begin | ||||||
|                            (porddef(ppointerdef(def_from)^.definition)^.typ=uvoid) then |                    doconv:=tc_equal; | ||||||
|                          begin |                    b:=true; | ||||||
|                             doconv:=tc_equal; |                  end; | ||||||
|                             b:=true; |              end; | ||||||
|                          end | 
 | ||||||
|                         else |            objectdef : | ||||||
|                         { nil is compatible with procvars } |              begin | ||||||
|                          if (fromtreetype=niln) then |                { object pascal objects } | ||||||
|                           begin |                if (def_from^.deftype=objectdef) {and | ||||||
|                             doconv:=tc_equal; |                   pobjectdef(def_from)^.isclass and pobjectdef(def_to)^.isclass }then | ||||||
|                             b:=true; |                 begin | ||||||
|                           end; |                   doconv:=tc_equal; | ||||||
|                       end; |                   b:=pobjectdef(def_from)^.isrelated(pobjectdef(def_to)); | ||||||
|           objectdef : begin |                 end | ||||||
|                         { object pascal objects } |                else | ||||||
|                         if (def_from^.deftype=objectdef) {and |                 { nil is compatible with class instances } | ||||||
|                            pobjectdef(def_from)^.isclass and pobjectdef(def_to)^.isclass }then |                 if (fromtreetype=niln) and (pobjectdef(def_to)^.isclass) then | ||||||
|                          begin |                  begin | ||||||
|                            doconv:=tc_equal; |                    doconv:=tc_equal; | ||||||
|                            b:=pobjectdef(def_from)^.isrelated(pobjectdef(def_to)); |                    b:=true; | ||||||
|                          end |                  end; | ||||||
|                         else |              end; | ||||||
|                          { nil is compatible with class instances } | 
 | ||||||
|                          if (fromtreetype=niln) and (pobjectdef(def_to)^.isclass) then |            classrefdef : | ||||||
|                           begin |              begin | ||||||
|                             doconv:=tc_equal; |                { class reference types } | ||||||
|                             b:=true; |                if (def_from^.deftype=classrefdef) then | ||||||
|                           end; |                 begin | ||||||
|                       end; |                   doconv:=tc_equal; | ||||||
|         classrefdef : begin |                   b:=pobjectdef(pclassrefdef(def_from)^.definition)^.isrelated( | ||||||
|                         { class reference types } |                        pobjectdef(pclassrefdef(def_to)^.definition)); | ||||||
|                         if (def_from^.deftype=classrefdef) then |                 end | ||||||
|                          begin |                else | ||||||
|                            doconv:=tc_equal; |                 { nil is compatible with class references } | ||||||
|                            b:=pobjectdef(pclassrefdef(def_from)^.definition)^.isrelated( |                 if (fromtreetype=niln) then | ||||||
|                                 pobjectdef(pclassrefdef(def_to)^.definition)); |                  begin | ||||||
|                          end |                    doconv:=tc_equal; | ||||||
|                         else |                    b:=true; | ||||||
|                          { nil is compatible with class references } |                  end; | ||||||
|                          if (fromtreetype=niln) then |              end; | ||||||
|                           begin | 
 | ||||||
|                             doconv:=tc_equal; |            filedef : | ||||||
|                             b:=true; |              begin | ||||||
|                           end; |                { typed files are all equal to the abstract file type | ||||||
|                       end; |                name TYPEDFILE in system.pp in is_equal in types.pas | ||||||
|             filedef : begin |                the problem is that it sholud be also compatible to FILE | ||||||
|                         { typed files are all equal to the abstract file type |                but this would leed to a problem for ASSIGN RESET and REWRITE | ||||||
|                         name TYPEDFILE in system.pp in is_equal in types.pas |                when trying to find the good overloaded function !! | ||||||
|                         the problem is that it sholud be also compatible to FILE |                so all file function are doubled in system.pp | ||||||
|                         but this would leed to a problem for ASSIGN RESET and REWRITE |                this is not very beautiful !!} | ||||||
|                         when trying to find the good overloaded function !! |                if (def_from^.deftype=filedef) and | ||||||
|                         so all file function are doubled in system.pp |                   ( | ||||||
|                         this is not very beautiful !!} |                    ( | ||||||
|                         if (def_from^.deftype=filedef) and |                     (pfiledef(def_from)^.filetype = ft_typed) and | ||||||
|                            ( |                     (pfiledef(def_to)^.filetype = ft_typed) and | ||||||
|                             ( |                     ( | ||||||
|                              (pfiledef(def_from)^.filetype = ft_typed) and |                      (pfiledef(def_from)^.typed_as = pdef(voiddef)) or | ||||||
|                              (pfiledef(def_to)^.filetype = ft_typed) and |                      (pfiledef(def_to)^.typed_as = pdef(voiddef)) | ||||||
|                              ( |                     ) | ||||||
|                               (pfiledef(def_from)^.typed_as = pdef(voiddef)) or |                    ) or | ||||||
|                               (pfiledef(def_to)^.typed_as = pdef(voiddef)) |                    ( | ||||||
|                              ) |                     ( | ||||||
|                             ) or |                      (pfiledef(def_from)^.filetype = ft_untyped) and | ||||||
|                             ( |                      (pfiledef(def_to)^.filetype = ft_typed) | ||||||
|                              ( |                     ) or | ||||||
|                               (pfiledef(def_from)^.filetype = ft_untyped) and |                     ( | ||||||
|                               (pfiledef(def_to)^.filetype = ft_typed) |                      (pfiledef(def_from)^.filetype = ft_typed) and | ||||||
|                              ) or |                      (pfiledef(def_to)^.filetype = ft_untyped) | ||||||
|                              ( |                     ) | ||||||
|                               (pfiledef(def_from)^.filetype = ft_typed) and |                    ) | ||||||
|                               (pfiledef(def_to)^.filetype = ft_untyped) |                   ) then | ||||||
|                              ) |                  begin | ||||||
|                             ) |                     doconv:=tc_equal; | ||||||
|                            ) then |                     b:=true; | ||||||
|                           begin |                  end | ||||||
|                              doconv:=tc_equal; |              end; | ||||||
|                              b:=true; | 
 | ||||||
|                           end |            else | ||||||
|                       end; |              begin | ||||||
|          else |              { assignment overwritten ?? } | ||||||
|            begin |                if is_assignment_overloaded(def_from,def_to) then | ||||||
|            { assignment overwritten ?? } |                 b:=true; | ||||||
|              if is_assignment_overloaded(def_from,def_to) then |              end; | ||||||
|               b:=true; |  | ||||||
|            end; |  | ||||||
|          end; |          end; | ||||||
| 
 | 
 | ||||||
|            { nil is compatible with ansi- and wide strings } |            { nil is compatible with ansi- and wide strings } | ||||||
| @ -650,7 +675,11 @@ implementation | |||||||
| end. | end. | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.5  1998-10-12 09:49:58  florian |   Revision 1.6  1998-10-14 12:53:38  peter | ||||||
|  |     * fixed small tp7 things | ||||||
|  |     * boolean:=longbool and longbool fixed | ||||||
|  | 
 | ||||||
|  |   Revision 1.5  1998/10/12 09:49:58  florian | ||||||
|     + support of <procedure var type>:=<pointer> in delphi mode added |     + support of <procedure var type>:=<pointer> in delphi mode added | ||||||
| 
 | 
 | ||||||
|   Revision 1.4  1998/09/30 16:42:52  peter |   Revision 1.4  1998/09/30 16:42:52  peter | ||||||
|  | |||||||
| @ -379,6 +379,7 @@ implementation | |||||||
|                 case p^.treetype of |                 case p^.treetype of | ||||||
|              andn,orn : begin |              andn,orn : begin | ||||||
|                           calcregisters(p,0,0,0); |                           calcregisters(p,0,0,0); | ||||||
|  |                           make_bool_equal_size(p); | ||||||
|                           p^.location.loc:=LOC_JUMP; |                           p^.location.loc:=LOC_JUMP; | ||||||
|                         end; |                         end; | ||||||
|              unequaln, |              unequaln, | ||||||
| @ -406,7 +407,6 @@ implementation | |||||||
|                                       p^.treetype:=equaln; |                                       p^.treetype:=equaln; | ||||||
|                                  end; |                                  end; | ||||||
|                             end; |                             end; | ||||||
| 
 |  | ||||||
|                           make_bool_equal_size(p); |                           make_bool_equal_size(p); | ||||||
|                           calcregisters(p,1,0,0); |                           calcregisters(p,1,0,0); | ||||||
|                         end |                         end | ||||||
| @ -905,7 +905,11 @@ implementation | |||||||
| end. | end. | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.3  1998-10-11 14:31:19  peter |   Revision 1.4  1998-10-14 12:53:39  peter | ||||||
|  |     * fixed small tp7 things | ||||||
|  |     * boolean:=longbool and longbool fixed | ||||||
|  | 
 | ||||||
|  |   Revision 1.3  1998/10/11 14:31:19  peter | ||||||
|     + checks for division by zero |     + checks for division by zero | ||||||
| 
 | 
 | ||||||
|   Revision 1.2  1998/10/05 21:33:31  peter |   Revision 1.2  1998/10/05 21:33:31  peter | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 peter
						peter