Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3af3fcce authored by Tom Cherry's avatar Tom Cherry Committed by Gerrit Code Review
Browse files

Merge "init: simplify keyword_map"

parents c9ec9527 d52a5b3c
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -80,17 +80,20 @@ Action::Action(bool oneshot, Subcontext* subcontext, const std::string& filename
      filename_(filename),
      line_(line) {}

const KeywordFunctionMap* Action::function_map_ = nullptr;
const BuiltinFunctionMap* Action::function_map_ = nullptr;

Result<void> Action::AddCommand(std::vector<std::string>&& args, int line) {
    if (!function_map_) {
        return Error() << "no function map available";
    }

    auto function = function_map_->FindFunction(args);
    if (!function) return Error() << function.error();
    auto map_result = function_map_->Find(args);
    if (!map_result) {
        return Error() << map_result.error();
    }

    commands_.emplace_back(function->second, function->first, std::move(args), line);
    commands_.emplace_back(map_result->function, map_result->run_in_subcontext, std::move(args),
                           line);
    return {};
}

+2 −2
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ class Action {
    bool oneshot() const { return oneshot_; }
    const std::string& filename() const { return filename_; }
    int line() const { return line_; }
    static void set_function_map(const KeywordFunctionMap* function_map) {
    static void set_function_map(const BuiltinFunctionMap* function_map) {
        function_map_ = function_map;
    }

@@ -91,7 +91,7 @@ class Action {
    Subcontext* subcontext_;
    std::string filename_;
    int line_;
    static const KeywordFunctionMap* function_map_;
    static const BuiltinFunctionMap* function_map_;
};

}  // namespace init
+2 −2
Original line number Diff line number Diff line
@@ -1152,10 +1152,10 @@ static Result<void> do_enter_default_mount_ns(const BuiltinArguments& args) {
}

// Builtin-function-map start
const BuiltinFunctionMap::Map& BuiltinFunctionMap::map() const {
const BuiltinFunctionMap& GetBuiltinFunctionMap() {
    constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
    // clang-format off
    static const Map builtin_functions = {
    static const BuiltinFunctionMap builtin_functions = {
        {"bootchart",               {1,     1,    {false,  do_bootchart}}},
        {"chmod",                   {2,     2,    {true,   do_chmod}}},
        {"chown",                   {2,     3,    {true,   do_chown}}},
+8 −11
Original line number Diff line number Diff line
@@ -14,8 +14,7 @@
 * limitations under the License.
 */

#ifndef _INIT_BUILTINS_H
#define _INIT_BUILTINS_H
#pragma once

#include <functional>
#include <map>
@@ -31,18 +30,16 @@ namespace init {

using BuiltinFunction = std::function<Result<void>(const BuiltinArguments&)>;

using KeywordFunctionMap = KeywordMap<std::pair<bool, BuiltinFunction>>;
class BuiltinFunctionMap : public KeywordFunctionMap {
  public:
    BuiltinFunctionMap() {}

  private:
    const Map& map() const override;
struct BuiltinFunctionMapValue {
    bool run_in_subcontext;
    BuiltinFunction function;
};

using BuiltinFunctionMap = KeywordMap<BuiltinFunctionMapValue>;

const BuiltinFunctionMap& GetBuiltinFunctionMap();

extern std::vector<std::string> late_import_paths;

}  // namespace init
}  // namespace android

#endif
+1 −1
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ int main(int argc, char** argv) {
        return EXIT_FAILURE;
    }

    const BuiltinFunctionMap function_map;
    const BuiltinFunctionMap& function_map = GetBuiltinFunctionMap();
    Action::set_function_map(&function_map);
    ActionManager& am = ActionManager::GetInstance();
    ServiceList& sl = ServiceList::GetInstance();
Loading