Tighten up reduced_ast code a bit

This commit is contained in:
Greg Shuflin 2021-10-18 23:10:50 -07:00
parent 845461e2b3
commit 2609dd404a

View File

@ -178,9 +178,8 @@ impl<'a> Reducer<'a> {
} }
fn value(&mut self, qualified_name: &QualifiedName) -> Expr { fn value(&mut self, qualified_name: &QualifiedName) -> Expr {
let symbol_table = self.symbol_table;
let ref id = qualified_name.id; let ref id = qualified_name.id;
let ref sym_name = match symbol_table.get_fqsn_from_id(id) { let ref sym_name = match self.symbol_table.get_fqsn_from_id(id) {
Some(fqsn) => fqsn, Some(fqsn) => fqsn,
None => return Expr::ReductionError(format!("FQSN lookup for Value {:?} failed", qualified_name)), None => return Expr::ReductionError(format!("FQSN lookup for Value {:?} failed", qualified_name)),
}; };
@ -189,7 +188,7 @@ impl<'a> Reducer<'a> {
let FullyQualifiedSymbolName(ref v) = sym_name; let FullyQualifiedSymbolName(ref v) = sym_name;
let name = v.last().unwrap().name.clone(); let name = v.last().unwrap().name.clone();
let Symbol { local_name, spec, .. } = match symbol_table.lookup_by_fqsn(&sym_name) { let Symbol { local_name, spec, .. } = match self.symbol_table.lookup_by_fqsn(&sym_name) {
Some(s) => s, Some(s) => s,
//None => return Expr::ReductionError(format!("Symbol {:?} not found", sym_name)), //None => return Expr::ReductionError(format!("Symbol {:?} not found", sym_name)),
None => return Expr::Sym(name.clone()) None => return Expr::Sym(name.clone())
@ -218,15 +217,14 @@ impl<'a> Reducer<'a> {
} }
fn reduce_named_struct(&mut self, name: &QualifiedName, fields: &Vec<(Rc<String>, Expression)>) -> Expr { fn reduce_named_struct(&mut self, name: &QualifiedName, fields: &Vec<(Rc<String>, Expression)>) -> Expr {
let symbol_table = self.symbol_table; let ref sym_name = match self.symbol_table.get_fqsn_from_id(&name.id) {
let ref sym_name = match symbol_table.get_fqsn_from_id(&name.id) {
Some(fqsn) => fqsn, Some(fqsn) => fqsn,
None => return Expr::ReductionError(format!("FQSN lookup for name {:?} failed", name)), None => return Expr::ReductionError(format!("FQSN lookup for name {:?} failed", name)),
}; };
let FullyQualifiedSymbolName(ref v) = sym_name; let FullyQualifiedSymbolName(ref v) = sym_name;
let ref name = v.last().unwrap().name; let ref name = v.last().unwrap().name;
let (type_name, index, members_from_table) = match symbol_table.lookup_by_fqsn(&sym_name) { let (type_name, index, members_from_table) = match self.symbol_table.lookup_by_fqsn(&sym_name) {
Some(Symbol { spec: SymbolSpec::RecordConstructor { members, type_name, index }, .. }) => (type_name.clone(), index, members), Some(Symbol { spec: SymbolSpec::RecordConstructor { members, type_name, index }, .. }) => (type_name.clone(), index, members),
_ => return Expr::ReductionError("Not a record constructor".to_string()), _ => return Expr::ReductionError("Not a record constructor".to_string()),
}; };
@ -254,7 +252,6 @@ impl<'a> Reducer<'a> {
} }
fn reduce_if_expression(&mut self, discriminator: Option<&Expression>, body: &IfExpressionBody) -> Expr { fn reduce_if_expression(&mut self, discriminator: Option<&Expression>, body: &IfExpressionBody) -> Expr {
let symbol_table = self.symbol_table;
let cond = Box::new(match discriminator { let cond = Box::new(match discriminator {
Some(expr) => self.expression(expr), Some(expr) => self.expression(expr),
None => return Expr::ReductionError(format!("blank cond if-expr not supported")), None => return Expr::ReductionError(format!("blank cond if-expr not supported")),
@ -277,7 +274,7 @@ impl<'a> Reducer<'a> {
}; };
let alternatives = vec![ let alternatives = vec![
pattern.to_alternative(then_clause, symbol_table), pattern.to_alternative(then_clause, self.symbol_table),
Alternative { Alternative {
matchable: Subpattern { matchable: Subpattern {
tag: None, tag: None,
@ -303,7 +300,7 @@ impl<'a> Reducer<'a> {
}, },
Condition::Pattern(ref p) => { Condition::Pattern(ref p) => {
let item = self.block(&arm.body); let item = self.block(&arm.body);
let alt = p.to_alternative(item, symbol_table); let alt = p.to_alternative(item, self.symbol_table);
alternatives.push(alt); alternatives.push(alt);
}, },
Condition::TruncatedOp(_, _) => { Condition::TruncatedOp(_, _) => {