Rename module and add comments

This commit is contained in:
imaqtkatt 2024-07-02 12:12:12 -03:00
parent 842891cbf4
commit 8ad65d7f6a
4 changed files with 13 additions and 8 deletions

View File

@ -495,18 +495,22 @@ impl<'a> TermParser<'a> {
self.skip_trivia();
let (cur_name, rule) = self.parse_rule()?;
let mut rules = vec![rule];
// the current index to backtack in case of fail to parse the next rule.
let mut nxt_term = *self.index();
loop {
self.skip_trivia();
// save the start position of the rule that can be a next def term.
let nxt_def = *self.index();
match self.parse_rule() {
Ok((name, rule)) => {
if name == "def" {
// parse the nxt def term.
self.index = nxt_def;
return Ok(Term::Def { nam: cur_name, rules, nxt: Box::new(self.parse_term()?) });
}
if name == cur_name {
rules.push(rule);
// save the current position.
nxt_term = *self.index();
} else {
let cur = *self.index();
@ -514,6 +518,7 @@ impl<'a> TermParser<'a> {
return self.with_ctx(Err(msg), nxt_def..cur);
}
}
// if failed it is a term.
Err(_) => break self.index = nxt_term,
}
}

View File

@ -5,12 +5,12 @@ use indexmap::IndexMap;
use crate::fun::{Book, Definition, Name, Pattern, Rule, Term};
impl Book {
pub fn lift_defs(&mut self) {
pub fn lift_local_defs(&mut self) {
let mut defs = IndexMap::new();
for (name, def) in self.defs.iter_mut() {
let mut gen = 0;
for rule in def.rules.iter_mut() {
rule.body.lift_defs(name, &mut defs, &mut gen);
rule.body.lift_local_defs(name, &mut defs, &mut gen);
}
}
self.defs.extend(defs);
@ -24,14 +24,14 @@ impl Rule {
}
impl Term {
pub fn lift_defs(&mut self, parent: &Name, defs: &mut IndexMap<Name, Definition>, gen: &mut usize) {
pub fn lift_local_defs(&mut self, parent: &Name, defs: &mut IndexMap<Name, Definition>, gen: &mut usize) {
match self {
Term::Def { nam, rules, nxt } => {
let local_name = Name::new(format!("{}__local_{}_{}", parent, gen, nam));
for rule in rules.iter_mut() {
rule.body.lift_defs(&local_name, defs, gen);
rule.body.lift_local_defs(&local_name, defs, gen);
}
nxt.lift_defs(parent, defs, gen);
nxt.lift_local_defs(parent, defs, gen);
*gen += 1;
let inner_defs =
@ -46,7 +46,7 @@ impl Term {
}
_ => {
for child in self.children_mut() {
child.lift_defs(parent, defs, gen);
child.lift_local_defs(parent, defs, gen);
}
}
}

View File

@ -14,7 +14,7 @@ pub mod expand_main;
pub mod fix_match_defs;
pub mod fix_match_terms;
pub mod float_combinators;
pub mod lift_defs;
pub mod lift_local_defs;
pub mod linearize_matches;
pub mod linearize_vars;
pub mod resolve_refs;

View File

@ -90,7 +90,7 @@ pub fn desugar_book(
ctx.set_entrypoint();
ctx.book.lift_defs();
ctx.book.lift_local_defs();
ctx.book.encode_adts(opts.adt_encoding);