Byte was interpreted by Oxygene as unsigned byte. After installing 2595 it is signed byte.
This sounds like it could be related to the fixes for Byte comparison in Oxygene - #13 by RemObjectsSoftware. Do you have a concrete tetscase I can have a look at?
I believe that code like this worked previously
class method Main(args: array of String): Int32; begin var i : Byte ; for i:=0 to 255 do writeLn('The magic happens here.'); end;
Now writeLn is never called.
However, I should go back an d Install previous Elements to be sure.
No meed to; it this doesnt work now, its a bug, regardless if previous didn’t too ok or not. i’ve added a note to the re-opened issue.
Indeed. This should be fixed now.
Could you send us build for test?
I’ll send you one later today.
type T_Test = class Value : Byte ; end ; Program = class public class method Main(args: array of String): Int32; begin var o := new T_Test() ; o.Value := $D7; case o.Value of $D7 : writeln( 'OK' ) else writeln( 'BAD' ) // it's bad !!! end ; var b : Byte ; b := $D7; case b of $D7 : writeln( 'OK' ) // it's OK else writeln( 'BAD' ) end ; end; end; end.
I’ll reopen the issue.
Additional strange case - but this time minor
class method Main(args: array of String): Int32; begin var b : Byte ; var i : Integer ; b := 200 ; i := 2 * b ; assert( i=400 ); //OK i := Integer(b) + Integer(b) ; assert( i=400 ); //OK i := b + b ; assert( i=400 ); //BAD? end;
Added to the issue, thanx.
so this one:
begin var b : Byte ; var i : Integer ; b := 200 ; i := 2 * b ; assert( i=400 ); //OK i := Integer(b) + Integer(b) ; assert( i=400 ); //OK i := b + b ; assert( i=400 ); //BAD? end;
The first case: b is a byte, 2 defaults to int. Thats why it works. The last case byte+ byte = byte and it ends up as a negative number.
Bit inconsistent with Oxygene->NET (test succeeded on non-Java)
The problem I believe is that Java has there
Byte class type with is signed… but I’ll look @ck in for further thoughts next week.
hrmm you are right that is odd. I’ll take a look. again. The trick here is that java doesn’t actually support unsigned types no.
Thanks, logged as bugs://85484
Let me log an issue so i don’t lose track of this
Any news about this issue? Can Byte-SByte compatibility be restored like in the previous stables (that we used) or maybe we could use a compiler directive to have a switch if you cannot merge both sides (other issues related to SByte)?
I bumped the priority up.