Ok here is my code i get a stack overflow on the overloaded - operator with a
distinct type.
import math
type F_TYPE* = distinct float32 # change to suit your needs
type BASE_TYPE = distinct float
type
Mat4_t* = array[16,F_TYPE]
type
Mat3_t* = array[16,F_TYPE]
type
Vec4_t* = ref object of RootObj
x*,y*,z*,w* : F_TYPE
type
Vec3_t* = ref object of RootObj
x*,y*,z* : F_TYPE
proc `/`*(a,b:F_TYPE): F_TYPE =
result = a / b
proc `==`(a,b:F_TYPE): bool =
if a == b:
return true
else:
return false
proc `-`*(a,:F_TYPE): F_TYPE =
return -a
proc `-`*(a,b:F_TYPE): F_TYPE =
result = (a - b)
And here is where the compiler stops when running the program.
proc mat4_frustum(left,right,bottom,top,near,far:F_TYPE): Mat4_t =
var dest : Mat4_t
var
rl = (right - -left).F_TYPE #code breaks here
tb = (top - -bottom).F_TYPE #and here
fn = (far - near).F_TYPE
dest[0] = (near.float * 2.0.float).F_TYPE / rl.F_TYPE
dest[5] = (near.float * 2.0.float).F_TYPE / tb.F_TYPE
dest[8] = (right + left).F_TYPE / rl.F_TYPE
dest[9] = (top + bottom).F_TYPE / tb.F_TYPE
dest[10] = - ((far + near).F_TYPE / fn).F_TYPE
dest[11] = - 1.0.F_TYPE
dest[14] = - ((far.float * near.float * 2).F_TYPE / fn.F_TYPE).F_TYPE
dest[15] = 1.0.F_TYPE
return dest
Specifically it breaks on the negative distinct type i think? Is this normal? I
doubt it could be, because that would be not useful. So any ideas about how to
get it to run correctly? or whatever else is needed...