/* This is the language server implementation. It handles how/when to use JS Scripts. */
#include "core/io/file_access.h"
#include "core/object/class_db.h"
#include "../../thirdparty/quickjs/quickjs_binder.h"
#include "javascript_language.h"
JavaScriptLanguage *JavaScriptLanguage::singleton = nullptr;
JavaScriptLanguage::JavaScriptLanguage() {
ERR_FAIL_COND(singleton);
singleton = this;
main_binder = memnew(QuickJSBinder);
callable_middleman = memnew(CallableMiddleman);
instance_binding_callbacks.create_callback = create_callback;
instance_binding_callbacks.free_callback = free_callback;
instance_binding_callbacks.reference_callback = reference_callback;
}
JavaScriptLanguage::~JavaScriptLanguage() {
memdelete(main_binder);
memdelete(callable_middleman);
}
void JavaScriptLanguage::init() {
ERR_FAIL_NULL(main_binder);
main_binder->initialize();
}
void JavaScriptLanguage::finish() {
ERR_FAIL_NULL(main_binder);
main_binder->uninitialize();
main_binder->language_finalize();
}
Error JavaScriptLanguage::execute_file(const String &code) {
ERR_FAIL_NULL_V(main_binder, ERR_BUG);
JavaScriptGCHandler eval_ret;
const Error err = main_binder->eval_string(code, JavaScriptBinder::EVAL_TYPE_GLOBAL, "test.js", eval_ret);
return err;
}
bool JavaScriptLanguage::validate(const String &p_script, const String &p_path, List