/* * Copyright (c) 2023, Dan Klishch * * SPDX-License-Identifier: BSD-2-Clause */ #include "AST/AST.h" namespace JSSpecCompiler { Vector BinaryOperation::subtrees() { return { { &m_left }, { &m_right } }; } Vector UnaryOperation::subtrees() { return { { &m_operand } }; } Vector IsOneOfOperation::subtrees() { Vector result = { { &m_operand } }; for (auto& child : m_compare_values) result.append({ &child }); return result; } Vector ReturnExpression::subtrees() { return { { &m_return_value } }; } Vector AssertExpression::subtrees() { return { { &m_condition } }; } Vector IfBranch::subtrees() { return { { &m_condition }, { &m_branch } }; } Vector ElseIfBranch::subtrees() { if (m_condition.has_value()) return { { &m_condition.value() }, { &m_branch } }; return { { &m_branch } }; } Vector TreeList::subtrees() { Vector result; for (auto& expression : m_expressions) result.append({ &expression }); return result; } Vector RecordDirectListInitialization::subtrees() { Vector result { &m_type_reference }; for (auto& argument : m_arguments) { result.append({ &argument.name }); result.append({ &argument.value }); } return result; } Vector FunctionCall::subtrees() { Vector result = { { &m_name } }; for (auto& child : m_arguments) result.append({ &child }); return result; } }