Good evening,
    So, here's a snippet of code where I'm trying to create a record type 
that gets allocated within a pointer.  Also, I am trying to allocate arrays 
within this record type.  I've been stuck on this for too long, so I was 
looking for an outsider's perspective on how I might solve this.
    Here's the code (error is highlighted in yellow):
absvt@ype mesh

local

assume mesh =
[v,t:int]
[vl,tl:addr]
@{
  v=int v, t=int t, vap=arrayptr(vertex, vl, v), tap=arrayptr(uint32, tl, t)
}

in

implement mesh_print ( m ) = let
  fun vert_print_loop {i,j:int | 0 <= i+1; i+1 <= j} .<i>. ( i: int i, 
v_arr: &(arrayptr(vertex, j)) ): void =
    if not(i < 0) then begin
      vertex_print(v_arr[i]);
      vert_print_loop(i-1, v_arr)
    end else ()
  fun tri_print_loop {i,j:int | 0 <= i+1; i+1 <= j} .<i>. ( i: int i, 
t_arr: &(arrayptr(uint32, j)) ): void =
    if not(i < 0) then begin
      println!(t_arr[i]);
      tri_print_loop(i-1, t_arr)
    end else ()
in
  println!("Num Verts: ", m.v);
  vert_print_loop(m.v-1, m.vap);
  println!("Num Tris: ", m.t);
  println!("Triangle Indicies");
  tri_print_loop(m.t-1, m.tap)
end

implement mesh_new (  ) = let
  val vert_array = arrayptr_make_uninitized<vertex>(size_of_int(0))
  val tri_array = arrayptr_make_uninitized<uint32>(size_of_int(0))
  val (res_mpf, res_gcpf | res_ptr) = ptr_alloc<mesh>()
in
  arrayptr_initize(vert_array, size_of_int(0));
  arrayptr_initize(tri_array, size_of_int(0));
  !res_ptr := @{
    v=0, t=0,
    vap=vert_array,
    tap=tri_array
  }:mesh;
  (res_mpf, res_gcpf | res_ptr)
end

end
    Here's the error message:
patscc -tcats /home/tmj90/Goldelish-Engine/source/g_engine.dats
/home/tmj90/Goldelish-Engine/source/g_engine.dats: 68955(line=2414, offs=3) 
-- 69025(line=2418, offs=4): error(3): the dynamic expression cannot be 
assigned the type [S2Eexi(v(8781), t(8782); ; S2Eexi(vl(8783), tl(8784); ; 
S2Etyrec(flt0; npf=-1; v=S2Eapp(S2Ecst(int); S2Evar(v(8781))), 
t=S2Eapp(S2Ecst(int); S2Evar(t(8782))), vap=S2Eapp(S2Ecst(arrayptr); 
S2Ecst(vertex), S2Evar(vl(8783)), S2Evar(v(8781))), 
tap=S2Eapp(S2Ecst(arrayptr); S2Ecst(uint32), S2Evar(tl(8784)), 
S2Evar(t(8782))))))].
/home/tmj90/Goldelish-Engine/source/g_engine.dats: 68955(line=2414, offs=3) 
-- 69025(line=2418, offs=4): error(3): mismatch of static terms (tyleq):
The actual term is: S2Ecst(atsvoid_t0ype)
The needed term is: S2Etyrec(flt0; npf=-1; v=S2Eapp(S2Ecst(int); 
S2EVar(7152)), t=S2Eapp(S2Ecst(int); S2EVar(7153)), 
vap=S2Eapp(S2Ecst(arrayptr); S2Ecst(vertex), S2EVar(7154), S2EVar(7152)), 
tap=S2Eapp(S2Ecst(arrayptr); S2Ecst(uint32), S2EVar(7155), S2EVar(7153)))
    Thanks for any help, and let me know if you need more details from the 
code.
Have a great day,
    Troy Jacobs

-- 
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 ats-lang-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/8fc97318-1f07-4261-a747-70f7edf00747n%40googlegroups.com.

Reply via email to