Quick actions

cmd+k|ctrl+k

Navigation

Languages

Borrowing internal pointers in ATS

Snippet info

Language

Ats

Visibility

public

Author

mindbound

Created

2017-09-03T19:35:30Z

Updated

2017-09-03T21:06:48Z

#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"

viewtypedef X = @{ a = int, b = int }
extern viewtypedef "X" = X

%{
int* get_b_ref(X* x)
{
    return &x->atslab__b;
}
%}

extern fun get_b_ref {l: addr} (pf: X @ l | x: ptr l) :<> [l2: addr] (int @ l2, int @ l2 -<lin> X @ l | ptr l2) = "mac#get_b_ref"

symintr <~
nonfix <~
overload <~ with get_b_ref

implement main0 () = () where
{
    var x: X = @{ a=1, b=2 }
    val (pf, pff | p) = <~ (view@ x | addr@ x)
    val _ = !p := 3
    prval () = view@ x := pff(pf)
    val () = println! ("x.b = ", x.b)
}
INFO