diff options
| author | LLLL Colonq <llll@colonq> | 2026-09-29 18:07:49 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-09-29 18:07:49 -0400 |
| commit | d1ff7361b5f93313dac0049d3035d3fc13b8f99b (patch) | |
| tree | a0fe13dc57c9ea573b4db61ed01f09bdcdccd79b | |
| parent | 2169a202368c3e744e92b4a163424c28ac14f7f2 (diff) | |
Update pit
| -rw-r--r-- | crates/teleia/build.rs | 2 | ||||
| -rw-r--r-- | crates/teleia/src/script.rs | 29 | ||||
| -rw-r--r-- | flake.lock | 8 |
3 files changed, 35 insertions, 4 deletions
diff --git a/crates/teleia/build.rs b/crates/teleia/build.rs index aeb074e..857e2ea 100644 --- a/crates/teleia/build.rs +++ b/crates/teleia/build.rs @@ -1,5 +1,7 @@ fn main() { println!("cargo::rerun-if-changed=../../flake.lock"); + println!("cargo::rerun-if-env-changed=LIBCOLONQ_PIT_NATIVE"); + println!("cargo::rerun-if-env-changed=LIBCOLONQ_PIT_WASM"); match &*std::env::var("CARGO_CFG_TARGET_ARCH").unwrap() { "x86_64" => if let Ok(p) = std::env::var("LIBCOLONQ_PIT_NATIVE") { println!("cargo::rustc-link-search={}", p); diff --git a/crates/teleia/src/script.rs b/crates/teleia/src/script.rs index 300ed72..88fe759 100644 --- a/crates/teleia/src/script.rs +++ b/crates/teleia/src/script.rs @@ -36,6 +36,21 @@ extern "C" fn unwrap_nativefunc(rt: *mut PitRuntime, args: PitValue, data: *mut #[repr(C)] #[derive(Debug, Clone, Copy)] +enum PitSort { + Double, + Integer, + Symbol, + Cell, + Cons, + Array, + Bytes, + Func, + NativeFunc, + NativeData, +} + +#[repr(C)] +#[derive(Debug, Clone, Copy)] struct PitValue { data: u64 } #[repr(C)] @@ -68,6 +83,7 @@ struct PitParser { unsafe extern "C" { pub fn pit_runtime_test(out: *mut u8, out_len: i64, buf: *mut u8, len: i64) -> c_int; fn pit_runtime_new(buf: *mut MaybeUninit<u8>, len: i64) -> *mut PitRuntime; + fn pit_runtime_set_fuel(rt: *mut PitRuntime, fuel: i64); fn pit_error_get(buf: *mut PitRuntime) -> PitValue; fn pit_install_library_essential(buf: *mut PitRuntime); fn pit_install_library_plist(buf: *mut PitRuntime); @@ -90,6 +106,7 @@ unsafe extern "C" { fn pit_value_eq(x: PitValue, y: PitValue) -> bool; + fn pit_value_as_integer(rt: *mut PitRuntime, v: PitValue) -> i64; fn pit_value_as_double(rt: *mut PitRuntime, v: PitValue) -> f64; fn pit_value_array_new(rt: *mut PitRuntime, len: i64) -> PitValue; @@ -146,6 +163,11 @@ impl Runtime { if self.eq(ve, NIL) { return Ok(()) }; Err(Error { msg: self.dump(ve).unwrap_or("<unable to dump>".to_owned()) }.into()) } + pub fn set_fuel(&mut self, fuel: i64) { + unsafe { + pit_runtime_set_fuel(self.rt, fuel); + } + } pub fn parse(&mut self, s: &str) -> utils::Erm<Value> { let lexer = Lexer::from_bytes(s.as_bytes()); let mut parser = Parser::from_lexer(lexer); @@ -189,6 +211,13 @@ impl Runtime { pub fn eq(&self, x: Value, y: Value) -> bool { unsafe { pit_value_eq(x.val, y.val) } } + pub fn as_integer(&mut self, x: Value) -> utils::Erm<i64> { + unsafe { + let v = pit_value_as_integer(self.rt, x.val); + self.error()?; + Ok(v) + } + } pub fn as_double(&mut self, x: Value) -> utils::Erm<f64> { unsafe { let v = pit_value_as_double(self.rt, x.val); @@ -59,11 +59,11 @@ ] }, "locked": { - "lastModified": 1790372175, - "narHash": "sha256-xxa2VTKm2iA32YdFtVYlk0tvK5wh2np4P8OtZGtJYRU=", + "lastModified": 1790718702, + "narHash": "sha256-VKvO91LtC8f+yW6nokidG2dUpW89nsoK8qYyWb6PlLY=", "ref": "refs/heads/master", - "rev": "17df4b1ff7f4cbcf3b3218fea68f65d3cb60c984", - "revCount": 26, + "rev": "30bd399aed4c91e4d43cd5a911e7f3eafbcb4649", + "revCount": 29, "type": "git", "url": "ssh://git@git.colonq.computer/~/libcolonq" }, |
