diff options
Diffstat (limited to 'src/mongo/db/exec/sbe/expressions/expression.cpp')
-rw-r--r-- | src/mongo/db/exec/sbe/expressions/expression.cpp | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/src/mongo/db/exec/sbe/expressions/expression.cpp b/src/mongo/db/exec/sbe/expressions/expression.cpp index d337cd8fa14..7176ce3e56a 100644 --- a/src/mongo/db/exec/sbe/expressions/expression.cpp +++ b/src/mongo/db/exec/sbe/expressions/expression.cpp @@ -239,6 +239,7 @@ std::vector<DebugPrinter::Block> EPrimBinary::debugPrint() const { invariant(!hasCollatorArg || isComparisonOp(_op)); + ret.emplace_back("(`"); DebugPrinter::addBlocks(ret, _nodes[0]->debugPrint()); switch (_op) { @@ -292,6 +293,7 @@ std::vector<DebugPrinter::Block> EPrimBinary::debugPrint() const { } DebugPrinter::addBlocks(ret, _nodes[1]->debugPrint()); + ret.emplace_back("`)"); return ret; } @@ -335,7 +337,9 @@ std::vector<DebugPrinter::Block> EPrimUnary::debugPrint() const { MONGO_UNREACHABLE; } + ret.emplace_back("`(`"); DebugPrinter::addBlocks(ret, _nodes[0]->debugPrint()); + ret.emplace_back("`)"); return ret; } @@ -733,7 +737,7 @@ std::vector<DebugPrinter::Block> EFunction::debugPrint() const { std::vector<DebugPrinter::Block> ret; DebugPrinter::addKeyword(ret, _name); - ret.emplace_back("(`"); + ret.emplace_back("`(`"); for (size_t idx = 0; idx < _nodes.size(); ++idx) { if (idx) { ret.emplace_back("`,"); @@ -780,20 +784,24 @@ vm::CodeFragment EIf::compileDirect(CompileCtx& ctx) const { std::vector<DebugPrinter::Block> EIf::debugPrint() const { std::vector<DebugPrinter::Block> ret; - DebugPrinter::addKeyword(ret, "if"); - ret.emplace_back("(`"); + ret.emplace_back(DebugPrinter::Block::cmdIncIndent); // Print the condition. + DebugPrinter::addKeyword(ret, "if"); DebugPrinter::addBlocks(ret, _nodes[0]->debugPrint()); - ret.emplace_back("`,"); + DebugPrinter::addNewLine(ret); + // Print thenBranch. + DebugPrinter::addKeyword(ret, "then"); DebugPrinter::addBlocks(ret, _nodes[1]->debugPrint()); - ret.emplace_back("`,"); + DebugPrinter::addNewLine(ret); + // Print elseBranch. + DebugPrinter::addKeyword(ret, "else"); DebugPrinter::addBlocks(ret, _nodes[2]->debugPrint()); - ret.emplace_back("`)"); + ret.emplace_back(DebugPrinter::Block::cmdDecIndent); return ret; } @@ -836,22 +844,30 @@ vm::CodeFragment ELocalBind::compileDirect(CompileCtx& ctx) const { std::vector<DebugPrinter::Block> ELocalBind::debugPrint() const { std::vector<DebugPrinter::Block> ret; - DebugPrinter::addKeyword(ret, "let"); + ret.emplace_back(DebugPrinter::Block::cmdIncIndent); + DebugPrinter::addKeyword(ret, "let"); ret.emplace_back("[`"); + ret.emplace_back(DebugPrinter::Block::cmdIncIndent); + for (size_t idx = 0; idx < _nodes.size() - 1; ++idx) { if (idx != 0) { - ret.emplace_back("`,"); + DebugPrinter::addNewLine(ret); } DebugPrinter::addIdentifier(ret, _frameId, idx); ret.emplace_back("="); DebugPrinter::addBlocks(ret, _nodes[idx]->debugPrint()); } - ret.emplace_back("`]"); + ret.emplace_back(DebugPrinter::Block::cmdDecIndent); + ret.emplace_back("]"); + DebugPrinter::addNewLine(ret); + DebugPrinter::addKeyword(ret, "in"); DebugPrinter::addBlocks(ret, _nodes.back()->debugPrint()); + ret.emplace_back(DebugPrinter::Block::cmdDecIndent); + return ret; } @@ -896,10 +912,13 @@ vm::CodeFragment ELocalLambda::compileDirect(CompileCtx& ctx) const { std::vector<DebugPrinter::Block> ELocalLambda::debugPrint() const { std::vector<DebugPrinter::Block> ret; - DebugPrinter::addKeyword(ret, "\\"); + DebugPrinter::addKeyword(ret, "lambda"); + ret.emplace_back("`(`"); DebugPrinter::addIdentifier(ret, _frameId, 0); - ret.emplace_back("."); + ret.emplace_back("`)"); + ret.emplace_back("{"); DebugPrinter::addBlocks(ret, _nodes.back()->debugPrint()); + ret.emplace_back("}"); return ret; } @@ -930,11 +949,13 @@ std::vector<DebugPrinter::Block> EFail::debugPrint() const { std::vector<DebugPrinter::Block> ret; DebugPrinter::addKeyword(ret, "fail"); - ret.emplace_back("("); + ret.emplace_back("`(`"); ret.emplace_back(std::to_string(_code)); - ret.emplace_back(",`"); + ret.emplace_back("`,"); + ret.emplace_back("\"`"); ret.emplace_back(getStringView(_messageTag, _messageVal)); + ret.emplace_back("`\"`"); ret.emplace_back("`)"); |