Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | val e = _export "f": (int * real * char -> char) -> unit; |
2 | val _ = e (fn (i, r, _) => | |
3 | (print (concat ["i = ", Int.toString i, | |
4 | " r = ", Real.toString r, "\n"]) | |
5 | ; #"g")) | |
6 | val g = _import "g" public reentrant: unit -> unit; | |
7 | val _ = g () | |
8 | val _ = g () | |
9 | ||
10 | val e = _export "f2": (Word8.word -> word array) -> unit; | |
11 | val _ = e (fn w => | |
12 | Array.tabulate (10, fn _ => Word.fromLargeWord (Word8.toLargeWord w))) | |
13 | val g2 = _import "g2" public reentrant: unit -> word array; | |
14 | val a = g2 () | |
15 | val _ = print (concat ["0wx", Word.toString (Array.sub (a, 0)), "\n"]) | |
16 | ||
17 | val e = _export "f3": (unit -> unit) -> unit; | |
18 | val _ = e (fn () => print "hello\n"); | |
19 | val g3 = _import "g3" public reentrant: unit -> unit; | |
20 | val _ = g3 () | |
21 | ||
22 | (* This example demonstrates mutual recursion between C and SML. *) | |
23 | val e = _export "f4": (int -> unit) -> unit; | |
24 | val g4 = _import "g4" public reentrant: int -> unit; | |
25 | val _ = e (fn i => if i = 0 then () else g4 (i - 1)) | |
26 | val _ = g4 13 | |
27 | ||
28 | val (_, zzzSet) = _symbol "zzz" alloc: (unit -> int) * (int -> unit); | |
29 | val () = zzzSet 42 | |
30 | val g5 = _import "g5" public: unit -> unit; | |
31 | val _ = g5 () | |
32 | ||
33 | val _ = print "success\n" |