diff options
author | Arne Döring <arne.doering@gmx.net> | 2019-02-12 08:27:38 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-02-13 23:30:14 +0100 |
commit | f4b2793bdfbb279defa5afa5b8ff7d409aae0e5f (patch) | |
tree | 89f5d3563812f4a17140c35f6c4f1f6d58a3dbbd /compiler/astalgo.nim | |
parent | 76df77f912759daf633e9cb113d996bdeb22ea72 (diff) | |
download | Nim-f4b2793bdfbb279defa5afa5b8ff7d409aae0e5f.tar.gz |
reduce debug output (#10638)
Diffstat (limited to 'compiler/astalgo.nim')
-rw-r--r-- | compiler/astalgo.nim | 121 |
1 files changed, 63 insertions, 58 deletions
diff --git a/compiler/astalgo.nim b/compiler/astalgo.nim index 60eecbdc5..48a651632 100644 --- a/compiler/astalgo.nim +++ b/compiler/astalgo.nim @@ -238,17 +238,6 @@ proc symToYamlAux(conf: ConfigRef; n: PSym, marker: var IntSet, proc typeToYamlAux(conf: ConfigRef; n: PType, marker: var IntSet, indent, maxRecDepth: int): Rope -proc ropeConstr(indent: int, c: openArray[Rope]): Rope = - # array of (name, value) pairs - var istr = rspaces(indent + 2) - result = rope("{") - var i = 0 - while i <= high(c): - if i > 0: add(result, ",") - addf(result, "$N$1\"$2\": $3", [istr, c[i], c[i + 1]]) - inc(i, 2) - addf(result, "$N$1}", [rspaces(indent)]) - proc symToYamlAux(conf: ConfigRef; n: PSym, marker: var IntSet, indent: int, maxRecDepth: int): Rope = if n == nil: @@ -257,51 +246,60 @@ proc symToYamlAux(conf: ConfigRef; n: PSym, marker: var IntSet, indent: int, result = "\"$1\"" % [rope(n.name.s)] else: var ast = treeToYamlAux(conf, n.ast, marker, indent + 2, maxRecDepth - 1) - result = ropeConstr(indent, [rope("kind"), - makeYamlString($n.kind), - rope("name"), makeYamlString(n.name.s), #rope("typ"), typeToYamlAux(conf, n.typ, marker, # indent + 2, maxRecDepth - 1), - rope("info"), lineInfoToStr(conf, n.info), - rope("flags"), flagsToStr(n.flags), - rope("magic"), makeYamlString($n.magic), - rope("ast"), ast, rope("options"), - flagsToStr(n.options), rope("position"), - rope(n.position), - rope("k"), makeYamlString($n.loc.k), - rope("storage"), makeYamlString($n.loc.storage), - rope("flags"), makeYamlString($n.loc.flags), - rope("r"), n.loc.r, - rope("lode"), treeToYamlAux(conf, n.loc.lode, marker, indent + 2, maxRecDepth - 1) - ]) + let istr = rspaces(indent + 2) + result = rope("{") + addf(result, "$N$1\"kind\": $2", [istr, makeYamlString($n.kind)]) + addf(result, "$N$1\"name\": $2", [istr, makeYamlString(n.name.s)]) + addf(result, "$N$1\"typ\": $2", [istr, typeToYamlAux(conf, n.typ, marker, indent + 2, maxRecDepth - 1)]) + if conf != nil: + # if we don't pass the config, we probably don't care about the line info + addf(result, "$N$1\"info\": $2", [istr, lineInfoToStr(conf, n.info)]) + if card(n.flags) > 0: + addf(result, "$N$1\"flags\": $2", [istr, flagsToStr(n.flags)]) + addf(result, "$N$1\"magic\": $2", [istr, makeYamlString($n.magic)]) + addf(result, "$N$1\"ast\": $2", [istr, ast]) + addf(result, "$N$1\"options\": $2", [istr, flagsToStr(n.options)]) + addf(result, "$N$1\"position\": $2", [istr, rope(n.position)]) + addf(result, "$N$1\"k\": $2", [istr, makeYamlString($n.loc.k)]) + addf(result, "$N$1\"storage\": $2", [istr, makeYamlString($n.loc.storage)]) + if card(n.loc.flags) > 0: + addf(result, "$N$1\"flags\": $2", [istr, makeYamlString($n.loc.flags)]) + addf(result, "$N$1\"r\": $2", [istr, n.loc.r]) + addf(result, "$N$1\"lode\": $2", [istr, treeToYamlAux(conf, n.loc.lode, marker, indent + 2, maxRecDepth - 1)]) + addf(result, "$N$1}", [rspaces(indent)]) proc typeToYamlAux(conf: ConfigRef; n: PType, marker: var IntSet, indent: int, maxRecDepth: int): Rope = + var sonsRope: Rope if n == nil: - result = rope("null") + sonsRope = rope("null") elif containsOrIncl(marker, n.id): - result = "\"$1 @$2\"" % [rope($n.kind), rope( + sonsRope = "\"$1 @$2\"" % [rope($n.kind), rope( strutils.toHex(cast[ByteAddress](n), sizeof(n) * 2))] else: if sonsLen(n) > 0: - result = rope("[") + sonsRope = rope("[") for i in countup(0, sonsLen(n) - 1): - if i > 0: add(result, ",") - addf(result, "$N$1$2", [rspaces(indent + 4), typeToYamlAux(conf, n.sons[i], + if i > 0: add(sonsRope, ",") + addf(sonsRope, "$N$1$2", [rspaces(indent + 4), typeToYamlAux(conf, n.sons[i], marker, indent + 4, maxRecDepth - 1)]) - addf(result, "$N$1]", [rspaces(indent + 2)]) + addf(sonsRope, "$N$1]", [rspaces(indent + 2)]) else: - result = rope("null") - result = ropeConstr(indent, [rope("kind"), - makeYamlString($n.kind), - rope("sym"), symToYamlAux(conf, n.sym, marker, - indent + 2, maxRecDepth - 1), rope("n"), treeToYamlAux(conf, n.n, marker, - indent + 2, maxRecDepth - 1), rope("flags"), flagsToStr(n.flags), - rope("callconv"), - makeYamlString(CallingConvToStr[n.callConv]), - rope("size"), rope(n.size), - rope("align"), rope(n.align), - rope("sons"), result]) + sonsRope = rope("null") + + let istr = rspaces(indent + 2) + result = rope("{") + addf(result, "$N$1\"kind\": $2", [istr, makeYamlString($n.kind)]) + addf(result, "$N$1\"sym\": $2", [istr, symToYamlAux(conf, n.sym, marker, indent + 2, maxRecDepth - 1)]) + addf(result, "$N$1\"n\": $2", [istr, treeToYamlAux(conf, n.n, marker, indent + 2, maxRecDepth - 1)]) + if card(n.flags) > 0: + addf(result, "$N$1\"flags\": $2", [istr, flagsToStr(n.flags)]) + addf(result, "$N$1\"callconv\": $2", [istr, makeYamlString(CallingConvToStr[n.callConv])]) + addf(result, "$N$1\"size\": $2", [istr, rope(n.size)]) + addf(result, "$N$1\"align\": $2", [istr, rope(n.align)]) + addf(result, "$N$1\"sons\": $2", [istr, sonsRope]) proc treeToYamlAux(conf: ConfigRef; n: PNode, marker: var IntSet, indent: int, maxRecDepth: int): Rope = @@ -311,7 +309,8 @@ proc treeToYamlAux(conf: ConfigRef; n: PNode, marker: var IntSet, indent: int, var istr = rspaces(indent + 2) result = "{$N$1\"kind\": $2" % [istr, makeYamlString($n.kind)] if maxRecDepth != 0: - addf(result, ",$N$1\"info\": $2", [istr, lineInfoToStr(conf, n.info)]) + if conf != nil: + addf(result, ",$N$1\"info\": $2", [istr, lineInfoToStr(conf, n.info)]) case n.kind of nkCharLit..nkInt64Lit: addf(result, ",$N$1\"intVal\": $2", [istr, rope(n.intVal)]) @@ -362,8 +361,8 @@ proc debugType(conf: ConfigRef; n: PType, maxRecDepth=100): Rope = add(result, " ") add(result, n.sym.name.s) if n.kind in IntegralTypes and n.n != nil: - add(result, ", node: ") - add(result, debugTree(conf, n.n, 2, maxRecDepth-1, renderType=true)) + add(result, ", n: ") + add(result, debugTree(conf, n.n, 2, maxRecDepth-1, renderType=false)) if (n.kind != tyString) and (sonsLen(n) > 0) and maxRecDepth != 0: add(result, "(") for i in countup(0, sonsLen(n) - 1): @@ -373,7 +372,7 @@ proc debugType(conf: ConfigRef; n: PType, maxRecDepth=100): Rope = else: add(result, debugType(conf, n.sons[i], maxRecDepth-1)) if n.kind == tyObject and n.n != nil: - add(result, ", node: ") + add(result, ", n: ") add(result, debugTree(conf, n.n, 2, maxRecDepth-1, renderType=true)) add(result, ")") @@ -387,9 +386,11 @@ proc debugTree(conf: ConfigRef; n: PNode, indent: int, maxRecDepth: int; [istr, makeYamlString($n.kind)] when defined(useNodeIds): addf(result, ",$N$1\"id\": $2", [istr, rope(n.id)]) - addf(result, ",$N$1\"info\": $2", [istr, lineInfoToStr(conf, n.info)]) + if conf != nil: + addf(result, ",$N$1\"info\": $2", [istr, lineInfoToStr(conf, n.info)]) if maxRecDepth != 0: - addf(result, ",$N$1\"flags\": $2", [istr, rope($n.flags)]) + if card(n.flags) > 0: + addf(result, ",$N$1\"flags\": $2", [istr, rope($n.flags)]) case n.kind of nkCharLit..nkUInt64Lit: addf(result, ",$N$1\"intVal\": $2", [istr, rope(n.intVal)]) @@ -400,15 +401,19 @@ proc debugTree(conf: ConfigRef; n: PNode, indent: int, maxRecDepth: int; addf(result, ",$N$1\"strVal\": $2", [istr, makeYamlString(n.strVal)]) of nkSym: let s = n.sym - addf(result, ",$N$1\"sym\": $2_$3 k: $4 storage: $5 flags: $6 r: $7", - [istr, rope(s.name.s), rope(s.id), - rope($s.loc.k), - rope($s.loc.storage), - rope($s.loc.flags), - s.loc.r - ]) -# [istr, symToYaml(conf, n.sym, indent, maxRecDepth), -# rope(n.sym.id)]) + var symStr = "" + symStr.add "\"kind\": " + symStr.add $s.kind + symStr.add ", \"name\": " + symStr.add s.name.s + symStr.add ", \"id\": " + symStr.add s.id + if s.kind in {skField, skEnumField, skParam}: + symStr.add ", \"position\": " + symStr.add s.position + addf(result, ",$N$1\"sym\": {$2}", [ + istr, rope(symStr)]) + if renderType and n.sym.typ != nil: addf(result, ",$N$1\"typ\": $2", [istr, debugType(conf, n.sym.typ, 2)]) of nkIdent: |