Skip to content

Commit b476899

Browse files
committed
fix FFI and add an easy execution entry for debugging
1 parent 4129fb8 commit b476899

3 files changed

Lines changed: 9 additions & 22 deletions

File tree

Ix/Ixon.lean

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,6 @@ inductive MetadatumFFI where
264264
| all : Array NameFFI -> MetadatumFFI
265265
| mutCtx : Array (Array NameFFI) -> MetadatumFFI
266266

267-
structure EnvFFI where
268-
env : Array (Address × Address)
269-
270-
def Env.toFFI (x: Env) : EnvFFI := .mk x.env.toArray
271-
272267
def Metadatum.toFFI : Metadatum → MetadatumFFI
273268
| .name n => .name n.toFFI
274269
| .info i => .info i
@@ -285,10 +280,10 @@ inductive IxonFFI where
285280
| apps : IxonFFI -> IxonFFI -> Array IxonFFI -> IxonFFI
286281
| lams : Array IxonFFI -> IxonFFI -> IxonFFI
287282
| alls : Array IxonFFI -> IxonFFI -> IxonFFI
288-
| letE : Bool -> IxonFFI -> IxonFFI -> IxonFFI -> IxonFFI
289283
| proj : Address -> UInt64 -> IxonFFI -> IxonFFI
290284
| strl : String -> IxonFFI
291285
| natl : ByteArray -> IxonFFI
286+
| letE : Bool -> IxonFFI -> IxonFFI -> IxonFFI -> IxonFFI
292287
| list : Array IxonFFI -> IxonFFI
293288
| defn : DefinitionFFI -> IxonFFI
294289
| axio : AxiomFFI -> IxonFFI
@@ -304,7 +299,7 @@ inductive IxonFFI where
304299
| eval : EvalClaim -> IxonFFI
305300
| chck : CheckClaim -> IxonFFI
306301
| comm : Comm -> IxonFFI
307-
| envn : EnvFFI -> IxonFFI
302+
| envn : Array (Address × Address) -> IxonFFI
308303

309304
def Ixon.toFFI : Ixon → IxonFFI
310305
| .vari i => .vari i
@@ -314,10 +309,10 @@ def Ixon.toFFI : Ixon → IxonFFI
314309
| .apps f a as => .apps f.toFFI a.toFFI (as.map Ixon.toFFI).toArray
315310
| .lams xs b => .lams (xs.map Ixon.toFFI).toArray b.toFFI
316311
| .alls xs x => .alls (xs.map Ixon.toFFI).toArray x.toFFI
317-
| .letE x v t b => .letE x v.toFFI t.toFFI b.toFFI
318312
| .proj addr i x => .proj addr i x.toFFI
319313
| .strl s => .strl s
320314
| .natl n => .natl (nat2Bytes n)
315+
| .letE x v t b => .letE x v.toFFI t.toFFI b.toFFI
321316
| .list xs => .list (xs.map Ixon.toFFI).toArray
322317
| .defn d => .defn d.toFFI
323318
| .axio a => .axio a.toFFI
@@ -335,7 +330,7 @@ def Ixon.toFFI : Ixon → IxonFFI
335330
| .eval x => .eval x
336331
| .chck x => .chck x
337332
| .comm x => .comm x
338-
| .envn x => .envn x.toFFI
333+
| .envn x => .envn x.env.toArray
339334

340335
end FFI
341336

src/lean/ffi/ixon.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ fn lean_ctor_to_univ(ctor: &LeanCtorObject) -> Univ {
5757
}
5858
}
5959

60-
// FIXME
6160
fn lean_ptr_to_address(ptr: *const c_void) -> Address {
6261
let sarray: &LeanSArrayObject = as_ref_unsafe(ptr.cast());
6362
let hash = Hash::from_slice(sarray.data()).unwrap();
@@ -229,11 +228,9 @@ fn lean_ptr_to_name_parts(ptr: *const c_void) -> Vec<NamePart> {
229228
}
230229

231230
fn lean_ptr_to_name(ptr: *const c_void) -> Name {
232-
let parts = lean_ptr_to_name_parts(ptr);
233-
// Is `parts` reversed?
234-
Name {
235-
parts: parts.into_iter().rev().collect(),
236-
}
231+
let mut parts = lean_ptr_to_name_parts(ptr);
232+
parts.reverse();
233+
Name { parts }
237234
}
238235

239236
fn lean_ptr_to_metadatum(ptr: *const c_void) -> Metadatum {
@@ -301,7 +298,6 @@ fn lean_ptr_to_metadata_entry(ptr: *const c_void) -> (Nat, Vec<Metadatum>) {
301298
(fst, snd)
302299
}
303300

304-
// FIXME
305301
fn lean_ptr_to_env_entry(ptr: *const c_void) -> (Address, Address) {
306302
let ctor: &LeanCtorObject = as_ref_unsafe(ptr.cast());
307303
let [fst, snd] = ctor.objs().map(lean_ptr_to_address);
@@ -518,11 +514,8 @@ fn lean_ctor_to_ixon(ctor: &LeanCtorObject) -> Ixon {
518514
let [secret, payload] = comm.objs().map(lean_ptr_to_address);
519515
Ixon::Comm(Comm { secret, payload })
520516
}
521-
// FIXME
522517
26 => {
523-
let [env_ptr] = ctor.objs();
524-
let env: &LeanCtorObject = as_ref_unsafe(env_ptr.cast());
525-
let [map_ptr] = env.objs();
518+
let [map_ptr] = ctor.objs();
526519
let map: &LeanArrayObject = as_ref_unsafe(map_ptr.cast());
527520
let env = map.to_vec(lean_ptr_to_env_entry);
528521
Ixon::Envn(Env { env })
@@ -537,7 +530,6 @@ extern "C" fn rs_eq_lean_rust_serialization(
537530
bytes: &LeanSArrayObject,
538531
) -> bool {
539532
let mut buf = Vec::new();
540-
println!("{:?}", lean_ctor_to_ixon(ixon));
541533
lean_ctor_to_ixon(ixon).put(&mut buf);
542534
buf == bytes.data()
543535
}

src/lean/string.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub struct LeanStringObject {
2121
impl LeanStringObject {
2222
#[inline]
2323
pub fn as_string(&self) -> String {
24-
let bytes = self.m_data.slice(self.m_size);
24+
let bytes = self.m_data.slice(self.m_size - 1); // Ignore the last '\0'
2525
unsafe { String::from_utf8_unchecked(bytes.to_vec()) }
2626
}
2727
}

0 commit comments

Comments
 (0)