diff options
author | Alyssa Ross <hi@alyssa.is> | 2024-03-22 16:41:59 +0100 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2024-03-22 16:41:59 +0100 |
commit | 46a88117a05c3469af5d99433af140c3de8ca088 (patch) | |
tree | d7f0557756d8f07a3081b3498c05ddc5a8ad429d /nixpkgs/lib/strings.nix | |
parent | e97457545cea0b2ca421da257c83d8f1ef451d85 (diff) | |
parent | a343533bccc62400e8a9560423486a3b6c11a23b (diff) | |
download | nixlib-46a88117a05c3469af5d99433af140c3de8ca088.tar nixlib-46a88117a05c3469af5d99433af140c3de8ca088.tar.gz nixlib-46a88117a05c3469af5d99433af140c3de8ca088.tar.bz2 nixlib-46a88117a05c3469af5d99433af140c3de8ca088.tar.lz nixlib-46a88117a05c3469af5d99433af140c3de8ca088.tar.xz nixlib-46a88117a05c3469af5d99433af140c3de8ca088.tar.zst nixlib-46a88117a05c3469af5d99433af140c3de8ca088.zip |
Merge commit 'a343533bccc62400e8a9560423486a3b6c11a23b'
Diffstat (limited to 'nixpkgs/lib/strings.nix')
-rw-r--r-- | nixpkgs/lib/strings.nix | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/nixpkgs/lib/strings.nix b/nixpkgs/lib/strings.nix index 47ee095f1b68..32efc9bdb70e 100644 --- a/nixpkgs/lib/strings.nix +++ b/nixpkgs/lib/strings.nix @@ -1038,30 +1038,32 @@ rec { toInt "3.14" => error: floating point JSON numbers are not supported */ - toInt = str: + toInt = + let + matchStripInput = match "[[:space:]]*(-?[[:digit:]]+)[[:space:]]*"; + matchLeadingZero = match "0[[:digit:]]+"; + in + str: let # RegEx: Match any leading whitespace, possibly a '-', one or more digits, # and finally match any trailing whitespace. - strippedInput = match "[[:space:]]*(-?[[:digit:]]+)[[:space:]]*" str; + strippedInput = matchStripInput str; # RegEx: Match a leading '0' then one or more digits. - isLeadingZero = match "0[[:digit:]]+" (head strippedInput) == []; + isLeadingZero = matchLeadingZero (head strippedInput) == []; # Attempt to parse input parsedInput = fromJSON (head strippedInput); generalError = "toInt: Could not convert ${escapeNixString str} to int."; - octalAmbigError = "toInt: Ambiguity in interpretation of ${escapeNixString str}" - + " between octal and zero padded integer."; - in # Error on presence of non digit characters. if strippedInput == null then throw generalError # Error on presence of leading zero/octal ambiguity. else if isLeadingZero - then throw octalAmbigError + then throw "toInt: Ambiguity in interpretation of ${escapeNixString str} between octal and zero padded integer." # Error if parse function fails. else if !isInt parsedInput then throw generalError @@ -1089,15 +1091,20 @@ rec { toIntBase10 "3.14" => error: floating point JSON numbers are not supported */ - toIntBase10 = str: + toIntBase10 = + let + matchStripInput = match "[[:space:]]*0*(-?[[:digit:]]+)[[:space:]]*"; + matchZero = match "0+"; + in + str: let # RegEx: Match any leading whitespace, then match any zero padding, # capture possibly a '-' followed by one or more digits, # and finally match any trailing whitespace. - strippedInput = match "[[:space:]]*0*(-?[[:digit:]]+)[[:space:]]*" str; + strippedInput = matchStripInput str; # RegEx: Match at least one '0'. - isZero = match "0+" (head strippedInput) == []; + isZero = matchZero (head strippedInput) == []; # Attempt to parse input parsedInput = fromJSON (head strippedInput); |