This commit is contained in:
blueloveTH 2023-12-09 18:26:53 +08:00
parent 3514114f2d
commit c9f93f126c
4 changed files with 22 additions and 10 deletions

View File

@ -1,34 +1,44 @@
#pragma once
inline const char* kPlatformStrings[] = {
"win32", // 0
"emscripten", // 1
"ios", // 2
"darwin", // 3
"android", // 4
"linux", // 5
"unknown" // 6
};
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
//define something for Windows (32-bit and 64-bit, this part is common)
#define PK_EXPORT __declspec(dllexport)
#define PK_SYS_PLATFORM "win32"
#define PK_SYS_PLATFORM 0
#elif __EMSCRIPTEN__
#include <emscripten.h>
#define PK_EXPORT EMSCRIPTEN_KEEPALIVE
#define PK_SYS_PLATFORM "emscripten"
#define PK_SYS_PLATFORM 1
#elif __APPLE__
#include <TargetConditionals.h>
#if TARGET_IPHONE_SIMULATOR
// iOS, tvOS, or watchOS Simulator
#define PK_SYS_PLATFORM "ios"
#define PK_SYS_PLATFORM 2
#elif TARGET_OS_IPHONE
// iOS, tvOS, or watchOS device
#define PK_SYS_PLATFORM "ios"
#define PK_SYS_PLATFORM 2
#elif TARGET_OS_MAC
#define PK_SYS_PLATFORM "darwin"
#define PK_SYS_PLATFORM 3
#else
# error "Unknown Apple platform"
#endif
#define PK_EXPORT __attribute__((visibility("default")))
#elif __ANDROID__
#define PK_EXPORT __attribute__((visibility("default")))
#define PK_SYS_PLATFORM "android"
#define PK_SYS_PLATFORM 4
#elif __linux__
#define PK_EXPORT __attribute__((visibility("default")))
#define PK_SYS_PLATFORM "linux"
#define PK_SYS_PLATFORM 5
#else
#define PK_EXPORT
#define PK_SYS_PLATFORM "unknown"
#define PK_SYS_PLATFORM 6
#endif

View File

@ -136,12 +136,14 @@ void add_module_os(VM* vm){
return vm->None;
});
#if PK_SYS_PLATFORM != 2
// system
vm->bind_func<1>(mod, "system", [](VM* vm, ArgsView args){
std::string cmd = CAST(Str&, args[0]).str();
int ret = system(cmd.c_str());
return VAR(ret);
});
#endif
vm->bind_func<1>(mod, "listdir", [](VM* vm, ArgsView args){
std::filesystem::path path(CAST(Str&, args[0]).sv());

View File

@ -1431,7 +1431,7 @@ void add_module_time(VM* vm){
void add_module_sys(VM* vm){
PyObject* mod = vm->new_module("sys");
vm->setattr(mod, "version", VAR(PK_VERSION));
vm->setattr(mod, "platform", VAR(PK_SYS_PLATFORM));
vm->setattr(mod, "platform", VAR(kPlatformStrings[PK_SYS_PLATFORM]));
PyObject* stdout_ = vm->heap.gcnew<DummyInstance>(vm->tp_object);
PyObject* stderr_ = vm->heap.gcnew<DummyInstance>(vm->tp_object);

View File

@ -3,7 +3,7 @@
namespace pkpy {
REPL::REPL(VM* vm) : vm(vm){
vm->stdout_write("pocketpy " PK_VERSION " (" __DATE__ ", " __TIME__ ") ");
vm->stdout_write(fmt("[", sizeof(void*)*8, " bit] on ", PK_SYS_PLATFORM "\n"));
vm->stdout_write(fmt("[", sizeof(void*)*8, " bit] on ", kPlatformStrings[PK_SYS_PLATFORM], "\n"));
vm->stdout_write("https://github.com/blueloveTH/pocketpy" "\n");
vm->stdout_write("Type \"exit()\" to exit." "\n");
}