perf(lang): Skip ordinary type specialization
a45e090d15bfe47b68e17380df560bf1e3f70d90897cceb94226c8c9a0c028a0
Return resolved node types directly while lowering ordinary functions. Only generic function specializations need recursive type substitution.
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) { |