diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index c8051c2..fa0caf5 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -1,7 +1,26 @@ #include "cli/cli.h" +#include + namespace nasal::cli { +cli_config parse(const std::vector& args) { + cli_config result; + for(const auto& arg : args) { + if (cli_options.count(arg)) { + result.options.insert(cli_options.at(arg)); + } else if (!result.input_file_path.length()) { + result.input_file_path = arg; + } else { + result.nasal_vm_args.push_back(arg); + } + } + + if (result.input_file_path.length() && result.options.empty()) { + result.options.insert(option::cli_execute); + } + return result; +} } \ No newline at end of file diff --git a/src/cli/cli.h b/src/cli/cli.h index ba2c12d..517e27d 100644 --- a/src/cli/cli.h +++ b/src/cli/cli.h @@ -3,6 +3,8 @@ #include #include #include +#include +#include namespace nasal::cli { @@ -16,7 +18,7 @@ enum class option { cli_show_symbol, cli_execute, cli_show_execute_time, - cli_show_detail_info, + cli_detail_info, cli_show_referenced_file, cli_debug_mode, cli_profile, @@ -24,9 +26,17 @@ enum class option { cli_limit_mode }; -using config = std::unordered_map; +struct cli_config { + std::string input_file_path = ""; + std::unordered_set