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.
Alexis Sellier committed ago 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);