So, I'm trying to mutate a var twice in order to replicate some C code
that I am trying to port to ATS. But, I've been scratching my head as to
why this would happen, so any help is appreciated. In an effort to not
waste your time, I will be showing you the function with my issue along
with the declarations for the relevant functions & typedefs. Please ask if
you'd like me to provide more details that I may have missed.
The function I'm having trouble in:
implement mat4_to_quat ( m ) = let
val tr = m.xx + m.yy + m.zz
in
if tr > 0.f then let
val s = $MATH.sqrt(tr + 1.f)
val w = s / 2.f
val x = ( mat4_at(m, 1, 2) - mat4_at(m, 2, 1) ) * (0.5f / s)
val y = ( mat4_at(m, 2, 0) - mat4_at(m, 0, 2) ) * (0.5f / s)
val z = ( mat4_at(m, 0, 1) - mat4_at(m, 1, 0) ) * (0.5f / s)
in
quat_new(x, y, z, w)
end else let
val nxt = @[int](1, 2, 0)
var q = @[float][4](0.f)
var i = 0
var j = 0
var k = 0
var s = 0
in
* i := ((if mat4_at(m, 1, 1) > mat4_at(m, 0, 0) then 1 else i):int);*
* i := ((if mat4_at(m, 2, 2) > mat4_at(m, $showtype(i), i) then 2 else
i):int); // <-- this line has the error*
j := nxt[i];
k := nxt[j];
s := $MATH.sqrt( (mat4_at(m, i, i) - (mat4_at(m, j, j), mat4_at(m, k,
k))) + 1.f );
q[i] := s * 0.5f;
s := (if (s != 0.f) then 0.5f / s else s);
q[3] := (mat4_at(m, j, k) - mat4_at(m, k, j)) * s;
q[j] := (mat4_at(m, i, j) + mat4_at(m, j, i)) * s;
q[k] := (mat4_at(m, i, k) + mat4_at(m, k, i)) * s;
quat_new(q[0], q[1], q[2], q[3])
end
end
Here's the function's declaration:
fun mat4_to_quat ( m: mat4 ) : quat = "sta#%"
Here's the declaration for mat4_at:
fun mat4_at {x:nat | x < 4}{y:nat | y < 4} ( m: mat4, x: int x, y: int y )
: float = "sta#%"
My full repo can be found
here: https://github.com/d4v3y5c0n3s/Goldelish-Engine
Here's the error message:
patscc -tcats /home/d4v3y/Goldelish-Engine/source/g_engine.dats
**SHOWTYPE[UP]**(/home/d4v3y/Goldelish-Engine/source/g_engine.dats:
35508(line=1373, offs=55) -- 35509(line=1373, offs=56)):
S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)): S2RTbas(S2RTBASimp(1;
t@ype))
/home/d4v3y/Goldelish-Engine/source/g_engine.dats: 35508(line=1373,
offs=55) -- 35509(line=1373, offs=56): error(3): the dynamic expression
cannot be assigned the type [S2Eapp(S2Ecst(g1int_int_t0ype);
S2Eextkind(atstype_int), S2EVar(6368))].
/home/d4v3y/Goldelish-Engine/source/g_engine.dats: 35508(line=1373,
offs=55) -- 35509(line=1373, offs=56): error(3): mismatch of static terms
(tyleq):
The actual term is: S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int))
The needed term is: S2Eapp(S2Ecst(g1int_int_t0ype);
S2Eextkind(atstype_int), S2EVar(6368))
/home/d4v3y/Goldelish-Engine/source/g_engine.dats: 35512(line=1373,
offs=59) -- 35513(line=1373, offs=60): error(3): the dynamic expression
cannot be assigned the type [S2Eapp(S2Ecst(g1int_int_t0ype);
S2Eextkind(atstype_int), S2EVar(6369))].
/home/d4v3y/Goldelish-Engine/source/g_engine.dats: 35512(line=1373,
offs=59) -- 35513(line=1373, offs=60): error(3): mismatch of static terms
(tyleq):
The actual term is: S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int))
The needed term is: S2Eapp(S2Ecst(g1int_int_t0ype);
S2Eextkind(atstype_int), S2EVar(6369))
|
--
You received this message because you are subscribed to the Google Groups
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ats-lang-users/32da2a64-1760-418e-8d45-1960f16f13d5o%40googlegroups.com.