Repair and-pattern reading
This commit is contained in:
parent
aabe7b2623
commit
ef67347b8d
|
@ -111,8 +111,15 @@ pub fn gen_definition_reader(m: &mut ModuleContext, n: &str, d: &Definition) {
|
||||||
}
|
}
|
||||||
Definition::And { pattern_0, pattern_1, pattern_n } => {
|
Definition::And { pattern_0, pattern_1, pattern_n } => {
|
||||||
let mut ps = vec![&**pattern_0, &**pattern_1];
|
let mut ps = vec![&**pattern_0, &**pattern_1];
|
||||||
|
let mut need_restore = false;
|
||||||
ps.extend(pattern_n);
|
ps.extend(pattern_n);
|
||||||
|
ctxt.define_atom(&mut body, "_mark", item("r.mark()?"));
|
||||||
for e in &ps {
|
for e in &ps {
|
||||||
|
if need_restore {
|
||||||
|
body.push(item("r.restore(&_mark)?;"));
|
||||||
|
} else {
|
||||||
|
need_restore = true;
|
||||||
|
}
|
||||||
named_pattern_reader(&mut ctxt, e, None, &mut body);
|
named_pattern_reader(&mut ctxt, e, None, &mut body);
|
||||||
}
|
}
|
||||||
construct(&ctxt, item(names::render_constructor(n)), true, &record_type(&ps), None, &mut body);
|
construct(&ctxt, item(names::render_constructor(n)), true, &record_type(&ps), None, &mut body);
|
||||||
|
|
Loading…
Reference in New Issue