Quick actions

cmd+k|ctrl+k

Navigation

Languages

ATS Pointers and References

Snippet info

Language

Ats

Visibility

public

Author

steinwaywhw

Created

2016-09-09T20:50:05Z

Updated

2016-09-09T20:50:05Z

#include "share/atspre_staload.hats"

datatype point = 
| Point of (ref int)

%{

int deref (int addr) {
    return *((int *)addr);
}   

%}

implement main0 () = () where {
    
    fun debug (x: point): void = () where {
        val _ = $extfcall (void, "printf", "Address of struct:     %p\n", x)
        val Point i = x
        val _ = $extfcall (void, "printf", "Content of ref itself: %p\n", $UNSAFE.cast{int} i)
        val c = $extfcall (int, "deref", $UNSAFE.cast{int} i)
        val _ = $extfcall (void, "printf", "Content of ref cell:   %d\n", c)
    }
    
    val x = Point (ref<int> 10)
    val _ = debug x
    
    fun change (p: point, i: int): void = () where {
        val Point c = p
        val _ = !c := i
        
    }
    
    val _ = change (x, 100)
    val _ = debug x
}
INFO