rename to_hs to to_hs_checker, to differentiate between compiling to hoas checker file, and the compiler to actually run

This commit is contained in:
Victor Taelin 2024-03-14 17:34:38 -03:00
parent 4d421106bd
commit f96624ddcb
3 changed files with 29 additions and 29 deletions

View File

@ -22,10 +22,10 @@ impl Book {
//code
}
pub fn to_hs(&self) -> String {
pub fn to_hs_checker(&self) -> String {
let mut code = String::new();
for (name, term) in &self.defs {
let expr = term.to_hs(im::Vector::new(), &mut 0);
let expr = term.to_hs_checker(im::Vector::new(), &mut 0);
code.push_str(&format!("{} = (Ref \"{}\" {})\n", Term::to_hs_name(name), name, expr));
}
code

View File

@ -37,7 +37,7 @@ fn generate_check_hvm1(book: &Book, command: &str, arg: &str) -> String {
fn generate_check_hs(book: &Book, command: &str, arg: &str) -> String {
let kind_hs = include_str!("./kind2.hs");
let kind_hs = kind_hs.lines().filter(|line| !line.starts_with("xString")).collect::<Vec<_>>().join("\n");
let book_hs = book.to_hs();
let book_hs = book.to_hs_checker();
let main_hs = match command {
"check" => format!("main = (apiCheck {})\n", Term::to_hs_name(arg)),
"run" => format!("main = (apiNormal {})\n", Term::to_hs_name(arg)),

View File

@ -23,11 +23,11 @@ impl Oper {
}
}
pub fn to_hvm1(&self) -> &'static str {
pub fn to_hvm1_checker(&self) -> &'static str {
self.to_ctr()
}
pub fn to_hs(&self) -> &'static str {
pub fn to_hs_checker(&self) -> &'static str {
self.to_ctr()
}
@ -35,7 +35,7 @@ impl Oper {
impl Term {
pub fn to_hvm1(&self, _env: im::Vector<String>, _met: &mut usize) -> String {
pub fn to_hvm1_checker(&self, _env: im::Vector<String>, _met: &mut usize) -> String {
todo!()
}
@ -43,34 +43,34 @@ impl Term {
format!("x{}", name.replace("-", "_").replace(".","_"))
}
pub fn to_hs(&self, env: im::Vector<String>, met: &mut usize) -> String {
pub fn to_hs_checker(&self, env: im::Vector<String>, met: &mut usize) -> String {
match self {
Term::All { nam, inp, bod } => {
let inp = inp.to_hs(env.clone(), met);
let bod = bod.to_hs(cons(&env, nam.clone()), met);
let inp = inp.to_hs_checker(env.clone(), met);
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
format!("(All \"{}\" {} $ \\{} -> {})", nam, inp, Term::to_hs_name(nam), bod)
},
Term::Lam { nam, bod } => {
let bod = bod.to_hs(cons(&env, nam.clone()), met);
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
format!("(Lam \"{}\" $ \\{} -> {})", nam, Term::to_hs_name(nam), bod)
},
Term::App { fun, arg } => {
let fun = fun.to_hs(env.clone(), met);
let arg = arg.to_hs(env.clone(), met);
let fun = fun.to_hs_checker(env.clone(), met);
let arg = arg.to_hs_checker(env.clone(), met);
format!("(App {} {})", fun, arg)
},
Term::Ann { chk, val, typ } => {
let val = val.to_hs(env.clone(), met);
let typ = typ.to_hs(env.clone(), met);
let val = val.to_hs_checker(env.clone(), met);
let typ = typ.to_hs_checker(env.clone(), met);
format!("(Ann {} {} {})", if *chk { "True" } else { "False" }, val, typ)
},
Term::Slf { nam, typ, bod } => {
let typ = typ.to_hs(env.clone(), met);
let bod = bod.to_hs(cons(&env, nam.clone()), met);
let typ = typ.to_hs_checker(env.clone(), met);
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
format!("(Slf \"{}\" {} $ \\{} -> {})", nam, typ, Term::to_hs_name(nam), bod)
},
Term::Ins { val } => {
let val = val.to_hs(env.clone(), met);
let val = val.to_hs_checker(env.clone(), met);
format!("(Ins {})", val)
},
Term::Set => {
@ -83,25 +83,25 @@ impl Term {
format!("(Num {})", val)
},
Term::Op2 { opr, fst, snd } => {
let fst = fst.to_hs(env.clone(), met);
let snd = snd.to_hs(env.clone(), met);
format!("(Op2 {} {} {})", opr.to_hs(), fst, snd)
let fst = fst.to_hs_checker(env.clone(), met);
let snd = snd.to_hs_checker(env.clone(), met);
format!("(Op2 {} {} {})", opr.to_hs_checker(), fst, snd)
},
Term::Swi { nam, x, z, s, p } => {
let x = x.to_hs(env.clone(), met);
let z = z.to_hs(env.clone(), met);
let s = s.to_hs(cons(&env, format!("{}-1", nam)), met);
let p = p.to_hs(cons(&env, nam.clone()), met);
let x = x.to_hs_checker(env.clone(), met);
let z = z.to_hs_checker(env.clone(), met);
let s = s.to_hs_checker(cons(&env, format!("{}-1", nam)), met);
let p = p.to_hs_checker(cons(&env, nam.clone()), met);
format!("(Swi \"{}\" {} {} (\\{} -> {}) (\\{} -> {}))", nam, x, z, Term::to_hs_name(&format!("{}-1", nam)), s, Term::to_hs_name(nam), p)
},
Term::Let { nam, val, bod } => {
let val = val.to_hs(env.clone(), met);
let bod = bod.to_hs(cons(&env, nam.clone()), met);
let val = val.to_hs_checker(env.clone(), met);
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
format!("(Let \"{}\" {} $ \\{} -> {})", nam, val, Term::to_hs_name(nam), bod)
},
Term::Use { nam, val, bod } => {
let val = val.to_hs(env.clone(), met);
let bod = bod.to_hs(cons(&env, nam.clone()), met);
let val = val.to_hs_checker(env.clone(), met);
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
format!("(Use \"{}\" {} $ \\{} -> {})", nam, val, Term::to_hs_name(nam), bod)
},
Term::Hol { nam } => {
@ -118,7 +118,7 @@ impl Term {
format!("{}", Term::to_hs_name(nam))
},
Term::Src { src, val } => {
let val = val.to_hs(env, met);
let val = val.to_hs_checker(env, met);
format!("(Src {} {})", src.to_u64(), val)
},
Term::Nat { nat } => {