Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Copyright (C) 2017 Matthew Fluet. |
2 | * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh | |
3 | * Jagannathan, and Stephen Weeks. | |
4 | * Copyright (C) 1997-2000 NEC Research Institute. | |
5 | * | |
6 | * MLton is released under a BSD-style license. | |
7 | * See the file MLton-LICENSE for details. | |
8 | *) | |
9 | ||
10 | (* Primitive names are special -- see atoms/prim.fun. *) | |
11 | ||
12 | structure Primitive = struct | |
13 | ||
14 | open Primitive | |
15 | ||
16 | structure Array = | |
17 | struct | |
18 | open Array | |
19 | val allocUnsafe = _prim "Array_alloc": SeqIndex.int -> 'a array; | |
20 | val copyArrayUnsafe = _prim "Array_copyArray": 'a array * SeqIndex.int * 'a array * SeqIndex.int * SeqIndex.int -> unit; | |
21 | val copyVectorUnsafe = _prim "Array_copyVector": 'a array * SeqIndex.int * 'a vector * SeqIndex.int * SeqIndex.int -> unit; | |
22 | val length = _prim "Array_length": 'a array -> SeqIndex.int; | |
23 | (* There is no maximum length on arrays, so maxLen' = SeqIndex.maxInt'. *) | |
24 | (* val maxLen': SeqIndex.int = SeqIndex.maxInt' *) | |
25 | val subUnsafe = _prim "Array_sub": 'a array * SeqIndex.int -> 'a; | |
26 | val uninitIsNop = _prim "Array_uninitIsNop": 'a array -> bool; | |
27 | val uninitUnsafe = _prim "Array_uninit": 'a array * SeqIndex.int -> unit; | |
28 | val updateUnsafe = _prim "Array_update": 'a array * SeqIndex.int * 'a -> unit; | |
29 | ||
30 | structure Raw :> sig | |
31 | type 'a rawarr | |
32 | val allocUnsafe: SeqIndex.int -> 'a rawarr | |
33 | val length: 'a rawarr -> SeqIndex.int | |
34 | val toArrayUnsafe: 'a rawarr -> 'a array | |
35 | val uninitIsNop: 'a rawarr -> bool | |
36 | val uninitUnsafe: 'a rawarr * SeqIndex.int -> unit | |
37 | end = | |
38 | struct | |
39 | type 'a rawarr = 'a array | |
40 | val allocUnsafe = _prim "Array_allocRaw": SeqIndex.int -> 'a rawarr; | |
41 | val length = length | |
42 | val toArrayUnsafe = _prim "Array_toArray": 'a rawarr -> 'a array; | |
43 | val uninitIsNop = uninitIsNop | |
44 | val uninitUnsafe = uninitUnsafe | |
45 | end | |
46 | end | |
47 | ||
48 | structure Vector = | |
49 | struct | |
50 | open Vector | |
51 | (* Don't mutate the array after you apply fromArray, because vectors | |
52 | * are supposed to be immutable and the optimizer depends on this. | |
53 | *) | |
54 | val fromArrayUnsafe = _prim "Array_toVector": 'a array -> 'a vector; | |
55 | val length = _prim "Vector_length": 'a vector -> SeqIndex.int; | |
56 | val subUnsafe = _prim "Vector_sub": 'a vector * SeqIndex.int -> 'a; | |
57 | val vector0 = _prim "Vector_vector": unit -> 'a vector; | |
58 | end | |
59 | ||
60 | end |