mirror of
https://github.com/pocketpy/pocketpy
synced 2026-03-25 06:30:17 +00:00
Compare commits
No commits in common. "70e824a6b695e963621664589d1d00aeb182c018" and "a53af18ee84a60db88c9534da40d40d429e25fec" have entirely different histories.
70e824a6b6
...
a53af18ee8
@ -2,7 +2,7 @@
|
||||
#include "WebSocketChannel.h"
|
||||
#include "libhv_bindings.hpp"
|
||||
#include "http/server/WebSocketServer.h"
|
||||
#include "pocketpy.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
|
||||
struct libhv_HttpServer {
|
||||
hv::HttpService http_service;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#include "HttpMessage.h"
|
||||
#include "libhv_bindings.hpp"
|
||||
#include "pocketpy.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
#include "http/client/WebSocketClient.h"
|
||||
|
||||
struct libhv_WebSocketClient {
|
||||
|
||||
@ -1,7 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define PK_IS_PUBLIC_INCLUDE
|
||||
|
||||
#include "pocketpy/pocketpy.h"
|
||||
|
||||
#undef PK_IS_PUBLIC_INCLUDE
|
||||
|
||||
@ -2,10 +2,6 @@
|
||||
|
||||
#include "pocketpy/pocketpy.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void pk_names_initialize();
|
||||
void pk_names_finalize();
|
||||
|
||||
@ -16,8 +12,4 @@ void pk_names_finalize();
|
||||
py_Name py_namev(c11_sv name);
|
||||
c11_sv py_name2sv(py_Name index);
|
||||
py_Name py_name(const char* name);
|
||||
const char* py_name2str(py_Name index);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
const char* py_name2str(py_Name index);
|
||||
@ -28,12 +28,6 @@ typedef double py_f64;
|
||||
/// A generic destructor function.
|
||||
typedef void (*py_Dtor)(void*);
|
||||
|
||||
#ifdef PK_IS_PUBLIC_INCLUDE
|
||||
typedef struct py_TValue {
|
||||
char _[16];
|
||||
} py_TValue;
|
||||
#endif
|
||||
|
||||
/// A string view type. It is helpful for passing strings which are not null-terminated.
|
||||
typedef struct c11_sv {
|
||||
const char* data;
|
||||
@ -77,9 +71,7 @@ typedef struct py_Callbacks {
|
||||
/// Flush the output buffer of `print`.
|
||||
void (*flush)();
|
||||
/// Used by `input` to get a character.
|
||||
int (*getchr)();
|
||||
/// Used by `gc.collect()` to mark extra objects for garbage collection.
|
||||
void (*gc_mark)(void (*f)(py_Ref val, void* ctx), void* ctx);
|
||||
int (*getchar)();
|
||||
} py_Callbacks;
|
||||
|
||||
/// Native function signature.
|
||||
@ -378,6 +370,8 @@ PK_API void py_setglobal(py_Name name, py_Ref val);
|
||||
/// Get variable in the `builtins` module.
|
||||
PK_API py_ItemRef py_getbuiltin(py_Name name);
|
||||
|
||||
/// Equivalent to `*dst = *src`.
|
||||
PK_API void py_assign(py_Ref dst, py_Ref src);
|
||||
/// Get the last return value.
|
||||
PK_API py_GlobalRef py_retval();
|
||||
|
||||
@ -453,9 +447,8 @@ PK_API void py_bindmagic(py_Type type, py_Name name, py_CFunction f);
|
||||
#define PY_CHECK_ARG_TYPE(i, type) \
|
||||
if(!py_checktype(py_arg(i), type)) return false
|
||||
|
||||
#define py_offset(p, i) ((p) + (i))
|
||||
#define py_arg(i) (&argv[i])
|
||||
#define py_assign(dst, src) *(dst) = *(src)
|
||||
#define py_offset(p, i) ((py_Ref)((char*)p + ((i) << 4)))
|
||||
#define py_arg(i) py_offset(argv, i)
|
||||
|
||||
/************* Python Equivalents *************/
|
||||
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
|
||||
#include "pocketpy/common/name.h"
|
||||
#include "pocketpy/common/str.h"
|
||||
#include "pocketpy/common/threads.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
#include <stdatomic.h>
|
||||
|
||||
@ -44,7 +43,7 @@ void pk_names_finalize() {
|
||||
|
||||
py_Name py_namev(c11_sv name) {
|
||||
while(atomic_flag_test_and_set(&pk_string_table.lock)) {
|
||||
c11_thrd_yield();
|
||||
// busy-wait until the lock is released
|
||||
}
|
||||
uint64_t hash = c11_sv__hash(name);
|
||||
int index = hash & 0xFFFF;
|
||||
|
||||
@ -32,8 +32,6 @@ static void pk_default_print(const char* data) { printf("%s", data); }
|
||||
|
||||
static void pk_default_flush() { fflush(stdout); }
|
||||
|
||||
static int pk_default_getchr() { return getchar(); }
|
||||
|
||||
void LineProfiler__tracefunc(py_Frame* frame, enum py_TraceEvent event) {
|
||||
LineProfiler* self = &pk_current_vm->line_profiler;
|
||||
if(self->enabled && event == TRACE_EVENT_LINE) { LineProfiler__tracefunc_line(self, frame); }
|
||||
@ -77,7 +75,7 @@ void VM__ctor(VM* self) {
|
||||
self->callbacks.importfile = pk_default_importfile;
|
||||
self->callbacks.print = pk_default_print;
|
||||
self->callbacks.flush = pk_default_flush;
|
||||
self->callbacks.getchr = pk_default_getchr;
|
||||
self->callbacks.getchar = getchar;
|
||||
|
||||
self->last_retval = *py_NIL();
|
||||
self->curr_exception = *py_NIL();
|
||||
@ -637,11 +635,6 @@ void CodeObject__gc_mark(const CodeObject* self, c11_vector* p_stack) {
|
||||
}
|
||||
}
|
||||
|
||||
static void pk__mark_value_func(py_Ref val, void* ctx) {
|
||||
c11_vector* p_stack = ctx;
|
||||
pk__mark_value(val);
|
||||
}
|
||||
|
||||
void ManagedHeap__mark(ManagedHeap* self) {
|
||||
VM* vm = pk_current_vm;
|
||||
c11_vector* p_stack = &self->gc_roots;
|
||||
@ -673,8 +666,6 @@ void ManagedHeap__mark(ManagedHeap* self) {
|
||||
for(int i = 0; i < c11__count_array(vm->reg); i++) {
|
||||
pk__mark_value(&vm->reg[i]);
|
||||
}
|
||||
// mark user func
|
||||
if(vm->callbacks.gc_mark) vm->callbacks.gc_mark(pk__mark_value_func, p_stack);
|
||||
/*****************************/
|
||||
while(p_stack->length > 0) {
|
||||
PyObject* obj = c11_vector__back(PyObject*, p_stack);
|
||||
@ -812,7 +803,7 @@ int py_replinput(char* buf, int max_size) {
|
||||
printf(">>> ");
|
||||
|
||||
while(true) {
|
||||
int c = pk_current_vm->callbacks.getchr();
|
||||
int c = pk_current_vm->callbacks.getchar();
|
||||
if(c == EOF) return -1;
|
||||
|
||||
if(c == '\n') {
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
#include "pocketpy/objects/base.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
|
||||
static bool importlib_reload(int argc, py_Ref argv) {
|
||||
@ -11,4 +10,4 @@ void pk__add_module_importlib() {
|
||||
py_Ref mod = py_newmodule("importlib");
|
||||
|
||||
py_bindfunc(mod, "reload", importlib_reload);
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,3 @@
|
||||
#include "pocketpy/objects/base.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
#include "pocketpy/common/str.h"
|
||||
#include "pocketpy/objects/base.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
|
||||
const static c11_u32_range kEastAsianWidthRanges[] = {
|
||||
|
||||
@ -205,7 +205,7 @@ static bool builtins_input(int argc, py_Ref argv) {
|
||||
c11_sbuf buf;
|
||||
c11_sbuf__ctor(&buf);
|
||||
while(true) {
|
||||
int c = py_callbacks()->getchr();
|
||||
int c = py_callbacks()->getchar();
|
||||
if(c == '\n' || c == '\r') break;
|
||||
if(c == EOF) break;
|
||||
c11_sbuf__write_char(&buf, c);
|
||||
|
||||
@ -68,6 +68,8 @@ py_GlobalRef py_inspect_currentmodule() {
|
||||
|
||||
py_Frame* py_inspect_currentframe() { return pk_current_vm->top_frame; }
|
||||
|
||||
void py_assign(py_Ref dst, py_Ref src) { *dst = *src; }
|
||||
|
||||
/* Stack References */
|
||||
py_Ref py_peek(int i) {
|
||||
assert(i <= 0);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user