mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-19 19:10:17 +00:00
some update
This commit is contained in:
parent
5c959e7274
commit
18fe69d579
@ -96,6 +96,7 @@ py_Type pk_str__register();
|
||||
py_Type pk_bytes__register();
|
||||
py_Type pk_list__register();
|
||||
py_Type pk_function__register();
|
||||
py_Type pk_nativefunc__register();
|
||||
|
||||
py_TValue pk_builtins__register();
|
||||
|
||||
|
@ -693,6 +693,18 @@ pk_FrameResult pk_VM__run_top_frame(pk_VM* self) {
|
||||
*TOP() = self->last_retval;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
///////////
|
||||
case OP_RAISE_ASSERT: {
|
||||
if(byte.arg) {
|
||||
if(!py_str(TOP())) goto __ERROR;
|
||||
POP();
|
||||
py_exception("AssertionError", "%s", py_tostr(py_retval()));
|
||||
} else {
|
||||
py_exception("AssertionError", "");
|
||||
}
|
||||
goto __ERROR;
|
||||
}
|
||||
default: c11__unreachedable();
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ void pk_VM__ctor(pk_VM* self) {
|
||||
validate(tp_module, pk_VM__new_type(self, "module", tp_object, NULL, false));
|
||||
|
||||
validate(tp_function, pk_function__register());
|
||||
validate(tp_nativefunc, pk_VM__new_type(self, "nativefunc", tp_object, NULL, false));
|
||||
validate(tp_nativefunc, pk_nativefunc__register());
|
||||
validate(tp_bound_method, pk_VM__new_type(self, "bound_method", tp_object, NULL, false));
|
||||
|
||||
validate(tp_super, pk_VM__new_type(self, "super", tp_object, NULL, false));
|
||||
|
@ -83,4 +83,17 @@ py_Type pk_function__register() {
|
||||
pk_TypeInfo* ti = c11__at(pk_TypeInfo, &vm->types, type);
|
||||
ti->dtor = (void (*)(void*))Function__dtor;
|
||||
return type;
|
||||
}
|
||||
|
||||
static bool _py_nativefunc__repr(int argc, py_Ref argv) {
|
||||
PY_CHECK_ARGC(1);
|
||||
py_newstr(py_retval(), "<nativefunc object>");
|
||||
return true;
|
||||
}
|
||||
|
||||
py_Type pk_nativefunc__register() {
|
||||
pk_VM* vm = pk_current_vm;
|
||||
py_Type type = pk_VM__new_type(vm, "nativefunc", tp_object, NULL, false);
|
||||
py_bindmagic(type, __repr__, _py_nativefunc__repr);
|
||||
return type;
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
#include "pocketpy/interpreter/vm.h"
|
||||
#include "pocketpy/common/sstream.h"
|
||||
#include "pocketpy/pocketpy.h"
|
||||
|
||||
#include <math.h>
|
||||
@ -197,9 +198,12 @@ static bool _py_int__repr__(int argc, py_Ref argv) {
|
||||
static bool _py_float__repr__(int argc, py_Ref argv) {
|
||||
PY_CHECK_ARGC(1);
|
||||
py_f64 val = py_tofloat(&argv[0]);
|
||||
char buf[32];
|
||||
int size = snprintf(buf, sizeof(buf), "%f", val);
|
||||
py_newstrn(py_retval(), buf, size);
|
||||
c11_sbuf buf;
|
||||
c11_sbuf__ctor(&buf);
|
||||
c11_sbuf__write_f64(&buf, val, -1);
|
||||
c11_string* res = c11_sbuf__submit(&buf);
|
||||
py_newstrn(py_retval(), res->data, res->size);
|
||||
c11_string__delete(res);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -341,11 +345,18 @@ static bool _py_float__new__(int argc, py_Ref argv) {
|
||||
|
||||
// tp_bool
|
||||
static bool _py_bool__new__(int argc, py_Ref argv) {
|
||||
PY_CHECK_ARGC(1);
|
||||
int res = py_bool(argv);
|
||||
if(res == -1) return false;
|
||||
py_newbool(py_retval(), res);
|
||||
return true;
|
||||
assert(argc > 0);
|
||||
if(argc == 1){
|
||||
py_newbool(py_retval(), false);
|
||||
return true;
|
||||
}
|
||||
if(argc == 2){
|
||||
int res = py_bool(py_arg(1));
|
||||
if(res == -1) return false;
|
||||
py_newbool(py_retval(), res);
|
||||
return true;
|
||||
}
|
||||
return TypeError("bool() takes at most 1 argument");
|
||||
}
|
||||
|
||||
static bool _py_bool__hash__(int argc, py_Ref argv) {
|
||||
|
@ -53,14 +53,11 @@ assert eq(float("123"), 123.0)
|
||||
assert eq(float("123.456"), 123.456)
|
||||
|
||||
|
||||
import math
|
||||
|
||||
inf = float("inf")
|
||||
assert 1/0 == inf
|
||||
assert -1/0 == -inf
|
||||
assert 1/inf == 0
|
||||
assert -1/inf == 0
|
||||
assert math.isnan(0/0)
|
||||
|
||||
assert 2**-6000 == 0.0
|
||||
assert 2.0 ** 6000 == inf
|
||||
@ -74,7 +71,6 @@ assert eq(2 * .5, 1.0)
|
||||
assert eq(2 * (.5), 1.0)
|
||||
assert eq(2 * (.5 + 1), 3.0)
|
||||
|
||||
|
||||
assert 1e3 == 1000.0
|
||||
assert 1e-3 == 0.001
|
||||
assert -1e3 == -1000.0
|
||||
@ -83,15 +79,18 @@ assert 1e0 == 1.0
|
||||
assert 1e-0 == 1.0
|
||||
|
||||
assert 2e3 == 2000.0
|
||||
assert 2e3j == 2000j
|
||||
assert -2e-3 == -0.002
|
||||
assert -2e-3j == -0.002j
|
||||
|
||||
assert 3.4e-3 == 0.0034
|
||||
assert 3.4e+3 == 3400.0
|
||||
|
||||
try:
|
||||
float('-x13')
|
||||
exit(1)
|
||||
except ValueError:
|
||||
pass
|
||||
# import math
|
||||
# assert math.isnan(0/0)
|
||||
|
||||
# assert 2e3j == 2000j
|
||||
# assert -2e-3j == -0.002j
|
||||
|
||||
# try:
|
||||
# float('-x13')
|
||||
# exit(1)
|
||||
# except ValueError:
|
||||
# pass
|
||||
|
@ -12,6 +12,7 @@ assert True or False
|
||||
assert not False
|
||||
assert not (not True)
|
||||
|
||||
assert bool() == False
|
||||
assert bool(0) == False
|
||||
assert bool(1) == True
|
||||
assert bool([]) == False
|
||||
@ -19,7 +20,14 @@ assert bool("abc") == True
|
||||
assert bool([1,2]) == True
|
||||
assert bool('') == False
|
||||
|
||||
# extra compare for None
|
||||
# is operator
|
||||
assert None == None
|
||||
assert None is None
|
||||
assert ... == ...
|
||||
assert ... is ...
|
||||
assert NotImplemented == NotImplemented
|
||||
assert NotImplemented is NotImplemented
|
||||
|
||||
assert True is True
|
||||
assert False is False
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user