lhmouse/asteria

De-uglify `Argument_Reader`

Closed this issue · 1 comments

*[](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.

Fixed in f6f10e6.