Garbage-collected Vec-like datastructure implementing Copy.
Note that functions which seem to mutate the List, actually clone the list and allocate a new GcCow under the hood.
Garbage-collected hash map implementing Copy.
This implements Ord but the order is not meaningful; this is just so one can use BTreeMaps.
In particular, the order might differ across two runs of the same program.
A “pointer” is the thin pointer with optionally some metadata, making it a wide pointer.
This corresponds to the Rust raw pointer types, as well as references and boxes.
Garbage-collected hash set implementing Copy.
This implements Ord but the order is not meaningful; this is just so one can use BTreeMaps.
In particular, the order might differ across two runs of the same program.
The intrinsic operations supported by MiniRust.
Generally we only make things intrinsics if they cannot be operands, i.e.
they are non-deterministic or mutate the global state.
We also make them intrinsic if they return (), because an operand that
does not return anything is kind of odd.
Describes where in a potentially unsized type the UnsafeCell are.
Separate from LayoutStrategy since we must be able to compute LayoutStrategy from a
MiniRust Type, but that does not have enough information for an UnsafeCellStrategy.
FIXME: maybe it should?
Note: All memory operations can be non-deterministic, which means that
executing the same operation on the same memory can have different results.
We also let read operations potentially mutate memory (they actually can
change the current state in concurrent memory models and in Stacked Borrows).
An “address” is a location in memory. This corresponds to the actual
location in the real program.
We make it a mathematical integer, but of course it is bounded by the size
of the address space.