Hallo, Sven! Hello, everybody!
According to Sven Hilscher:
[...]
type TestType = Integer; { works with Real, ShortInt, Integer, LongInt } { crashs with Byte } [...]
function CompNum(var e1, e2: TestType):Integer; Var r : Real; begin r := e1 - e2; CompNum := Round(r); end;
Consider this with "TestType = Byte", then in `CompNum' we are subtracting two `Byte' variables from each other. GPC chooses the result type to be `Byte' again, so the result is never negative.
When I convert them to `Integer' by writing
r:= Integer ( e1 ) - Integer ( e2 );
it works. (First it did not work because of a bug in conversions among integer types, but I could fix this.;-)
However, is this the correct behaviour? Or should the result type of a subtraction be the "nearest" signed integer type - `ShortInt' in this example? Then, what to do when subtracting two `LongestCard's, especially in cases like "$FFFFFFFFFFFFFFFF - 2" where the result does not fit in `LongestInt'?
BTW, Sven, this type casting problem does of course *not* explain the crash you have observed when calling `qsort' on an array of bytes. :-(
Confused,
Peter
Dipl.-Phys. Peter Gerwinski, Essen, Germany, free physicist and programmer peter.gerwinski@uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201] maintainer GNU Pascal [970714] - http://home.pages.de/~gnu-pascal/ [970125]