From 075b9c776c8ef1558045d8447e4287227bf3e479 Mon Sep 17 00:00:00 2001 From: Chukobyte Date: Sun, 26 Nov 2023 20:02:12 -0500 Subject: [PATCH] Added the ability to override the import handler in c. --- .gitignore | 3 +++ include/pocketpy/pocketpy_c.h | 2 ++ src/pocketpy_c.cpp | 10 ++++++++++ src2/pocketpy_c.c | 4 ++++ 4 files changed, 19 insertions(+) diff --git a/.gitignore b/.gitignore index 4f300593..103d0abc 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/include/pocketpy/pocketpy_c.h b/include/pocketpy/pocketpy_c.h index 7ec9cfe9..a0318859 100644 --- a/include/pocketpy/pocketpy_c.h +++ b/include/pocketpy/pocketpy_c.h @@ -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*); diff --git a/src/pocketpy_c.cpp b/src/pocketpy_c.cpp index dfa5ac40..2fde22e1 100644 --- a/src/pocketpy_c.cpp +++ b/src/pocketpy_c.cpp @@ -584,6 +584,16 @@ void pkpy_set_output_handler(pkpy_vm* vm_handle, pkpy_COutputHandler handler){ vm->_stdout = reinterpret_cast(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); } diff --git a/src2/pocketpy_c.c b/src2/pocketpy_c.c index 5892fe42..0d61dcd6 100644 --- a/src2/pocketpy_c.c +++ b/src2/pocketpy_c.c @@ -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;