mysqlshdk/scripting/polyglot/languages/polyglot_common_context.h (39 lines of code) (raw):

/* * Copyright (c) 2024, 2025, Oracle and/or its affiliates. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2.0, * as published by the Free Software Foundation. * * This program is designed to work with certain software (including * but not limited to OpenSSL) that is licensed under separate terms, * as designated in a particular file or component or in included license * documentation. The authors of MySQL hereby grant you an additional * permission to link the program and your derivative works with the * separately licensed software that they have either included with * the program or referenced in the documentation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License, version 2.0, for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MYSQLSHDK_SCRIPTING_POLYGLOT_LANGUAGES_POLYGLOT_COMMON_CONTEXT_H_ #define MYSQLSHDK_SCRIPTING_POLYGLOT_LANGUAGES_POLYGLOT_COMMON_CONTEXT_H_ #include "mysqlshdk/scripting/polyglot/utils/polyglot_api_clean.h" #include <memory> #include "mysqlshdk/scripting/polyglot/native_wrappers/polyglot_collectable.h" #include "mysqlshdk/scripting/polyglot/utils/polyglot_scope.h" #include "mysqlshdk/scripting/polyglot/utils/polyglot_store.h" namespace shcore { namespace polyglot { /** * Common context for GraalVM Languages * * Encloses the following global routines/components: * * - Initialization/TearDown of the GraalVM Isolate. * - Registration of global logging callbacks. * - Setup of the global engine. * - Provides access to the garbage collector for event registration. * * This class can be specialized to: * * - Provide custom callbacks for the global logging functions. * - Create a custom Engine to be used in the contexts created from this class. * - Provide custom configuration for the garbage collector. */ class Polyglot_common_context { public: Polyglot_common_context() = default; virtual ~Polyglot_common_context() = default; virtual void initialize(const std::vector<std::string> &isolate_args); virtual void finalize(); poly_reference engine() const { return m_engine.get(); } poly_isolate isolate() const { return m_isolate; } poly_thread thread() const { return m_thread; } void clean_collectables(); Collectable_registry *collectable_registry() { return &m_registry; } protected: poly_isolate m_isolate = nullptr; poly_thread m_thread = nullptr; private: void init_engine(); static void fatal_error_callback(void *data); static void flush_callback(void *data); static void log_callback(const char *bytes, size_t length, void *data); virtual void fatal_error() = 0; virtual void flush() = 0; virtual void log(const char *bytes, size_t length) = 0; virtual poly_engine create_engine() { return nullptr; } Store m_engine; std::unique_ptr<Polyglot_scope> m_scope; Collectable_registry m_registry; }; } // namespace polyglot } // namespace shcore #endif // MYSQLSHDK_SCRIPTING_POLYGLOT_LANGUAGES_POLYGLOT_COMMON_CONTEXT_H_