mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
speed up!
This commit is contained in:
parent
f4f122c258
commit
486bf3b898
@ -117,6 +117,7 @@ namespace pkpy {
|
||||
other.clear();
|
||||
}
|
||||
|
||||
// deprecated, this is very slow, do not use it!!!
|
||||
ArgList(std::initializer_list<PyVar> args){
|
||||
__tryAlloc(args.size());
|
||||
int i = 0;
|
||||
|
21
src/vm.h
21
src/vm.h
@ -158,23 +158,26 @@ private:
|
||||
case OP_POP_TOP: frame->popValue(this); break;
|
||||
case OP_BINARY_OP:
|
||||
{
|
||||
PyVar rhs = frame->popValue(this);
|
||||
PyVar lhs = frame->popValue(this);
|
||||
frame->push(fastCall(lhs, BINARY_SPECIAL_METHODS[byte.arg], {lhs,std::move(rhs)}));
|
||||
pkpy::ArgList args(2);
|
||||
args[1] = frame->popValue(this);
|
||||
args[0] = frame->popValue(this);
|
||||
frame->push(fastCall(args[0], BINARY_SPECIAL_METHODS[byte.arg], std::move(args)));
|
||||
} break;
|
||||
case OP_BITWISE_OP:
|
||||
{
|
||||
PyVar rhs = frame->popValue(this);
|
||||
PyVar lhs = frame->popValue(this);
|
||||
frame->push(fastCall(lhs, BITWISE_SPECIAL_METHODS[byte.arg], {lhs,std::move(rhs)}));
|
||||
pkpy::ArgList args(2);
|
||||
args[1] = frame->popValue(this);
|
||||
args[0] = frame->popValue(this);
|
||||
frame->push(fastCall(args[0], BITWISE_SPECIAL_METHODS[byte.arg], std::move(args)));
|
||||
} break;
|
||||
case OP_COMPARE_OP:
|
||||
{
|
||||
PyVar rhs = frame->popValue(this);
|
||||
PyVar lhs = frame->popValue(this);
|
||||
pkpy::ArgList args(2);
|
||||
args[1] = frame->popValue(this);
|
||||
args[0] = frame->popValue(this);
|
||||
// for __ne__ we use the negation of __eq__
|
||||
int op = byte.arg == 3 ? 2 : byte.arg;
|
||||
PyVar res = fastCall(lhs, CMP_SPECIAL_METHODS[op], {lhs,std::move(rhs)});
|
||||
PyVar res = fastCall(args[0], CMP_SPECIAL_METHODS[op], std::move(args));
|
||||
if(op != byte.arg) res = PyBool(!PyBool_AS_C(res));
|
||||
frame->push(std::move(res));
|
||||
} break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user