| 62 | } |
| 63 | |
| 64 | Expect<void> run(const CallingFrame &CallFrame, Span<const ValVariant> Args, |
| 65 | Span<ValVariant> Rets) override { |
| 66 | using F = FuncTraits<decltype(&T::body)>; |
| 67 | if (unlikely(F::ArgsN != Args.size())) { |
| 68 | return Unexpect(ErrCode::Value::FuncSigMismatch); |
| 69 | } |
| 70 | if (unlikely(F::RetsN != Rets.size())) { |
| 71 | return Unexpect(ErrCode::Value::FuncSigMismatch); |
| 72 | } |
| 73 | return invoke(CallFrame, Args.first<F::ArgsN>(), Rets.first<F::RetsN>()); |
| 74 | } |
| 75 | |
| 76 | protected: |
| 77 | template <typename SpanA, typename SpanR> |