Added the ability to override the import handler in c.

This commit is contained in:
Chukobyte 2023-11-26 20:02:12 -05:00 committed by chukobyte
parent d478f9802f
commit 075b9c776c
4 changed files with 19 additions and 0 deletions

3
.gitignore vendored
View File

@ -3,6 +3,7 @@ __pycache__/
.ipynb_checkpoints
.DS_Store
.coverage
.idea
src/main
gmon.out
@ -35,5 +36,7 @@ main
pypi/
libpocketpy.dylib
cmake-build-*
.xmake/

View File

@ -13,6 +13,7 @@ extern "C" {
typedef struct pkpy_vm_handle pkpy_vm;
typedef int (*pkpy_CFunction)(pkpy_vm*);
typedef void (*pkpy_COutputHandler)(pkpy_vm*, const char*, int);
typedef const char* (*pkpy_CImportHandler)(const char*);
typedef int pkpy_CName;
typedef int pkpy_CType;
@ -95,6 +96,7 @@ PK_EXPORT pkpy_CName pkpy_name(const char* s);
PK_EXPORT pkpy_CString pkpy_name_to_string(pkpy_CName name);
PK_EXPORT void pkpy_compile_to_string(pkpy_vm*, const char* source, const char* filename, int mode, bool* ok, char** out);
PK_EXPORT void pkpy_set_output_handler(pkpy_vm*, pkpy_COutputHandler handler);
PK_EXPORT void pkpy_set_import_handler(pkpy_vm*, pkpy_CImportHandler handler);
/* REPL */
PK_EXPORT void* pkpy_new_repl(pkpy_vm*);

View File

@ -584,6 +584,16 @@ void pkpy_set_output_handler(pkpy_vm* vm_handle, pkpy_COutputHandler handler){
vm->_stdout = reinterpret_cast<PrintFunc>(handler);
}
void pkpy_set_import_handler(pkpy_vm* vm_handle, pkpy_CImportHandler handler){
VM* vm = (VM*) vm_handle;
static pkpy_CImportHandler activeHandler;
activeHandler = handler;
vm->_import_handler = [](const Str& str) -> pkpy::Bytes {
const char* returnString = activeHandler(str.c_str());
return { Str(returnString) };
};
}
void* pkpy_new_repl(pkpy_vm* vm_handle){
return new REPL((VM*)vm_handle);
}

View File

@ -246,6 +246,10 @@ void pkpy_set_output_handler(pkpy_vm* vm, pkpy_COutputHandler handler) {
}
void pkpy_set_import_handler(pkpy_vm* vm, pkpy_CImportHandler handler) {
}
void* pkpy_new_repl(pkpy_vm* vm) {
void* returnValue;
return returnValue;