mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
...
This commit is contained in:
parent
62a66339c5
commit
fadb1dfcf2
@ -65,8 +65,6 @@ struct CodeObject {
|
|||||||
NameDictInt labels;
|
NameDictInt labels;
|
||||||
std::vector<FuncDecl_> func_decls;
|
std::vector<FuncDecl_> func_decls;
|
||||||
|
|
||||||
void optimize(VM* vm);
|
|
||||||
|
|
||||||
void _gc_mark() const {
|
void _gc_mark() const {
|
||||||
for(PyObject* v : consts) OBJ_MARK(v);
|
for(PyObject* v : consts) OBJ_MARK(v);
|
||||||
for(auto& decl: func_decls) decl->_gc_mark();
|
for(auto& decl: func_decls) decl->_gc_mark();
|
||||||
|
@ -161,7 +161,4 @@ inline PyObject* const PY_BEGIN_CALL = (PyObject*)0b010011;
|
|||||||
inline PyObject* const PY_OP_CALL = (PyObject*)0b100011;
|
inline PyObject* const PY_OP_CALL = (PyObject*)0b100011;
|
||||||
inline PyObject* const PY_OP_YIELD = (PyObject*)0b110011;
|
inline PyObject* const PY_OP_YIELD = (PyObject*)0b110011;
|
||||||
|
|
||||||
struct Expr;
|
|
||||||
typedef std::unique_ptr<Expr> Expr_;
|
|
||||||
|
|
||||||
} // namespace pkpy
|
} // namespace pkpy
|
@ -67,7 +67,7 @@ class Compiler {
|
|||||||
// however, this is buggy...since there may be a jump to the end (out of bound) even if the last opcode is a return
|
// however, this is buggy...since there may be a jump to the end (out of bound) even if the last opcode is a return
|
||||||
ctx()->emit(OP_LOAD_NONE, BC_NOARG, BC_KEEPLINE);
|
ctx()->emit(OP_LOAD_NONE, BC_NOARG, BC_KEEPLINE);
|
||||||
ctx()->emit(OP_RETURN_VALUE, BC_NOARG, BC_KEEPLINE);
|
ctx()->emit(OP_RETURN_VALUE, BC_NOARG, BC_KEEPLINE);
|
||||||
ctx()->co->optimize(vm);
|
// ctx()->co->optimize(vm);
|
||||||
if(ctx()->co->varnames.size() > PK_MAX_CO_VARNAMES){
|
if(ctx()->co->varnames.size() > PK_MAX_CO_VARNAMES){
|
||||||
SyntaxError("maximum number of local variables exceeded");
|
SyntaxError("maximum number of local variables exceeded");
|
||||||
}
|
}
|
||||||
|
@ -6,11 +6,12 @@
|
|||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "ceval.h"
|
#include "ceval.h"
|
||||||
#include "str.h"
|
#include "str.h"
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace pkpy{
|
namespace pkpy{
|
||||||
|
|
||||||
struct CodeEmitContext;
|
struct CodeEmitContext;
|
||||||
|
struct Expr;
|
||||||
|
typedef std::unique_ptr<Expr> Expr_;
|
||||||
|
|
||||||
struct Expr{
|
struct Expr{
|
||||||
int line = 0;
|
int line = 0;
|
||||||
|
15
src/linalg.h
15
src/linalg.h
@ -204,14 +204,6 @@ struct Mat3x3{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*************** affine transformations ***************/
|
/*************** affine transformations ***************/
|
||||||
static Mat3x3 rotate(float radian){
|
|
||||||
float cr = cosf(radian);
|
|
||||||
float sr = sinf(radian);
|
|
||||||
return Mat3x3(cr, -sr, 0.0f,
|
|
||||||
sr, cr, 0.0f,
|
|
||||||
0.0f, 0.0f, 1.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Mat3x3 trs(Vec2 t, float radian, Vec2 s){
|
static Mat3x3 trs(Vec2 t, float radian, Vec2 s){
|
||||||
float cr = cosf(radian);
|
float cr = cosf(radian);
|
||||||
float sr = sinf(radian);
|
float sr = sinf(radian);
|
||||||
@ -350,7 +342,12 @@ struct PyVec2: Vec2 {
|
|||||||
vm->bind_method<1>(type, "rotate", [](VM* vm, ArgsView args){
|
vm->bind_method<1>(type, "rotate", [](VM* vm, ArgsView args){
|
||||||
Vec2 self = _CAST(PyVec2&, args[0]);
|
Vec2 self = _CAST(PyVec2&, args[0]);
|
||||||
float radian = vm->num_to_float(args[1]);
|
float radian = vm->num_to_float(args[1]);
|
||||||
self = Mat3x3::rotate(radian).transform_vector(self);
|
float cr = cosf(radian);
|
||||||
|
float sr = sinf(radian);
|
||||||
|
Mat3x3 rotate(cr, -sr, 0.0f,
|
||||||
|
sr, cr, 0.0f,
|
||||||
|
0.0f, 0.0f, 1.0f);
|
||||||
|
self = rotate.transform_vector(self);
|
||||||
return VAR(self);
|
return VAR(self);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
8
src/vm.h
8
src/vm.h
@ -591,7 +591,7 @@ public:
|
|||||||
|
|
||||||
inline PyObject* NativeFunc::operator()(VM* vm, ArgsView args) const{
|
inline PyObject* NativeFunc::operator()(VM* vm, ArgsView args) const{
|
||||||
int args_size = args.size() - (int)method; // remove self
|
int args_size = args.size() - (int)method; // remove self
|
||||||
if(argc != -1 && args_size != argc) {
|
if(args_size != argc && argc != -1) {
|
||||||
vm->TypeError(fmt("expected ", argc, " arguments, but got ", args_size));
|
vm->TypeError(fmt("expected ", argc, " arguments, but got ", args_size));
|
||||||
}
|
}
|
||||||
#if DEBUG_EXTRA_CHECK
|
#if DEBUG_EXTRA_CHECK
|
||||||
@ -600,12 +600,6 @@ inline PyObject* NativeFunc::operator()(VM* vm, ArgsView args) const{
|
|||||||
return f(vm, args);
|
return f(vm, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void CodeObject::optimize(VM* vm){
|
|
||||||
// uint32_t base_n = (uint32_t)(names.size() / kLocalsLoadFactor + 0.5);
|
|
||||||
// perfect_locals_capacity = std::max(find_next_capacity(base_n), NameDict::__Capacity);
|
|
||||||
// perfect_hash_seed = find_perfect_hash_seed(perfect_locals_capacity, names);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEF_NATIVE_2(Str, tp_str)
|
DEF_NATIVE_2(Str, tp_str)
|
||||||
DEF_NATIVE_2(List, tp_list)
|
DEF_NATIVE_2(List, tp_list)
|
||||||
DEF_NATIVE_2(Tuple, tp_tuple)
|
DEF_NATIVE_2(Tuple, tp_tuple)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user