[m-users.] 64 bit subtraction, compiler sees 'int'
Sean Charles (emacstheviking)
objitsu at gmail.com
Tue Nov 22 09:57:48 AEDT 2022
Hi,
I am getting this error:
agame.m:158: In clause for predicate `game_loop'/8:
agame.m:158: in unification of variable `Diff'
agame.m:158: and term `(Now - Then)':
agame.m:158: type error in arguments of functor `-'/2.
agame.m:158: Argument 1 (Now) has type `int64',
agame.m:158: expected type was `int'.
agame.m:158: Argument 2 (Then) has type `int64',
agame.m:158: expected type was `int'.
** Error making `Mercury/cs/agame.c'.
I have this predicate, an FFI, to get the current 64 bit tick counter:
:- pred sdl_getticks64(int64::out, io::di, io::uo) is det.
:- pragma foreign_proc("C", sdl_getticks64(Ticks::out, _IO0::di, _IO::uo),
[promise_pure,will_not_call_mercury,does_not_affect_liveness],
"
Ticks = SDL_GetTicks64();
").
I assign it like this in the setup code
sdl_getticks64(Now, !IO),
game_loop(Window, Renderer, Now, Now, !GameState, !IO),
ad then in the game loop I calculate the difference but I don't see how I've failed to convey to the compiler the use of 64 bits!
:- pred game_loop(sdl_window::in, sdl_renderer::in, int64::in, int64::in,
game_state::in, game_state::out, io::di, io::uo) is det.
157: game_loop(W, R, Now, Then, !State, !IO) :-
==> 158: Diff = (Now-Then),
io.format("Now: %li, Then: %li, Diff: %li\n",
[ i64(Now), i64(Then), i64(Diff) ], !IO),
I can't see where it thinks the expected type was 'int'. Is there a different library I should use, I looked but couldn't really find anything in 'int' or 'math'.
Thanks,
Sean.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20221121/f1838d4d/attachment.html>
More information about the users
mailing list