preserves::value::merge has to return Option

This commit is contained in:
Tony Garnock-Jones 2021-09-11 02:51:56 +02:00
parent 5f2a3e3eb8
commit e43e85ce8e
2 changed files with 11 additions and 4 deletions

View File

@ -199,8 +199,12 @@ impl<'a, 'm> FunctionContext<'a, 'm> {
return item(seq!["Err", parens![self.conformance_err_code()]]);
}
pub fn fully_qualified_error_context(&self) -> String {
self.m.module_path.0.join(".") + "." + &self.error_context
}
pub fn conformance_err_code(&self) -> Item {
return item(seq!["_support::ParseError::conformance_error", parens![
escape_string(&(self.m.module_path.0.join(".") + "." + &self.error_context))]]);
escape_string(&self.fully_qualified_error_context())]]);
}
}

View File

@ -1,7 +1,7 @@
use crate::*;
use crate::gen::schema::*;
use crate::syntax::block::constructors::*;
use crate::syntax::block::{Emittable, Item};
use crate::syntax::block::{Emittable, Item, escape_string};
use std::cell::Cell;
use std::rc::Rc;
@ -82,8 +82,11 @@ pub fn gen_definition_unparser(m: &mut ModuleContext, n: &str, d: &Definition) {
ps.extend(pattern_n);
let (patpat, vc) = destruct(&mut ctxt, item(names::render_constructor(n)), true, &record_type(&ps));
body.push(item(seq!["let ", patpat, " = value;"]));
body.push(item(seq!["preserves::value::merge(vec!", brackets(ps.iter().map(
|p| named_pattern_unparser(&mut ctxt, p, &vc)).collect()), ")"]));
body.push(item(seq![
"preserves::value::merge(vec!", brackets(ps.iter().map(
|p| named_pattern_unparser(&mut ctxt, p, &vc)).collect()
), ").expect", parens![escape_string(&(
"merge of ".to_owned() + &ctxt.fully_qualified_error_context()))]]));
}
Definition::Pattern(p) => {
let (patpat, vc) = destruct(&mut ctxt, item(names::render_constructor(n)), true, &pattern_type(p));