perf(lang): Reuse generic dependency arguments
fccaefc741632447e52a9af467e846ec165878d7dd5184121ad8fd7b7f91452c
Generic call arguments already live in the resolver arena. Store that canonical slice on dependency edges instead of allocating and interning a duplicate slice.
1 parent
5d2b63a3
lib/std/lang/resolver.rad
+1 -6
| 4156 | 4156 | caller: ?*mut Symbol, |
|
| 4157 | 4157 | callee: *mut Symbol, |
|
| 4158 | 4158 | args: *[*Type], |
|
| 4159 | 4159 | fnType: *FnType, |
|
| 4160 | 4160 | ) { |
|
| 4161 | - | let a = alloc::arenaAllocator(&mut self.arena); |
|
| 4162 | - | let mut storedArgs: *mut [*Type] = &mut []; |
|
| 4163 | - | for arg in args { |
|
| 4164 | - | storedArgs.append(allocType(self, *arg), a); |
|
| 4165 | - | } |
|
| 4166 | 4161 | let dependency = try! alloc::alloc( |
|
| 4167 | 4162 | &mut self.arena, |
|
| 4168 | 4163 | @sizeOf(GenericFnDependency), |
|
| 4169 | 4164 | @alignOf(GenericFnDependency), |
|
| 4170 | 4165 | ) as *mut GenericFnDependency; |
|
| 4171 | 4166 | set *dependency = GenericFnDependency { |
|
| 4172 | 4167 | caller, |
|
| 4173 | 4168 | callee, |
|
| 4174 | - | args: &storedArgs[..], |
|
| 4169 | + | args, |
|
| 4175 | 4170 | site: node, |
|
| 4176 | 4171 | next: self.genericFnDependencies, |
|
| 4177 | 4172 | }; |
|
| 4178 | 4173 | set self.genericFnDependencies = dependency; |
|
| 4179 | 4174 | setNodeSymbol(self, node, callee); |