mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-19 19:10:17 +00:00
refactor 2
This commit is contained in:
parent
b0dc1e4a69
commit
8a2ee65301
@ -7,8 +7,8 @@ with open("include/pocketpy/opcodes.h", "rt", encoding='utf-8') as f:
|
||||
|
||||
pipeline = [
|
||||
["config.h", "export.h", "common.h", "memory.h", "vector.h", "str.h", "tuplelist.h", "namedict.h", "error.h"],
|
||||
["obj.h", "dict.h", "codeobject.h", "frame.h"],
|
||||
["gc.h", "vm.h", "ceval.h", "lexer.h", "expr.h", "compiler.h", "repl.h", "profiler.h"],
|
||||
["obj.h", "dict.h", "codeobject.h", "frame.h", "profiler.h"],
|
||||
["gc.h", "vm.h", "ceval.h", "lexer.h", "expr.h", "compiler.h", "repl.h"],
|
||||
["_generated.h", "cffi.h", "bindings.h", "iter.h", "base64.h", "csv.h", "collections.h", "array2d.h", "dataclasses.h", "random.h", "linalg.h", "easing.h", "io.h", "modules.h"],
|
||||
["pocketpy.h", "pocketpy_c.h"]
|
||||
]
|
||||
|
@ -1,9 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "bindings.h"
|
||||
|
||||
namespace pkpy {
|
||||
|
||||
void add_module_line_profiler(VM* vm);
|
||||
struct LineProfiler{
|
||||
|
||||
};
|
||||
|
||||
} // namespace pkpy
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "str.h"
|
||||
#include "tuplelist.h"
|
||||
#include "dict.h"
|
||||
#include "profiler.h"
|
||||
|
||||
namespace pkpy{
|
||||
|
||||
@ -152,6 +153,8 @@ public:
|
||||
|
||||
void (*_ceval_on_step)(VM*, Frame*, Bytecode bc) = nullptr;
|
||||
|
||||
LineProfiler* _profiler = nullptr;
|
||||
|
||||
PrintFunc _stdout;
|
||||
PrintFunc _stderr;
|
||||
unsigned char* (*_import_handler)(const char*, int, int*);
|
||||
|
@ -247,6 +247,19 @@ void add_module_gc(VM* vm){
|
||||
struct LineProfilerW{
|
||||
PY_CLASS(LineProfilerW, line_profiler, LineProfiler)
|
||||
|
||||
LineProfiler profiler;
|
||||
|
||||
void enable_by_count(VM* vm){
|
||||
if(vm->_profiler){
|
||||
vm->ValueError("only one profiler can be enabled at a time");
|
||||
}
|
||||
vm->_profiler = &profiler;
|
||||
}
|
||||
|
||||
void disable_by_count(VM* vm){
|
||||
vm->_profiler = nullptr;
|
||||
}
|
||||
|
||||
static void _register(VM* vm, PyObject* mod, PyObject* type){
|
||||
vm->bind_default_constructor<LineProfilerW>(type);
|
||||
|
||||
@ -257,13 +270,13 @@ struct LineProfilerW{
|
||||
|
||||
vm->bind(type, "runcall(self, func, *args)", [](VM* vm, ArgsView view){
|
||||
LineProfilerW& self = PK_OBJ_GET(LineProfilerW, view[0]);
|
||||
// self.enable_by_count(vm);
|
||||
self.enable_by_count(vm);
|
||||
PyObject* func = view[1];
|
||||
const Tuple& args = CAST(Tuple&, view[2]);
|
||||
for(PyObject* arg : args) vm->s_data.push(arg);
|
||||
vm->s_data.push(func);
|
||||
PyObject* ret = vm->vectorcall(args.size());
|
||||
// self.disable_by_count(vm);
|
||||
self.disable_by_count(vm);
|
||||
return ret;
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user