![]() |
MySQL 9.3.0
Source Code Documentation
|
The polyglot library may support several languages (guest languages), and provides out of the box C++ interfaces to handle common language elements, such as Objects, Maps, Arrays, Functions and primitive data types. More...
#include <polyglot_language.h>
Classes | |
class | Current_script |
class | Script_scope |
Public Member Functions | |
Polyglot_language (Polyglot_common_context *common_context, const std::string &debug_port="") | |
Polyglot_language (const Polyglot_language &)=delete | |
Polyglot_language & | operator= (const Polyglot_language &)=delete |
Polyglot_language (Polyglot_language &&)=delete | |
Polyglot_language & | operator= (Polyglot_language &&)=delete |
virtual | ~Polyglot_language ()=default |
virtual const char * | get_language_id () const =0 |
virtual void | init_context_builder () |
virtual void | initialize (const std::shared_ptr< IFile_system > &fs={}) |
virtual void | finalize () |
Polyglot_language * | language () |
The polyglot_utils file has the following functions that can be used to export C++ functions as polyglot global functions: More... | |
void | throw_jit_executor_exception (const Jit_executor_exception &exception) |
Throws a specific exception type in the GraalVM environment, with a specific message. More... | |
virtual poly_value | undefined () const =0 |
Return the a guest language interpretation of the Undefined C++ value. More... | |
virtual bool | is_undefined (poly_value value) const =0 |
Returns true if the provided value is undefined in the guest language. More... | |
virtual poly_value | array_buffer (const std::string &data) const =0 |
Return the guest language interpretation of a binary string. More... | |
virtual bool | is_object (poly_value object, std::string *class_name=nullptr) const =0 |
Return true if the guest language identifies the value as an object. More... | |
virtual poly_value | from_native_object (const Object_bridge_t &object) const =0 |
Converts a C++ object into a representation of the object in the guest language. More... | |
virtual shcore::Value | to_native_object (poly_value object, const std::string &class_name) |
Converts a guest language object into its C++ representation. More... | |
void | throw_exception_object (const shcore::Dictionary_t &data) const |
Translates a dictionary object into an exception in the guest language. More... | |
void | throw_exception_object (const Polyglot_error &data) const |
Translates a Polyglot_error into an exception in the guest language. More... | |
virtual const std::vector< std::string > & | keywords () const =0 |
Retrieves the list of keywords in the guest language. More... | |
int64_t | eval (const std::string &source, const std::string &code_str, poly_value *result) const |
Wraps a call to poly_context_eval. More... | |
poly_value | create_source (const std::string &path) const |
std::pair< Value, bool > | debug (const std::string &path) |
Debugs the given script. More... | |
std::pair< Value, bool > | execute (const std::string &code_str, const std::string &source) |
Executes the given script. More... | |
virtual bool | load_plugin (const std::string &path) |
This function should be implemented to provide plugin load support. More... | |
poly_context | copy_global_context () const |
Creates a copy of the global context. More... | |
poly_value | poly_string (const std::string &data) const |
std::string | to_string (poly_value obj) const |
poly_context | context () const |
poly_thread | thread () const |
const std::shared_ptr< Polyglot_object > & | globals () const |
poly_reference | store (poly_value value) |
void | erase (poly_reference value) |
void | set_global (const std::string &name, const Value &value) const |
void | set_global (const std::string &name, poly_value value) const |
void | set_global_function (const std::string &name, poly_callback callback, void *data=nullptr) |
Store | get_global (const std::string &name) const |
void | terminate () |
bool | is_terminating () const |
Script_scope | enter_script (const std::string &s) |
Value | convert (poly_value value) const |
poly_value | convert (const Value &value) const |
Argument_list | convert_args (const std::vector< poly_value > &args) const |
poly_value | type_info (poly_value value) const |
bool | get_member (poly_value object, const char *name, poly_value *member) const |
std::string | current_script_folder () const |
Polyglot_common_context * | common_context () |
Protected Member Functions | |
poly_value | wrap_callback (poly_callback callback, void *data) const |
void | clear_is_terminating () |
Protected Attributes | |
Polyglot_common_context * | m_common_context |
poly_thread | m_thread = nullptr |
poly_context_builder | m_context_builder = nullptr |
Store | m_context |
std::unique_ptr< Polyglot_type_bridger > | m_types |
std::shared_ptr< Polyglot_object > | m_globals |
Current_script | m_current_script |
std::unique_ptr< Polyglot_storage > | m_storage |
std::shared_ptr< IFile_system > | m_file_system |
std::string | m_debug_port |
Private Member Functions | |
void | set_file_system () |
void | throw_exception_object (poly_value exception) const |
virtual poly_value | create_exception_object (const std::string &error, poly_value exception_object) const =0 |
virtual void | output_handler (const char *bytes, size_t length)=0 |
virtual void | error_handler (const char *bytes, size_t length)=0 |
void | enable_debug () |
virtual std::optional< std::string > | get_debug_port () const |
Static Private Member Functions | |
static void | output_callback (const char *bytes, size_t length, void *data) |
static void | error_callback (const char *bytes, size_t length, void *data) |
Private Attributes | |
std::unique_ptr< Polyglot_scope > | m_scope |
bool | m_terminating = false |
The polyglot library may support several languages (guest languages), and provides out of the box C++ interfaces to handle common language elements, such as Objects, Maps, Arrays, Functions and primitive data types.
However, it does not provide out of the box C++ interface for guest language non primitive data types or specific objects.
This class is to be used as the base class to handle the common language elements supported in the polyglot library, any guest language supported by the shell is meant to extend this class and add handling of the elements that are specific to it.
|
explicit |
|
delete |
|
delete |
|
virtualdefault |
|
pure virtual |
Return the guest language interpretation of a binary string.
Implemented in shcore::polyglot::Java_script_interface.
|
protected |
|
inline |
poly_context shcore::polyglot::Polyglot_language::context | ( | ) | const |
poly_value shcore::polyglot::Polyglot_language::convert | ( | const Value & | value | ) | const |
Value shcore::polyglot::Polyglot_language::convert | ( | poly_value | value | ) | const |
Argument_list shcore::polyglot::Polyglot_language::convert_args | ( | const std::vector< poly_value > & | args | ) | const |
poly_context shcore::polyglot::Polyglot_language::copy_global_context | ( | ) | const |
Creates a copy of the global context.
Context needs to be either deleted immediately (i.e.
in case of an error), or stored till JS context exists (in order to preserve execution environment).
|
privatepure virtual |
Implemented in shcore::polyglot::Java_script_interface.
poly_value shcore::polyglot::Polyglot_language::create_source | ( | const std::string & | path | ) | const |
std::string shcore::polyglot::Polyglot_language::current_script_folder | ( | ) | const |
std::pair< Value, bool > shcore::polyglot::Polyglot_language::debug | ( | const std::string & | path | ) |
Debugs the given script.
|
private |
Polyglot_language::Script_scope shcore::polyglot::Polyglot_language::enter_script | ( | const std::string & | s | ) |
void shcore::polyglot::Polyglot_language::erase | ( | poly_reference | value | ) |
|
staticprivate |
|
privatepure virtual |
Implemented in jit_executor::JavaScript.
int64_t shcore::polyglot::Polyglot_language::eval | ( | const std::string & | source, |
const std::string & | code_str, | ||
poly_value * | result | ||
) | const |
Wraps a call to poly_context_eval.
std::pair< Value, bool > shcore::polyglot::Polyglot_language::execute | ( | const std::string & | code_str, |
const std::string & | source | ||
) |
Executes the given script.
|
virtual |
Reimplemented in shcore::polyglot::Java_script_interface.
|
pure virtual |
Converts a C++ object into a representation of the object in the guest language.
|
inlineprivatevirtual |
Store shcore::polyglot::Polyglot_language::get_global | ( | const std::string & | name | ) | const |
|
pure virtual |
Implemented in shcore::polyglot::Java_script_interface.
bool shcore::polyglot::Polyglot_language::get_member | ( | poly_value | object, |
const char * | name, | ||
poly_value * | member | ||
) | const |
const std::shared_ptr< Polyglot_object > & shcore::polyglot::Polyglot_language::globals | ( | ) | const |
|
virtual |
|
virtual |
Reimplemented in shcore::polyglot::Java_script_interface.
|
pure virtual |
Return true if the guest language identifies the value as an object.
Implemented in shcore::polyglot::Java_script_interface.
bool shcore::polyglot::Polyglot_language::is_terminating | ( | ) | const |
|
pure virtual |
Returns true if the provided value is undefined in the guest language.
Implemented in shcore::polyglot::Java_script_interface.
|
pure virtual |
Retrieves the list of keywords in the guest language.
Implemented in shcore::polyglot::Java_script_interface.
|
inline |
The polyglot_utils file has the following functions that can be used to export C++ functions as polyglot global functions:
These wrappers allow exposing class functions as long as the class containing them contains a language() function that returns a pointer to a Polyglot language.
This function, basically enables subclasses to expose functions as polyglot globals.
|
inlinevirtual |
This function should be implemented to provide plugin load support.
|
delete |
|
delete |
|
staticprivate |
|
privatepure virtual |
Implemented in jit_executor::JavaScript.
poly_value shcore::polyglot::Polyglot_language::poly_string | ( | const std::string & | data | ) | const |
|
private |
void shcore::polyglot::Polyglot_language::set_global | ( | const std::string & | name, |
const Value & | value | ||
) | const |
void shcore::polyglot::Polyglot_language::set_global | ( | const std::string & | name, |
poly_value | value | ||
) | const |
void shcore::polyglot::Polyglot_language::set_global_function | ( | const std::string & | name, |
poly_callback | callback, | ||
void * | data = nullptr |
||
) |
poly_reference shcore::polyglot::Polyglot_language::store | ( | poly_value | value | ) |
void shcore::polyglot::Polyglot_language::terminate | ( | ) |
poly_thread shcore::polyglot::Polyglot_language::thread | ( | ) | const |
void shcore::polyglot::Polyglot_language::throw_exception_object | ( | const Polyglot_error & | data | ) | const |
Translates a Polyglot_error into an exception in the guest language.
void shcore::polyglot::Polyglot_language::throw_exception_object | ( | const shcore::Dictionary_t & | data | ) | const |
Translates a dictionary object into an exception in the guest language.
|
private |
void shcore::polyglot::Polyglot_language::throw_jit_executor_exception | ( | const Jit_executor_exception & | exception | ) |
Throws a specific exception type in the GraalVM environment, with a specific message.
|
virtual |
Converts a guest language object into its C++ representation.
Reimplemented in jit_executor::JavaScript.
std::string shcore::polyglot::Polyglot_language::to_string | ( | poly_value | obj | ) | const |
poly_value shcore::polyglot::Polyglot_language::type_info | ( | poly_value | value | ) | const |
|
pure virtual |
Return the a guest language interpretation of the Undefined C++ value.
Implemented in shcore::polyglot::Java_script_interface.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
private |
|
protected |
|
private |
|
protected |
|
protected |