This commit is contained in:
blueloveTH 2023-02-06 20:49:39 +08:00
parent 90fce36a8c
commit 9f01810981
10 changed files with 62 additions and 53 deletions

View File

@ -32,6 +32,10 @@ class _MyAppState extends State<MyApp> {
// create a REPL
repl = pkpy.REPL(vm);
// create a binding
vm.bind<int>("builtins", "add", (int x, int y) => x + y);
vm.bind<String>("builtins", "test", (String x) => x.split(',').join('|'));
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
refresh();
});

View File

@ -108,7 +108,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.8.0+1"
version: "0.8.1"
sky_engine:
dependency: transitive
description: flutter

View File

@ -21,7 +21,6 @@ class StrWrapper {
dynamic invoke_f_any(ffi.Pointer<Utf8> p) {
String s = p.toDartString();
malloc.free(p);
var parts = s.split(' ');
List<dynamic> args = [];
for (int i = 1; i < parts.length; i++) {

View File

@ -124,7 +124,7 @@ class VM {
pointer, StrWrapper(mod).p, StrWrapper(name).p, t_code<T>());
if (p == ffi.nullptr) throw Exception("vm.bind() failed");
String s = p.toDartString();
malloc.free(p);
_Bindings.pkpy_delete(p);
register(s, f);
}
}

View File

@ -1,6 +1,6 @@
name: pocketpy
description: A lightweight Python interpreter for game engines. It supports Android/iOS/Web.
version: 0.8.0+2
version: 0.8.1
homepage: https://pocketpy.dev
repository: https://github.com/blueloveth/pocketpy

View File

@ -2055,10 +2055,6 @@ public:
return *this;
}
operator const char*() const {
return c_str();
}
~_Str(){
if(_u8_index != nullptr) delete _u8_index;
}
@ -6719,11 +6715,11 @@ extern "C" {
return strdup(ss.str().c_str());
}
typedef i64 (*f_int_t)(const char*);
typedef f64 (*f_float_t)(const char*);
typedef bool (*f_bool_t)(const char*);
typedef const char* (*f_str_t)(const char*);
typedef void (*f_None_t)(const char*);
typedef i64 (*f_int_t)(char*);
typedef f64 (*f_float_t)(char*);
typedef bool (*f_bool_t)(char*);
typedef char* (*f_str_t)(char*);
typedef void (*f_None_t)(char*);
static f_int_t f_int = nullptr;
static f_float_t f_float = nullptr;
@ -6752,19 +6748,25 @@ extern "C" {
PyVar obj = vm->new_module_if_not_existed(mod);
vm->bindFunc<-1>(obj, name, [ret_code, f_header](VM* vm, const pkpy::Args& args){
_StrStream ss;
ss << f_header << ' ';
ss << f_header;
for(int i=0; i<args.size(); i++){
ss << ' ';
PyVar x = vm->call(args[i], __json__);
ss << vm->PyStr_AS_C(x);
if(i != args.size() - 1) ss << ' ';
}
char* packet = strdup(ss.str().c_str());
switch(ret_code){
case 'i': return vm->PyInt(f_int(ss.str().c_str()));
case 'f': return vm->PyFloat(f_float(ss.str().c_str()));
case 'b': return vm->PyBool(f_bool(ss.str().c_str()));
case 's': return vm->PyStr(f_str(ss.str().c_str()));
case 'N': f_None(ss.str().c_str()); return vm->None;
case 'i': return vm->PyInt(f_int(packet));
case 'f': return vm->PyFloat(f_float(packet));
case 'b': return vm->PyBool(f_bool(packet));
case 's': {
char* p = f_str(packet);
if(p == nullptr) return vm->None;
return vm->PyStr(p); // no need to free(p)
}
case 'N': f_None(packet); return vm->None;
}
free(packet);
UNREACHABLE();
return vm->None;
});

@ -1 +1 @@
Subproject commit 3765c55407d883e12457e44981c87062c446b529
Subproject commit d9f2b2d3e282cf420b360b12bb1a985f8cfb836c

View File

@ -2055,10 +2055,6 @@ public:
return *this;
}
operator const char*() const {
return c_str();
}
~_Str(){
if(_u8_index != nullptr) delete _u8_index;
}
@ -6719,11 +6715,11 @@ extern "C" {
return strdup(ss.str().c_str());
}
typedef i64 (*f_int_t)(const char*);
typedef f64 (*f_float_t)(const char*);
typedef bool (*f_bool_t)(const char*);
typedef const char* (*f_str_t)(const char*);
typedef void (*f_None_t)(const char*);
typedef i64 (*f_int_t)(char*);
typedef f64 (*f_float_t)(char*);
typedef bool (*f_bool_t)(char*);
typedef char* (*f_str_t)(char*);
typedef void (*f_None_t)(char*);
static f_int_t f_int = nullptr;
static f_float_t f_float = nullptr;
@ -6752,19 +6748,25 @@ extern "C" {
PyVar obj = vm->new_module_if_not_existed(mod);
vm->bindFunc<-1>(obj, name, [ret_code, f_header](VM* vm, const pkpy::Args& args){
_StrStream ss;
ss << f_header << ' ';
ss << f_header;
for(int i=0; i<args.size(); i++){
ss << ' ';
PyVar x = vm->call(args[i], __json__);
ss << vm->PyStr_AS_C(x);
if(i != args.size() - 1) ss << ' ';
}
char* packet = strdup(ss.str().c_str());
switch(ret_code){
case 'i': return vm->PyInt(f_int(ss.str().c_str()));
case 'f': return vm->PyFloat(f_float(ss.str().c_str()));
case 'b': return vm->PyBool(f_bool(ss.str().c_str()));
case 's': return vm->PyStr(f_str(ss.str().c_str()));
case 'N': f_None(ss.str().c_str()); return vm->None;
case 'i': return vm->PyInt(f_int(packet));
case 'f': return vm->PyFloat(f_float(packet));
case 'b': return vm->PyBool(f_bool(packet));
case 's': {
char* p = f_str(packet);
if(p == nullptr) return vm->None;
return vm->PyStr(p); // no need to free(p)
}
case 'N': f_None(packet); return vm->None;
}
free(packet);
UNREACHABLE();
return vm->None;
});

View File

@ -793,11 +793,11 @@ extern "C" {
return strdup(ss.str().c_str());
}
typedef i64 (*f_int_t)(const char*);
typedef f64 (*f_float_t)(const char*);
typedef bool (*f_bool_t)(const char*);
typedef const char* (*f_str_t)(const char*);
typedef void (*f_None_t)(const char*);
typedef i64 (*f_int_t)(char*);
typedef f64 (*f_float_t)(char*);
typedef bool (*f_bool_t)(char*);
typedef char* (*f_str_t)(char*);
typedef void (*f_None_t)(char*);
static f_int_t f_int = nullptr;
static f_float_t f_float = nullptr;
@ -826,19 +826,25 @@ extern "C" {
PyVar obj = vm->new_module_if_not_existed(mod);
vm->bindFunc<-1>(obj, name, [ret_code, f_header](VM* vm, const pkpy::Args& args){
_StrStream ss;
ss << f_header << ' ';
ss << f_header;
for(int i=0; i<args.size(); i++){
ss << ' ';
PyVar x = vm->call(args[i], __json__);
ss << vm->PyStr_AS_C(x);
if(i != args.size() - 1) ss << ' ';
}
char* packet = strdup(ss.str().c_str());
switch(ret_code){
case 'i': return vm->PyInt(f_int(ss.str().c_str()));
case 'f': return vm->PyFloat(f_float(ss.str().c_str()));
case 'b': return vm->PyBool(f_bool(ss.str().c_str()));
case 's': return vm->PyStr(f_str(ss.str().c_str()));
case 'N': f_None(ss.str().c_str()); return vm->None;
case 'i': return vm->PyInt(f_int(packet));
case 'f': return vm->PyFloat(f_float(packet));
case 'b': return vm->PyBool(f_bool(packet));
case 's': {
char* p = f_str(packet);
if(p == nullptr) return vm->None;
return vm->PyStr(p); // no need to free(p)
}
case 'N': f_None(packet); return vm->None;
}
free(packet);
UNREACHABLE();
return vm->None;
});

View File

@ -133,10 +133,6 @@ public:
return *this;
}
operator const char*() const {
return c_str();
}
~_Str(){
if(_u8_index != nullptr) delete _u8_index;
}