Browse Source

* integer(char) explicit typecast support (tp7,delphi compatible)

peter 25 years ago
parent
commit
b3959f29ed
1 changed files with 28 additions and 7 deletions
  1. 28 7
      compiler/tccnv.pas

+ 28 - 7
compiler/tccnv.pas

@@ -828,7 +828,7 @@ implementation
                  else
                   begin
                     if isconvertable(s32bitdef,p^.resulttype,p^.convtyp,ordconstn,false)=0 then
-                      CGMessage(cg_e_illegal_type_conversion);
+                      CGMessage2(type_e_incompatible_types,p^.left^.resulttype^.typename,p^.resulttype^.typename);
                   end;
                end
 
@@ -848,7 +848,7 @@ implementation
                   else
                    begin
                      if IsConvertable(p^.left^.resulttype,s32bitdef,p^.convtyp,ordconstn,false)=0 then
-                       CGMessage(cg_e_illegal_type_conversion);
+                       CGMessage2(type_e_incompatible_types,p^.left^.resulttype^.typename,p^.resulttype^.typename);
                    end;
                 end
 
@@ -878,10 +878,28 @@ implementation
                     end
                    else
                     begin
-                      { this is wrong because it converts to a 4 byte long var !!
-                      if not isconvertable(p^.left^.resulttype,s32bitdef,p^.convtyp,ordconstn  nur Dummy ) then }
                       if IsConvertable(p^.left^.resulttype,u8bitdef,p^.convtyp,ordconstn,false)=0 then
-                        CGMessage(cg_e_illegal_type_conversion);
+                        CGMessage2(type_e_incompatible_types,p^.left^.resulttype^.typename,p^.resulttype^.typename);
+                    end;
+                 end
+
+              { Are we char to ordinal }
+              else
+                if is_char(p^.left^.resulttype) and
+                   is_ordinal(p^.resulttype) then
+                 begin
+                   if p^.left^.treetype=ordconstn then
+                    begin
+                      hp:=genordinalconstnode(p^.left^.value,p^.resulttype);
+                      firstpass(hp);
+                      disposetree(p);
+                      p:=hp;
+                      exit;
+                    end
+                   else
+                    begin
+                      if IsConvertable(u8bitdef,p^.resulttype,p^.convtyp,ordconstn,false)=0 then
+                        CGMessage2(type_e_incompatible_types,p^.left^.resulttype^.typename,p^.resulttype^.typename);
                     end;
                  end
 
@@ -1024,7 +1042,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.5  2000-08-02 07:20:32  jonas
+  Revision 1.6  2000-08-26 19:40:19  peter
+    * integer(char) explicit typecast support (tp7,delphi compatible)
+
+  Revision 1.5  2000/08/02 07:20:32  jonas
       - undid my changes from the previous two commits because it was a bug
         in cg386cnv which I've now fixed (previous changes only masked it in
         some cases) (merged from fixes branch)
@@ -1039,4 +1060,4 @@ end.
   Revision 1.2  2000/07/13 11:32:51  michael
   + removed logs
 
-}
+}