mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-16 14:54:29 +01:00
Merge pull request #16506 from Profpatsch/debug-trace
traceSeq, traceValSeq, deprecate strict
This commit is contained in:
commit
d21981c2a8
1 changed files with 7 additions and 21 deletions
|
@ -19,6 +19,10 @@ rec {
|
||||||
traceXMLVal = x: trace (builtins.toXML x) x;
|
traceXMLVal = x: trace (builtins.toXML x) x;
|
||||||
traceXMLValMarked = str: x: trace (str + builtins.toXML x) x;
|
traceXMLValMarked = str: x: trace (str + builtins.toXML x) x;
|
||||||
|
|
||||||
|
# strict trace functions (traced structure is fully evaluated and printed)
|
||||||
|
traceSeq = x: y: trace (builtins.deepSeq x x) y;
|
||||||
|
traceValSeq = v: traceVal (builtins.deepSeq v v);
|
||||||
|
|
||||||
# this can help debug your code as well - designed to not produce thousands of lines
|
# this can help debug your code as well - designed to not produce thousands of lines
|
||||||
traceShowVal = x : trace (showVal x) x;
|
traceShowVal = x : trace (showVal x) x;
|
||||||
traceShowValMarked = str: x: trace (str + showVal x) x;
|
traceShowValMarked = str: x: trace (str + showVal x) x;
|
||||||
|
@ -69,27 +73,9 @@ rec {
|
||||||
# usage: { testX = allTrue [ true ]; }
|
# usage: { testX = allTrue [ true ]; }
|
||||||
testAllTrue = expr : { inherit expr; expected = map (x: true) expr; };
|
testAllTrue = expr : { inherit expr; expected = map (x: true) expr; };
|
||||||
|
|
||||||
# evaluate everything once so that errors will occur earlier
|
strict = v:
|
||||||
# hacky: traverse attrs by adding a dummy
|
trace "Warning: strict is deprecated and will be removed in the next release"
|
||||||
# ignores functions (should this behavior change?) See strictf
|
(builtins.seq v v);
|
||||||
#
|
|
||||||
# Note: This should be a primop! Something like seq of haskell would be nice to
|
|
||||||
# have as well. It's used fore debugging only anyway
|
|
||||||
strict = x :
|
|
||||||
let
|
|
||||||
traverse = x :
|
|
||||||
if isString x then true
|
|
||||||
else if isAttrs x then
|
|
||||||
if x ? outPath then true
|
|
||||||
else all id (mapAttrsFlatten (n: traverse) x)
|
|
||||||
else if isList x then
|
|
||||||
all id (map traverse x)
|
|
||||||
else if isBool x then true
|
|
||||||
else if isFunction x then true
|
|
||||||
else if isInt x then true
|
|
||||||
else if x == null then true
|
|
||||||
else true; # a (store) path?
|
|
||||||
in if traverse x then x else throw "else never reached";
|
|
||||||
|
|
||||||
# example: (traceCallXml "myfun" id 3) will output something like
|
# example: (traceCallXml "myfun" id 3) will output something like
|
||||||
# calling myfun arg 1: 3 result: 3
|
# calling myfun arg 1: 3 result: 3
|
||||||
|
|
Loading…
Reference in a new issue