perf(lang): Skip ordinary type specialization

a45e090d15bfe47b68e17380df560bf1e3f70d90897cceb94226c8c9a0c028a0
Return resolved node types directly while lowering ordinary functions. Only generic function specializations need recursive type substitution.
Alexis Sellier committed ago 1 parent f673b523
lib/std/lang/lower.rad +1 -0
2520 2520
2521 2521
/// Look up the resolved type of an AST node, or throw `MissingType`.
2522 2522
fn typeOf(self: *mut FnLowerer, node: *ast::Node) -> resolver::Type throws (LowerError) {
2523 2523
    let ty = resolver::typeFor(self.low.resolver, node)
2524 2524
        else throw LowerError::MissingType(node);
2525 +
    let _ = self.low.specialization else return ty;
2525 2526
    return try specializeType(self, ty);
2526 2527
}
2527 2528
2528 2529
/// Look up the symbol for an AST node, or throw `MissingSymbol`.
2529 2530
fn symOf(self: *mut FnLowerer, node: *ast::Node) -> *mut resolver::Symbol throws (LowerError) {