summaryrefslogtreecommitdiff
path: root/json4cpp/tools/gdb_pretty_printer/nlohmann-json.py
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:42:50 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:42:50 +0300
commit5fad10f89c485cfdc7b99011f07609f8871160d4 (patch)
tree1860b39753b652dfe54d3cbbc80c875f40198d1f /json4cpp/tools/gdb_pretty_printer/nlohmann-json.py
parent292baed7ac0cf84263263966ed32ed113cae857f (diff)
parent9a737481aed085fd289f82dff1fa8c3c66627a7e (diff)
downloadProject-Tick-5fad10f89c485cfdc7b99011f07609f8871160d4.tar.gz
Project-Tick-5fad10f89c485cfdc7b99011f07609f8871160d4.zip
Add 'json4cpp/' from commit '9a737481aed085fd289f82dff1fa8c3c66627a7e'
git-subtree-dir: json4cpp git-subtree-mainline: 292baed7ac0cf84263263966ed32ed113cae857f git-subtree-split: 9a737481aed085fd289f82dff1fa8c3c66627a7e
Diffstat (limited to 'json4cpp/tools/gdb_pretty_printer/nlohmann-json.py')
-rw-r--r--json4cpp/tools/gdb_pretty_printer/nlohmann-json.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/json4cpp/tools/gdb_pretty_printer/nlohmann-json.py b/json4cpp/tools/gdb_pretty_printer/nlohmann-json.py
new file mode 100644
index 0000000000..2c120befd9
--- /dev/null
+++ b/json4cpp/tools/gdb_pretty_printer/nlohmann-json.py
@@ -0,0 +1,35 @@
+import gdb
+import re
+
+ns_pattern = re.compile(r'nlohmann(::json_abi(?P<tags>\w*)(_v(?P<v_major>\d+)_(?P<v_minor>\d+)_(?P<v_patch>\d+))?)?::(?P<name>.+)')
+class JsonValuePrinter:
+ "Print a json-value"
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ if self.val.type.strip_typedefs().code == gdb.TYPE_CODE_FLT:
+ return ("%.6f" % float(self.val)).rstrip("0")
+ return self.val
+
+def json_lookup_function(val):
+ if m := ns_pattern.fullmatch(str(val.type.strip_typedefs().name)):
+ name = m.group('name')
+ if name and name.startswith('basic_json<') and name.endswith('>'):
+ m_data = val['m_data']
+ m_type = m_data['m_type']
+ m = ns_pattern.fullmatch(str(m_type))
+ t = m.group('name')
+ prefix = 'detail::value_t::'
+ if t and t.startswith(prefix):
+ try:
+ union_val = m_data['m_value'][t.replace(prefix, '', 1)]
+ if union_val.type.code == gdb.TYPE_CODE_PTR:
+ return gdb.default_visualizer(union_val.dereference())
+ else:
+ return JsonValuePrinter(union_val)
+ except Exception:
+ return JsonValuePrinter(m_type)
+
+gdb.pretty_printers.append(json_lookup_function)