| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_FORMAT_TEST_SUPPORT_H_ |
| #define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_FORMAT_TEST_SUPPORT_H_ |
| |
| #include "src/developer/debug/zxdb/expr/eval_context.h" |
| #include "src/developer/debug/zxdb/expr/format_node.h" |
| #include "src/developer/debug/zxdb/expr/format_options.h" |
| |
| namespace zxdb { |
| |
| // Evaluates and describes a single given node synchronously, running the message loop if necessary. |
| // This is not recursive. |
| void SyncFillAndDescribeFormatNode(const fxl::RefPtr<EvalContext>& eval_context, FormatNode* node, |
| const FormatOptions& opts); |
| |
| // A recursive version of SyncFillAndDescribeFormatNode(), this iterates into all children until |
| // there are no more children. |
| // |
| // Running this on real data can result in infinite recursion if there is a pointer loop. |
| void SyncFillAndDescribeFormatTree(const fxl::RefPtr<EvalContext>& eval_context, FormatNode* node, |
| const FormatOptions& opts); |
| |
| // Returns either: |
| // <type>, <description> |
| // if it's valid, or: |
| // Err: <err_message> |
| // if there's an error. |
| std::string GetFormatNodeTypeAndDescription(const FormatNode* node); |
| |
| // Fills the node's contents into a text structure, with each level indented two spaces. This does |
| // not fill node values or describe the nodes. |
| // |
| // <name> = <type>, <description> |
| // <child name> = <child type>, <child description> |
| // <child level 2 name> = <child 2 type>, <child 2 description> |
| // <child name> = <child type>, <child description> |
| std::string GetDebugTreeForFormatNode(const FormatNode* node); |
| |
| // Formats and describes the given ExprValue according to GetDebugTreeForExprValue() above. |
| // |
| // Note that normally the root name will be empty so it will start with " = <type>, <description>" |
| std::string GetDebugTreeForValue(const fxl::RefPtr<EvalContext>& eval_context, |
| const ExprValue& value, const FormatOptions& opts); |
| |
| } // namespace zxdb |
| |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_FORMAT_TEST_SUPPORT_H_ |