mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-29 17:16:15 +02:00
reduce copies during drv parsing
many paths need not be heap-allocated, and derivation env name/valye pairs can be moved into the map. before: Benchmark 1: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 6.883 s ± 0.016 s [User: 5.250 s, System: 1.424 s] Range (min … max): 6.860 s … 6.905 s 10 runs after: Benchmark 1: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 6.868 s ± 0.027 s [User: 5.194 s, System: 1.466 s] Range (min … max): 6.828 s … 6.913 s 10 runs
This commit is contained in:
parent
02c64abf1e
commit
c62686a95b
1 changed files with 7 additions and 7 deletions
|
@ -235,10 +235,10 @@ static void validatePath(std::string_view s) {
|
||||||
throw FormatError("bad path '%1%' in derivation", s);
|
throw FormatError("bad path '%1%' in derivation", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Path parsePath(StringViewStream & str)
|
static BackedStringView parsePath(StringViewStream & str)
|
||||||
{
|
{
|
||||||
auto s = parseString(str).toOwned();
|
auto s = parseString(str);
|
||||||
validatePath(s);
|
validatePath(*s);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ static StringSet parseStrings(StringViewStream & str, bool arePaths)
|
||||||
StringSet res;
|
StringSet res;
|
||||||
expect(str, "[");
|
expect(str, "[");
|
||||||
while (!endOfList(str))
|
while (!endOfList(str))
|
||||||
res.insert(arePaths ? parsePath(str) : parseString(str).toOwned());
|
res.insert((arePaths ? parsePath(str) : parseString(str)).toOwned());
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,9 +434,9 @@ Derivation parseDerivation(
|
||||||
expect(str, ",[");
|
expect(str, ",[");
|
||||||
while (!endOfList(str)) {
|
while (!endOfList(str)) {
|
||||||
expect(str, "(");
|
expect(str, "(");
|
||||||
Path drvPath = parsePath(str);
|
auto drvPath = parsePath(str);
|
||||||
expect(str, ",");
|
expect(str, ",");
|
||||||
drv.inputDrvs.map.insert_or_assign(store.parseStorePath(drvPath), parseDerivedPathMapNode(store, str, version));
|
drv.inputDrvs.map.insert_or_assign(store.parseStorePath(*drvPath), parseDerivedPathMapNode(store, str, version));
|
||||||
expect(str, ")");
|
expect(str, ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ Derivation parseDerivation(
|
||||||
expect(str, "("); auto name = parseString(str).toOwned();
|
expect(str, "("); auto name = parseString(str).toOwned();
|
||||||
expect(str, ","); auto value = parseString(str).toOwned();
|
expect(str, ","); auto value = parseString(str).toOwned();
|
||||||
expect(str, ")");
|
expect(str, ")");
|
||||||
drv.env[name] = value;
|
drv.env.insert_or_assign(std::move(name), std::move(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(str, ")");
|
expect(str, ")");
|
||||||
|
|
Loading…
Reference in a new issue