浏览代码

* fixed val when the 'code' parameter is the same size as the native CPU int type, but unsigned

git-svn-id: branches/i8086@23859 -
nickysn 12 年之前
父节点
当前提交
573ea10ef3
共有 1 个文件被更改,包括 5 次插入4 次删除
  1. 5 4
      compiler/ninl.pas

+ 5 - 4
compiler/ninl.pas

@@ -1380,11 +1380,12 @@ implementation
             { we need its resultdef later on }
             { we need its resultdef later on }
             codepara.get_paratype;
             codepara.get_paratype;
           end
           end
-        else if (torddef(codepara.resultdef).ordtype = torddef(ptrsinttype).ordtype) then
+        else if (torddef(codepara.resultdef).ordtype <> torddef(ptrsinttype).ordtype) then
           { because code is a var parameter, it must match types exactly    }
           { because code is a var parameter, it must match types exactly    }
-          { however, since it will return values in [0..255], both longints }
-          { and cardinals are fine. Since the formal code para type is      }
-          { longint, insert a typecoversion to longint for cardinal para's  }
+          { however, since it will return values >= 0, both signed and      }
+          { and unsigned ints of the same size are fine. Since the formal   }
+          { code para type is sinttype, insert a typecoversion to sint for  }
+          { unsigned para's  }
           begin
           begin
             codepara.left := ctypeconvnode.create_internal(codepara.left,ptrsinttype);
             codepara.left := ctypeconvnode.create_internal(codepara.left,ptrsinttype);
             { make it explicit, oterwise you may get a nonsense range }
             { make it explicit, oterwise you may get a nonsense range }