mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 19:40:18 +00:00
Update vm.h
This commit is contained in:
parent
74ed211f7b
commit
1ad9d2b6f9
10
src/vm.h
10
src/vm.h
@ -129,11 +129,11 @@ public:
|
|||||||
PyVar* new_f = _callable->attr().try_get(__new__);
|
PyVar* new_f = _callable->attr().try_get(__new__);
|
||||||
PyVar obj;
|
PyVar obj;
|
||||||
if(new_f != nullptr){
|
if(new_f != nullptr){
|
||||||
obj = call(*new_f, args, kwargs, false);
|
obj = call(*new_f, std::move(args), kwargs, false);
|
||||||
}else{
|
}else{
|
||||||
obj = new_object(_callable, DummyInstance());
|
obj = new_object(_callable, DummyInstance());
|
||||||
PyVarOrNull init_f = getattr(obj, __init__, false);
|
PyVarOrNull init_f = getattr(obj, __init__, false);
|
||||||
if (init_f != nullptr) call(init_f, args, kwargs, false);
|
if (init_f != nullptr) call(init_f, std::move(args), kwargs, false);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ public:
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
for(StrName name : fn.args){
|
for(StrName name : fn.args){
|
||||||
if(i < args.size()){
|
if(i < args.size()){
|
||||||
locals->emplace(name, args[i++]);
|
locals->emplace(name, std::move(args[i++]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
TypeError("missing positional argument " + name.str().escape(true));
|
TypeError("missing positional argument " + name.str().escape(true));
|
||||||
@ -168,12 +168,12 @@ public:
|
|||||||
|
|
||||||
if(!fn.starred_arg.empty()){
|
if(!fn.starred_arg.empty()){
|
||||||
pkpy::List vargs; // handle *args
|
pkpy::List vargs; // handle *args
|
||||||
while(i < args.size()) vargs.push_back(args[i++]);
|
while(i < args.size()) vargs.push_back(std::move(args[i++]));
|
||||||
locals->emplace(fn.starred_arg, PyTuple(std::move(vargs)));
|
locals->emplace(fn.starred_arg, PyTuple(std::move(vargs)));
|
||||||
}else{
|
}else{
|
||||||
for(StrName key : fn.kwargs_order){
|
for(StrName key : fn.kwargs_order){
|
||||||
if(i < args.size()){
|
if(i < args.size()){
|
||||||
locals->emplace(key, args[i++]);
|
locals->emplace(key, std::move(args[i++]));
|
||||||
}else{
|
}else{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user