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
.
6 * MLton is released under a BSD
-style license
.
7 * See the file MLton
-LICENSE for details
.
10 (* Primitive names are special
-- see atoms
/prim
.fun. *)
12 structure Primitive
= struct
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
;
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
39 type 'a rawarr
= 'a array
40 val allocUnsafe
= _prim
"Array_allocRaw": SeqIndex
.int -> 'a rawarr
;
42 val toArrayUnsafe
= _prim
"Array_toArray": 'a rawarr
-> 'a array
;
43 val uninitIsNop
= uninitIsNop
44 val uninitUnsafe
= uninitUnsafe
51 (* Don
't mutate the array after you apply fromArray
, because vectors
52 * are supposed to be immutable
and the optimizer depends on this
.
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
;