This commit is contained in:
blueloveTH 2023-06-09 22:39:16 +08:00
parent 754808412b
commit fe00542124
2 changed files with 14 additions and 2 deletions

View File

@ -687,13 +687,14 @@ struct CallExpr: Expr{
ctx->emit(OP_BUILD_TUPLE_UNPACK, (int)args.size(), line); ctx->emit(OP_BUILD_TUPLE_UNPACK, (int)args.size(), line);
for(auto& item: kwargs){ for(auto& item: kwargs){
item.second->emit(ctx);
if(item.second->is_starred()){ if(item.second->is_starred()){
if(item.second->star_level() != 2) FATAL_ERROR(); if(item.second->star_level() != 2) FATAL_ERROR();
item.second->emit(ctx);
}else{ }else{
// k=v // k=v
int index = ctx->add_const(py_var(ctx->vm, item.first)); int index = ctx->add_const(py_var(ctx->vm, item.first));
ctx->emit(OP_LOAD_CONST, index, line); ctx->emit(OP_LOAD_CONST, index, line);
item.second->emit(ctx);
ctx->emit(OP_BUILD_TUPLE, 2, line); ctx->emit(OP_BUILD_TUPLE, 2, line);
} }
} }

View File

@ -52,4 +52,15 @@ try:
x = f1(*[1, 2, 3, 4]) x = f1(*[1, 2, 3, 4])
exit(1) exit(1)
except TypeError: except TypeError:
pass pass
def g(*args, **kwargs):
return args, kwargs
def f(a, b, *args, c=1, **kwargs):
return g(a, b, *args, c=c, **kwargs)
args, kwargs = f(1, 2, 3, 4, c=5, d=6, e=-6.0)
assert args == (1, 2, 3, 4)
assert kwargs == {'c': 5, 'd': 6, 'e': -6.0}