(*args, **kwargs)
| 332 | |
| 333 | @wraps(func) |
| 334 | def wrapper(*args, **kwargs): |
| 335 | named_args = {**dict(zip(fn_spec.arg_names, args)), **kwargs} |
| 336 | assert len(named_args) > 0 |
| 337 | first_arg = next(iter(named_args.values())) |
| 338 | desugaring_context = ( |
| 339 | first_arg if isinstance(first_arg, DesugaringContext) else None |
| 340 | ) |
| 341 | |
| 342 | this_substitution = {} |
| 343 | if desugaring_context is not None: |
| 344 | this_substitution.update(desugaring_context._substitution) |
| 345 | |
| 346 | for key, value in substitution_param.items(): |
| 347 | assert isinstance(value, str) |
| 348 | this_substitution[key] = named_args[value] |
| 349 | |
| 350 | args = _desugar_this_args(this_substitution, args) |
| 351 | kwargs = _desugar_this_kwargs(this_substitution, kwargs) |
| 352 | |
| 353 | if desugaring_context is not None: |
| 354 | args = tuple( |
| 355 | desugaring_context._desugaring.eval_expression(arg) for arg in args |
| 356 | ) |
| 357 | kwargs = { |
| 358 | key: desugaring_context._desugaring.eval_expression(value) |
| 359 | for key, value in kwargs.items() |
| 360 | } |
| 361 | return func(*args, **kwargs) |
| 362 | |
| 363 | return wrapper |
nothing calls this directly
no test coverage detected