1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
use std::collections::hash_map::DefaultHasher;
use std::hash::Hasher as _;

use arret_runtime::binding::*;

use arret_runtime::boxed;
use arret_runtime::boxed::prelude::*;
use arret_runtime::boxed::refs::Gc;
use arret_runtime::task::Task;

#[arret_rfi_derive::rust_fun("(Any -> Int)")]
pub fn stdlib_hash(task: &mut Task, input: Gc<boxed::Any>) -> i64 {
    let mut state = DefaultHasher::new();

    input.hash_in_heap(task.heap(), &mut state);
    state.finish() as i64
}