diff options
Diffstat (limited to 'users/grfn/achilles/src/passes')
-rw-r--r-- | users/grfn/achilles/src/passes/hir/mod.rs | 22 | ||||
-rw-r--r-- | users/grfn/achilles/src/passes/hir/strip_positive_units.rs | 8 |
2 files changed, 23 insertions, 7 deletions
diff --git a/users/grfn/achilles/src/passes/hir/mod.rs b/users/grfn/achilles/src/passes/hir/mod.rs index 845bfcb7ab6a..872c449eb020 100644 --- a/users/grfn/achilles/src/passes/hir/mod.rs +++ b/users/grfn/achilles/src/passes/hir/mod.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use crate::ast::hir::{Binding, Decl, Expr}; +use crate::ast::hir::{Binding, Decl, Expr, Pattern}; use crate::ast::{BinaryOperator, Ident, Literal, UnaryOperator}; pub(crate) mod monomorphize; @@ -29,9 +29,12 @@ pub(crate) trait Visitor<'a, 'ast, T: 'ast>: Sized + 'a { Ok(()) } + fn visit_pattern(&mut self, _pat: &mut Pattern<'ast, T>) -> Result<(), Self::Error> { + Ok(()) + } + fn visit_binding(&mut self, binding: &mut Binding<'ast, T>) -> Result<(), Self::Error> { - self.visit_ident(&mut binding.ident)?; - self.visit_type(&mut binding.type_)?; + self.visit_pattern(&mut binding.pat)?; self.visit_expr(&mut binding.body)?; Ok(()) } @@ -54,6 +57,13 @@ pub(crate) trait Visitor<'a, 'ast, T: 'ast>: Sized + 'a { Ok(()) } + fn visit_tuple(&mut self, members: &mut Vec<Expr<'ast, T>>) -> Result<(), Self::Error> { + for expr in members { + self.visit_expr(expr)?; + } + Ok(()) + } + fn pre_visit_expr(&mut self, _expr: &mut Expr<'ast, T>) -> Result<(), Self::Error> { Ok(()) } @@ -137,12 +147,16 @@ pub(crate) trait Visitor<'a, 'ast, T: 'ast>: Sized + 'a { self.visit_type(type_)?; self.post_visit_call(fun, type_args, args)?; } + Expr::Tuple(tup, type_) => { + self.visit_tuple(tup)?; + self.visit_type(type_)?; + } } Ok(()) } - fn post_visit_decl(&mut self, decl: &'a Decl<'ast, T>) -> Result<(), Self::Error> { + fn post_visit_decl(&mut self, _decl: &'a Decl<'ast, T>) -> Result<(), Self::Error> { Ok(()) } diff --git a/users/grfn/achilles/src/passes/hir/strip_positive_units.rs b/users/grfn/achilles/src/passes/hir/strip_positive_units.rs index 91b56551c82d..85ee1cce4859 100644 --- a/users/grfn/achilles/src/passes/hir/strip_positive_units.rs +++ b/users/grfn/achilles/src/passes/hir/strip_positive_units.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::mem; -use ast::hir::Binding; +use ast::hir::{Binding, Pattern}; use ast::Literal; use void::{ResultVoidExt, Void}; @@ -42,8 +42,10 @@ impl<'a, 'ast> Visitor<'a, 'ast, ast::Type<'ast>> for StripPositiveUnits { bindings: extracted .into_iter() .map(|expr| Binding { - ident: Ident::from_str_unchecked("___discarded"), - type_: expr.type_().clone(), + pat: Pattern::Id( + Ident::from_str_unchecked("___discarded"), + expr.type_().clone(), + ), body: expr, }) .collect(), |