Hello,
I am unable to try out the code given here
http://www.ats-lang.org/DOCUMENT/INTPROGINATS/HTML/x3298.html . I am
using ats-lang-anairiats-0.2.9 on ubuntu.
I get following compile error :
572(line=34, offs=11) – 588(line=34, offs=27): error(ccomp): the templatedefinition
for [ptr_get1] is unavailable at [ptr_get1$1695_ats_int_type].
Code :
viewtypedef tptr (a:t@ype, l:addr) = (a @ l | ptr l)
extern
fun{a:t@ype}
ptr_get1 {l:addr} (pf: !a @ l >> a @ l | p: ptr l): a
extern fun{a:t@ype}
ptr_set1 {l:addr} (pf: !a? @ l >> a @ l | p: ptr l , x: a): void
fn getinc
{l:addr} {n:nat} (
cnt: !tptr (int(n), l) >> tptr (int(n+1), l)
) : int(n) = n where {
val n = ptr_get1<int(n)> (cnt.0 | cnt.1)
val () = ptr_set1<int(n+1)> (cnt.0 | cnt.1, n+1)
} // end of [getinc]
implement main () =
begin
print("\n");
end
Previous examples using ptr_get1 worked just fine , but this i cannot
figure what is the problem,
Thanks
gmhwxi
August 20, 2013, 2:12pm
2
Please have the following line at the beginning of your code:
staload _(UN ) = “prelude/DATS/unsafe.dats”
I still get the same error :
382(line=21, offs=11) – 399(line=21, offs=28): error(ccomp): the templatedefinition
for [ptr_get1] is unavailable at [ptr_get1$1716_ats_int_type].
gmhwxi
August 20, 2013, 2:32pm
4
Sorry. I should have read your question more carefully.
Here is a working version:
vtypedef
tptr (a:t@ype, l:addr) = (a @ l | ptr l)
(* ****** ****** *)
extern
fun{a:t@ype}
ptr_get1 {l:addr} (pf: !a @ l >> a @ l | p: ptr l): a
extern
fun{a:t@ype}
ptr_set1 {l:addr} (pf: !a? @ l >> a @ l | p: ptr l , x: a): void
implement{a} ptr_get1 (pf | p) = !p
implement{a} ptr_set1 (pf | p, x) = !p := x
(* ****** ****** *)
fn getinc
{l:addr} {n:nat} (
cnt: !tptr (int(n), l) >> tptr (int(n+1), l)
) : int(n) = n where {
val n = ptr_get1<int(n)> (cnt.0 | cnt.1)
val () = ptr_set1<int(n+1)> (cnt.0 | cnt.1, n+1)
} // end of [getinc]
(* ****** ****** *)
implement
main () =
{
var cnt: int = 0
val tcnt = (view@cnt | &cnt)
val () = println! ("getinc(tcnt) = ", getinc(tcnt))
val () = println! ("getinc(tcnt) = ", getinc(tcnt))
val () = println! ("getinc(tcnt) = ", getinc(tcnt))
val (pf | p) = tcnt
prval () = view@cnt := pf
//
} // end of [main0]