From edeafa07998def9b23f766c27f000b72d05ea34c Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Tue, 3 Sep 2024 10:37:20 -0300 Subject: [PATCH 1/4] feat: better println for Quoted --- .../noirc_frontend/src/hir/comptime/value.rs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/compiler/noirc_frontend/src/hir/comptime/value.rs b/compiler/noirc_frontend/src/hir/comptime/value.rs index b96c4852931..15a9abc0b68 100644 --- a/compiler/noirc_frontend/src/hir/comptime/value.rs +++ b/compiler/noirc_frontend/src/hir/comptime/value.rs @@ -571,6 +571,27 @@ impl<'value, 'interner> Display for ValuePrinter<'value, 'interner> { Token::QuotedType(id) => { write!(f, " {}", self.interner.get_quoted_type(*id))?; } + Token::InternedExpr(id) => { + let expr = self.interner.get_expression_kind(*id); + let expr = + remove_interned_in_expression_kind(self.interner, expr.clone()); + write!(f, "{}", expr)?; + } + Token::InternedStatement(id) => { + let stmt = self.interner.get_statement_kind(*id); + let stmt = + remove_interned_in_statement_kind(self.interner, stmt.clone()); + write!(f, "{}", stmt)?; + } + Token::InternedLValue(id) => { + let lvalue = self.interner.get_lvalue(*id, Span::default()); + let lvalue = remove_interned_in_lvalue(self.interner, lvalue.clone()); + write!(f, "{}", lvalue)?; + } + Token::InternedUnresolvedTypeData(id) => { + let typ = self.interner.get_unresolved_type_data(*id); + write!(f, "{}", typ)?; + } other => write!(f, " {other}")?, } } From d0123c3beb09cba25827bf7c2d4b883438d3e21f Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Tue, 3 Sep 2024 10:48:29 -0300 Subject: [PATCH 2/4] Add spaces --- compiler/noirc_frontend/src/hir/comptime/value.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/comptime/value.rs b/compiler/noirc_frontend/src/hir/comptime/value.rs index 15a9abc0b68..3161c20b728 100644 --- a/compiler/noirc_frontend/src/hir/comptime/value.rs +++ b/compiler/noirc_frontend/src/hir/comptime/value.rs @@ -575,22 +575,22 @@ impl<'value, 'interner> Display for ValuePrinter<'value, 'interner> { let expr = self.interner.get_expression_kind(*id); let expr = remove_interned_in_expression_kind(self.interner, expr.clone()); - write!(f, "{}", expr)?; + write!(f, " {}", expr)?; } Token::InternedStatement(id) => { let stmt = self.interner.get_statement_kind(*id); let stmt = remove_interned_in_statement_kind(self.interner, stmt.clone()); - write!(f, "{}", stmt)?; + write!(f, " {}", stmt)?; } Token::InternedLValue(id) => { let lvalue = self.interner.get_lvalue(*id, Span::default()); let lvalue = remove_interned_in_lvalue(self.interner, lvalue.clone()); - write!(f, "{}", lvalue)?; + write!(f, " {}", lvalue)?; } Token::InternedUnresolvedTypeData(id) => { let typ = self.interner.get_unresolved_type_data(*id); - write!(f, "{}", typ)?; + write!(f, " {}", typ)?; } other => write!(f, " {other}")?, } From a64e4c2a91b9a4e9eab66a30bdf50291c86aaf06 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Tue, 3 Sep 2024 13:01:21 -0300 Subject: [PATCH 3/4] Also handle UnquoteMarker --- compiler/noirc_frontend/src/hir/comptime/value.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler/noirc_frontend/src/hir/comptime/value.rs b/compiler/noirc_frontend/src/hir/comptime/value.rs index 3161c20b728..8351f5d8581 100644 --- a/compiler/noirc_frontend/src/hir/comptime/value.rs +++ b/compiler/noirc_frontend/src/hir/comptime/value.rs @@ -592,6 +592,11 @@ impl<'value, 'interner> Display for ValuePrinter<'value, 'interner> { let typ = self.interner.get_unresolved_type_data(*id); write!(f, " {}", typ)?; } + Token::UnquoteMarker(id) => { + let hir_expr = self.interner.expression(id); + let expr = hir_expr.to_display_ast(self.interner, Span::default()); + write!(f, " {}", expr.kind)?; + } other => write!(f, " {other}")?, } } From aead2cc40e98b955a7a6a9c3b0b77ddfb6a939bd Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Tue, 3 Sep 2024 14:15:39 -0300 Subject: [PATCH 4/4] Convert tokens to values, then print those. Also handle statements --- .../noirc_frontend/src/hir/comptime/value.rs | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/comptime/value.rs b/compiler/noirc_frontend/src/hir/comptime/value.rs index 8351f5d8581..c5818c20c57 100644 --- a/compiler/noirc_frontend/src/hir/comptime/value.rs +++ b/compiler/noirc_frontend/src/hir/comptime/value.rs @@ -567,37 +567,33 @@ impl<'value, 'interner> Display for ValuePrinter<'value, 'interner> { Value::Quoted(tokens) => { write!(f, "quote {{")?; for token in tokens.iter() { + write!(f, " ")?; + match token { Token::QuotedType(id) => { - write!(f, " {}", self.interner.get_quoted_type(*id))?; + write!(f, "{}", self.interner.get_quoted_type(*id))?; } Token::InternedExpr(id) => { - let expr = self.interner.get_expression_kind(*id); - let expr = - remove_interned_in_expression_kind(self.interner, expr.clone()); - write!(f, " {}", expr)?; + let value = Value::expression(ExpressionKind::Interned(*id)); + value.display(self.interner).fmt(f)?; } Token::InternedStatement(id) => { - let stmt = self.interner.get_statement_kind(*id); - let stmt = - remove_interned_in_statement_kind(self.interner, stmt.clone()); - write!(f, " {}", stmt)?; + let value = Value::statement(StatementKind::Interned(*id)); + value.display(self.interner).fmt(f)?; } Token::InternedLValue(id) => { - let lvalue = self.interner.get_lvalue(*id, Span::default()); - let lvalue = remove_interned_in_lvalue(self.interner, lvalue.clone()); - write!(f, " {}", lvalue)?; + let value = Value::lvalue(LValue::Interned(*id, Span::default())); + value.display(self.interner).fmt(f)?; } Token::InternedUnresolvedTypeData(id) => { - let typ = self.interner.get_unresolved_type_data(*id); - write!(f, " {}", typ)?; + let value = Value::UnresolvedType(UnresolvedTypeData::Interned(*id)); + value.display(self.interner).fmt(f)?; } Token::UnquoteMarker(id) => { - let hir_expr = self.interner.expression(id); - let expr = hir_expr.to_display_ast(self.interner, Span::default()); - write!(f, " {}", expr.kind)?; + let value = Value::TypedExpr(TypedExpr::ExprId(*id)); + value.display(self.interner).fmt(f)?; } - other => write!(f, " {other}")?, + other => write!(f, "{other}")?, } } write!(f, " }}") @@ -658,7 +654,16 @@ impl<'value, 'interner> Display for ValuePrinter<'value, 'interner> { Value::Expr(ExprValue::LValue(lvalue)) => { write!(f, "{}", remove_interned_in_lvalue(self.interner, lvalue.clone())) } - Value::TypedExpr(_) => write!(f, "(typed expr)"), + Value::TypedExpr(TypedExpr::ExprId(id)) => { + let hir_expr = self.interner.expression(id); + let expr = hir_expr.to_display_ast(self.interner, Span::default()); + write!(f, "{}", expr.kind) + } + Value::TypedExpr(TypedExpr::StmtId(id)) => { + let hir_statement = self.interner.statement(id); + let stmt = hir_statement.to_display_ast(self.interner, Span::default()); + write!(f, "{}", stmt.kind) + } Value::UnresolvedType(typ) => { if let UnresolvedTypeData::Interned(id) = typ { let typ = self.interner.get_unresolved_type_data(*id);