Compare commits

..

1 Commits

Author SHA1 Message Date
Tesselmax Opensource
5cadb8c2b9
Merge 46cc281099bfad78ee697e700330314307235695 into e14478543648be32ce4140c1d5a44d29677d6720 2026-07-16 12:51:34 -07:00
8 changed files with 8 additions and 71 deletions

View File

@ -251,7 +251,7 @@
* types in @ref docs/protocol.md for more information.
*/
#ifndef MPACK_EXTENSIONS
#define MPACK_EXTENSIONS 1
#define MPACK_EXTENSIONS 0
#endif
/**

View File

@ -1,20 +0,0 @@
#pragma once
#include "mpack.h"
#include "pocketpy.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef bool (*is_mpack_ext_t)(py_Type type);
typedef bool (*py_to_mpack_ext_t)(py_Ref object, mpack_writer_t* writer);
typedef bool (*mpack_to_py_ext_t)(py_StackRef tmp, mpack_node_t node);
void mpack_config_exttype_callbacks(is_mpack_ext_t is_ext,
py_to_mpack_ext_t to_mpack,
mpack_to_py_ext_t to_py);
#ifdef __cplusplus
}
#endif

View File

@ -1,22 +1,8 @@
#include "pocketpy.h"
#include "mpack1.h"
#include "mpack.h"
#include <assert.h>
_Static_assert(MPACK_EXTENSIONS == 1, "You should change MPACK_EXTENSIONS in mpack.h to 1");
static is_mpack_ext_t is_mpack_ext;
static py_to_mpack_ext_t py_to_mpack_ext;
static mpack_to_py_ext_t mpack_to_py_ext;
void mpack_config_exttype_callbacks(is_mpack_ext_t is_ext,
py_to_mpack_ext_t to_mpack,
mpack_to_py_ext_t to_py) {
is_mpack_ext = is_ext;
py_to_mpack_ext = to_mpack;
mpack_to_py_ext = to_py;
}
static bool mpack_to_py(mpack_node_t node) {
py_StackRef tmp = py_pushtmp();
@ -83,14 +69,6 @@ static bool mpack_to_py(mpack_node_t node) {
}
break;
}
case mpack_type_ext: {
if(!mpack_to_py_ext) {
return RuntimeError("msgpack: mpack_to_py_ext is not set, cannot handle ext type");
}
if(!mpack_to_py_ext(tmp, node)) return false;
break;
}
default: return ValueError("msgpack: invalid node type");
}
return true;
@ -133,7 +111,9 @@ static bool mpack_write_dict_kv(py_Ref k, py_Ref v, void* ctx) {
} else {
return TypeError("msgpack: key must be string or integer");
}
return py_to_mpack(v, writer);
bool ok = py_to_mpack(v, writer);
if(!ok) mpack_write_nil(writer);
return ok;
}
static bool py_to_mpack(py_Ref object, mpack_writer_t* writer) {
@ -174,15 +154,7 @@ static bool py_to_mpack(py_Ref object, mpack_writer_t* writer) {
if(!ok) return false;
break;
}
default: {
if(is_mpack_ext && is_mpack_ext(object->type)) {
assert(py_to_mpack_ext != NULL);
return py_to_mpack_ext(object, writer);
break;
}
mpack_write_nil(writer);
return TypeError("msgpack: unsupported type '%t'", object->type);
}
default: return TypeError("msgpack: unsupported type '%t'", object->type);
}
return true;
}

View File

@ -384,7 +384,7 @@ static bool int__abs__(int argc, py_Ref argv) {
static bool float__abs__(int argc, py_Ref argv) {
PY_CHECK_ARGC(1);
py_f64 val = py_tofloat(&argv[0]);
py_newfloat(py_retval(), dmath_fabs(val));
py_newfloat(py_retval(), val < 0 ? -val : val);
return true;
}

View File

@ -447,12 +447,6 @@ static bool str_zfill(int argc, py_Ref argv) {
}
c11_sbuf buf;
c11_sbuf__ctor(&buf);
// a leading sign is kept in front; the padding goes after it
if(self.size > 0 && (self.data[0] == '+' || self.data[0] == '-')) {
c11_sbuf__write_char(&buf, self.data[0]);
self.data++;
self.size--;
}
for(int i = 0; i < delta; i++) {
c11_sbuf__write_char(&buf, '0');
}

View File

@ -701,11 +701,8 @@ double dmath_copysign(double x, double y) {
return ux.f;
}
// https://github.com/kraj/musl/blob/kraj/master/src/math/fabs.c
double dmath_fabs(double x) {
union Float64Bits u = { .f = x };
u.i &= -1ULL/2;
return u.f;
return (x < 0) ? -x : x;
}
double dmath_ceil(double x) {

View File

@ -97,9 +97,6 @@ assert 3.4e+3 == 3400.0
assert abs(1.0) == 1.0
assert abs(-1.0) == 1.0
assert abs(0.0) == 0.0
# abs(-0.0) is 0.0, not -0.0. `==` cannot tell them apart, so check the sign.
assert str(abs(-0.0)) == '0.0'
assert str(abs(0.0)) == '0.0'
# import math
# assert math.isnan(0/0)

View File

@ -112,9 +112,6 @@ assert s2.join( seq ) == "runoob"
assert 'x'.zfill(5) == '0000x'
assert '568'.zfill(1) == '568'
assert '-5'.zfill(4) == '-005'
assert '+5'.zfill(4) == '+005'
assert '-'.zfill(3) == '-00'
num = 6
assert str(num) == '6'