Skip to content

Commit 9a832da

Browse files
committed
fix(codegen): Allow optimization passes on class functions
1 parent ac3f2f4 commit 9a832da

9 files changed

Lines changed: 264 additions & 224 deletions

‎crates/rascal/src/internal/as2/hir/constant_folder.rs‎

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::internal::as2::ast::{BinaryOperator, UnaryOperator};
2-
use crate::internal::as2::hir::visitor::{MutVisitor, walk_expr};
2+
use crate::internal::as2::hir::visitor::{MutVisitor, walk_document, walk_expr};
33
use crate::internal::as2::hir::{ConstantKind, Document, Expr, ExprKind};
44
use std::borrow::Cow;
55

@@ -178,16 +178,7 @@ pub fn fold_constants(document: &mut Document) -> bool {
178178
anything_changed: false,
179179
};
180180

181-
match document {
182-
Document::Script { statements, .. } => {
183-
for statement in statements {
184-
folder.visit_statement(statement);
185-
}
186-
}
187-
Document::Interface(_interface) => {}
188-
Document::Class(_class) => {}
189-
Document::Invalid => {}
190-
}
181+
walk_document(&mut folder, document);
191182

192183
folder.anything_changed
193184
}

‎crates/rascal/src/internal/as2/hir/register_promoter.rs‎

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::internal::as2::ast::BinaryOperator;
2-
use crate::internal::as2::hir::visitor::{MutVisitor, walk_expr, walk_statement};
2+
use crate::internal::as2::hir::visitor::{MutVisitor, walk_document, walk_expr, walk_statement};
33
use crate::internal::as2::hir::{
44
ConstantKind, Document, EnumeratorTarget, Expr, ExprKind, ForCondition, Function, StatementKind,
55
};
@@ -116,14 +116,5 @@ impl MutVisitor for RegisterPromoter {
116116
pub fn promote_variables_to_registers(document: &mut Document) {
117117
let mut promoter = RegisterPromoter::default();
118118

119-
match document {
120-
Document::Script { statements, .. } => {
121-
for statement in statements {
122-
promoter.visit_statement(statement);
123-
}
124-
}
125-
Document::Interface(_interface) => {}
126-
Document::Class(_class) => {}
127-
Document::Invalid => {}
128-
}
119+
walk_document(&mut promoter, document);
129120
}

‎crates/rascal/src/internal/as2/hir/visitor.rs‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::internal::as2::hir::{
2-
Declaration, Expr, ExprKind, ForCondition, Function, StatementKind, SwitchElement,
2+
Declaration, Document, Expr, ExprKind, ForCondition, Function, StatementKind, SwitchElement,
33
};
44

55
pub trait MutVisitor {
@@ -256,3 +256,21 @@ pub fn walk_expr<V: MutVisitor + ?Sized>(visitor: &mut V, expr: &mut Expr) {
256256
ExprKind::ToggleQuality => {}
257257
}
258258
}
259+
260+
pub fn walk_document<V: MutVisitor + ?Sized>(visitor: &mut V, document: &mut Document) {
261+
match document {
262+
Document::Script { statements, .. } => {
263+
for statement in statements {
264+
visitor.visit_statement(statement);
265+
}
266+
}
267+
Document::Interface(_interface) => {}
268+
Document::Class(class) => {
269+
for function in class.functions.values_mut() {
270+
visitor.visit_function(&mut function.function);
271+
}
272+
visitor.visit_function(&mut class.constructor);
273+
}
274+
Document::Invalid => {}
275+
}
276+
}

0 commit comments

Comments
 (0)