Function.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2023, Dan Klishch <danilklishch@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "Function.h"
  7. #include "AST/AST.h"
  8. #include "Compiler/ControlFlowGraph.h"
  9. namespace JSSpecCompiler {
  10. void TranslationUnit::adopt_declaration(NonnullRefPtr<FunctionDeclaration>&& declaration)
  11. {
  12. declaration->m_translation_unit = this;
  13. function_index.set(declaration->m_name, declaration.ptr());
  14. declarations_owner.append(move(declaration));
  15. }
  16. FunctionDefinitionRef TranslationUnit::adopt_function(NonnullRefPtr<FunctionDefinition>&& function)
  17. {
  18. FunctionDefinitionRef result = function.ptr();
  19. functions_to_compile.append(result);
  20. adopt_declaration(function);
  21. return result;
  22. }
  23. FunctionDeclaration::FunctionDeclaration(StringView name)
  24. : m_name(name)
  25. {
  26. }
  27. FunctionDefinition::FunctionDefinition(StringView name, Tree ast, Vector<StringView>&& argument_names)
  28. : FunctionDeclaration(name)
  29. , m_ast(move(ast))
  30. , m_argument_names(move(argument_names))
  31. , m_named_return_value(make_ref_counted<NamedVariableDeclaration>("$return"sv))
  32. {
  33. }
  34. void FunctionDefinition::reindex_ssa_variables()
  35. {
  36. size_t index = 0;
  37. for (auto const& var : m_local_ssa_variables)
  38. var->m_index = index++;
  39. }
  40. }