summary refs log tree commit diff
path: root/lib/strings.nix
diff options
context:
space:
mode:
authorNicolas B. Pierron <nicolas.b.pierron@gmail.com>2015-07-13 23:46:38 +0200
committerNicolas B. Pierron <nicolas.b.pierron@gmail.com>2015-07-13 23:46:38 +0200
commitbe65ac7c32e3d23ecc5964f11cc8e3c658128ec3 (patch)
treeb3a9f9f99050721936cc14ae2d9d45a70617bbf9 /lib/strings.nix
parent74f4b0d27ad8bd086e57d14b37e3d6d496cb0692 (diff)
downloadnixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.tar
nixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.tar.gz
nixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.tar.bz2
nixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.tar.lz
nixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.tar.xz
nixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.tar.zst
nixpkgs-be65ac7c32e3d23ecc5964f11cc8e3c658128ec3.zip
Issue 8152 - Reduce number of attribute set created by replaceChars.
Diffstat (limited to 'lib/strings.nix')
-rw-r--r--lib/strings.nix10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/strings.nix b/lib/strings.nix
index 39112407c57..d9f7f6c2db8 100644
--- a/lib/strings.nix
+++ b/lib/strings.nix
@@ -107,11 +107,13 @@ rec {
   # replaceChars ["<" ">"] ["&lt;" "&gt;"] "<foo>" returns "&lt;foo&gt;".
   replaceChars = del: new: s:
     let
+      substList = lib.zipLists del new;
       subst = c:
-        (lib.fold
-          (sub: res: if sub.fst == c then sub else res)
-          {fst = c; snd = c;} (lib.zipLists del new)
-        ).snd;
+        let found = lib.findFirst (sub: sub.fst == c) null substList; in
+        if found == null then
+          c
+        else
+          found.snd;
     in
       stringAsChars subst s;