De-uglify `Argument_Reader`
Closed this issue · 1 comments
lhmouse commented
*[](Reference& self, cow_vector<Reference>&& args, Global_Context& /*global*/) -> Reference&
{
Argument_Reader reader(::rocket::sref("std.array.find"), ::rocket::cref(args));
Argument_Reader::State state;
// Parse arguments.
V_array data;
Value target;
if(reader.I().v(data).S(state).o(target).F()) {
Reference_root::S_temporary xref = { std_array_find(::std::move(data), 0, nullopt,
::std::move(target)) };
return self = ::std::move(xref);
}
V_integer from;
if(reader.L(state).v(from).S(state).o(target).F()) {
Reference_root::S_temporary xref = { std_array_find(::std::move(data), from, nullopt,
::std::move(target)) };
return self = ::std::move(xref);
}
optV_integer length;
if(reader.L(state).o(length).o(target).F()) {
Reference_root::S_temporary xref = { std_array_find(::std::move(data), from, length,
::std::move(target)) };
return self = ::std::move(xref);
}
// Fail.
reader.throw_no_matching_function_call();
}
- Use macros for definitions and return statements.
- Remove unnecessary function descriptions.
- De-curry the
reader.L(state).o(length).o(target).F()
thing.