39 lines
686 B
Plaintext
39 lines
686 B
Plaintext
//
|
|
// 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]
|