Module moveit::slot[][src]

Expand description

Explicit stack slots, which can be used for stack emplacement.

A Slot is uninitialized storage on the stack that can be manipulated explicitly. Notionally, a Slot<T> represents a let x: T; in some function’s stack.

Slots mut be created with the slot!() macro:

slot!(storage);
let mut x = storage.put(42);
*x /= 2;
assert_eq!(*x, 21);

Unfortunately, due to the constrains of Rust today, it is not possible to produce a Slot as part of a larger expression; since it needs to expand to a let to bind the stack location, slot!() must be a statement, not an expression.

Slots can also be used to implement a sort of “guaranteed RVO”:

fn returns_on_the_stack(val: i32, storage: Slot<i32>) -> Option<MoveRef<i32>> {
  if val == 0 {
    return None
  }
  Some(storage.put(val))
}

slot!(storage);
let val = returns_on_the_stack(42, storage);
assert_eq!(*val.unwrap(), 42);

Slots provide a natural location for emplacing values on the stack. The moveit!() macro is intended to make this operation straight-forward.

Structs

An empty slot on the stack into which a value could be emplaced.