/* * Copyright (c) 2023, Dan Klishch * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include "Forward.h" namespace JSSpecCompiler { struct TranslationUnit { void adopt_declaration(NonnullRefPtr&& declaration); FunctionDefinitionRef adopt_function(NonnullRefPtr&& definition); StringView filename; Vector functions_to_compile; Vector> declarations_owner; HashMap function_index; }; class FunctionDeclaration : public RefCounted { public: FunctionDeclaration(StringView name); virtual ~FunctionDeclaration() = default; TranslationUnitRef m_translation_unit = nullptr; StringView m_name; }; class FunctionDefinition : public FunctionDeclaration { public: FunctionDefinition(StringView name, Tree ast, Vector&& argument_names); void reindex_ssa_variables(); Tree m_ast; Vector m_argument_names; // Populates during reference resolving // NOTE: The hash map here is ordered since we do not want random hash changes to break our test // expectations (looking at you, SipHash). OrderedHashMap m_local_variables; // Fields populate during CFG building NamedVariableDeclarationRef m_named_return_value; RefPtr m_cfg; // Fields populate during SSA building Vector m_arguments; SSAVariableDeclarationRef m_return_value; Vector m_local_ssa_variables; }; }