// // How to compile: // patscc -DATS_MEMALLOC_LIBC -o string_reverse string_reverse.dats // #include "share/atspre_staload.hats" fun string_reverse ( x: string ) : Strptr1 = let // val [n:int] x = g1ofg0(x) val y = string1_copy(x) val n = string1_length(x) val (pf, fpf | p) = $UNSAFE.ptr_vtake{array(char,n)}(ptrcast(y)) val () = array_subreverse(!p, i2sz(0), n) prval () = fpf(pf) // in $UNSAFE.castvwtp0{Strptr1}(y) end (* end of [string_reverse] *) (* ****** ****** *) implement main0 () = let // val rev = string_reverse("asdf") val ((*void*)) = println! ("reverse(\"asdf\") = \"", rev, "\"") val ((*freed*)) = strptr_free (rev) // in // nothing end // end of [main0]