Interpreter - clock() native function
This commit is contained in:
parent
7b8405119b
commit
24b57d35d0
1 changed files with 44 additions and 0 deletions
|
@ -0,0 +1,44 @@
|
|||
use std::{
|
||||
cell::RefCell,
|
||||
rc::Rc,
|
||||
time::{SystemTime, UNIX_EPOCH},
|
||||
};
|
||||
|
||||
use crate::errors::InterpreterError;
|
||||
|
||||
use super::{Callable, CallableRef, EnvironmentRef, Value};
|
||||
|
||||
/* ----------- *
|
||||
* clock() *
|
||||
* ----------- */
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Clock;
|
||||
|
||||
impl Callable for Clock {
|
||||
fn arity(&self) -> usize {
|
||||
0
|
||||
}
|
||||
|
||||
fn call(
|
||||
&self,
|
||||
_environment: &EnvironmentRef,
|
||||
_arguments: Vec<Value>,
|
||||
) -> Result<Value, InterpreterError> {
|
||||
let now = SystemTime::now();
|
||||
let since_epoch = now
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.expect("looks like it's 2038 already");
|
||||
Ok(Value::Number((since_epoch.as_millis() as f64) / 1000.0))
|
||||
}
|
||||
}
|
||||
|
||||
impl ToString for Clock {
|
||||
fn to_string(&self) -> String {
|
||||
"<native function clock()>".to_owned()
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn clock() -> CallableRef {
|
||||
Rc::new(RefCell::new(Clock {}))
|
||||
}
|
Loading…
Reference in a new issue