[M3devel] LONGINT, looks urgent...
    Tony Hosking 
    hosking at cs.purdue.edu
       
    Sun Sep 27 20:59:29 CEST 2009
    
    
  
It works OK for me on I386_DARWIN running with the CVS head.  This  
program produces identical output for both the INTEGER and LONGINT  
values.
Main.m3:
MODULE Main;
IMPORT MainC;
VAR
   a, i: INTEGER;
   aa: LONGINT;
BEGIN
   i := 0;
   FOR ii := 1L TO 1793L DO
     INC(i);
     a := i * 17 DIV 100;
     MainC.PutInt(a);
     aa := ii * 17L DIV 100L;
     MainC.PutLong(aa);
   END;
END Main.
MainC.i3:
INTERFACE MainC;
<*EXTERNAL*> PROCEDURE PutLong (x: LONGINT);
<*EXTERNAL*> PROCEDURE PutInt (x: INTEGER);
END MainC.
MainC.C:
#include <stdio.h>
void PutLong (long long x) {
   printf("%d\n", x);
}
void PutInt (long x) {
   printf("%d\n", x);
}
On 26 Sep 2009, at 15:11, Dragiša Durić wrote:
> Spent a piece of day with
>
> pdv := osnovica * 17L DIV 100L;
>
> varying osnovica from 1, over 1791, 1793... and many more. It looks  
> like
> LONGINT arithmetic in anything except simplest expressions is broken.
> When turned to:
>
> WITH step1 = osnovica * 17L, step2 = step1 DIV 100L DO
>  pdv := step2;
> END;
>
> it works...
>
> I have no much time ATM (doing various M3+Gtk+ tasks right now,  
> tight on
> delivery schedule) to check it more. My version is a bit rusty but not
> much. If nobody makes more research, I'll - few weeks is most  
> earliest I
> can expect any free time.
> -- 
> Dragiša Durić <dragisha at m3w.org>
    
    
More information about the M3devel
mailing list