From e5fa3b88291d254e52a40d8b39935b09c79f99ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Fri, 21 Apr 2023 17:22:00 -0600 Subject: [PATCH 1/2] Allow multiple -I flags --- src/bin/lpython.cpp | 4 ++-- src/libasr/utils.h | 2 +- src/lpython/semantics/python_ast_to_asr.cpp | 22 ++++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/bin/lpython.cpp b/src/bin/lpython.cpp index d41c6b8bfd..c5cb834935 100644 --- a/src/bin/lpython.cpp +++ b/src/bin/lpython.cpp @@ -1463,8 +1463,8 @@ int main(int argc, char *argv[]) // app.add_flag("-E", arg_E, "Preprocess only; do not compile, assemble or link"); // app.add_option("-l", arg_l, "Link library option"); // app.add_option("-L", arg_L, "Library path option"); - app.add_option("-I", compiler_options.import_path, "Specify the path" - "to look for the module")->allow_extra_args(false); + app.add_option("-I", compiler_options.import_paths, "Specify the paths" + "to look for the module"); // app.add_option("-J", arg_J, "Where to save mod files"); app.add_flag("-g", compiler_options.emit_debug_info, "Compile with debugging information"); app.add_flag("--debug-with-line-column", compiler_options.emit_debug_line_column, diff --git a/src/libasr/utils.h b/src/libasr/utils.h index ee71c94162..e31cbe2d11 100644 --- a/src/libasr/utils.h +++ b/src/libasr/utils.h @@ -54,7 +54,7 @@ struct CompilerOptions { bool emit_debug_line_column = false; bool verbose = false; bool pass_cumulative = false; - std::string import_path = ""; + std::vector import_paths; Platform platform; CompilerOptions () : platform{get_platform()} {}; diff --git a/src/lpython/semantics/python_ast_to_asr.cpp b/src/lpython/semantics/python_ast_to_asr.cpp index 72347ba64a..bfd2121594 100644 --- a/src/lpython/semantics/python_ast_to_asr.cpp +++ b/src/lpython/semantics/python_ast_to_asr.cpp @@ -558,7 +558,7 @@ class CommonVisitor : public AST::BaseVisitor { IntrinsicNodeHandler intrinsic_node_handler; std::map &ast_overload; std::string parent_dir; - std::string import_path; + std::vector import_paths; Vec *current_body; ASR::ttype_t* ann_assign_target_type; AST::expr_t* assign_ast_target; @@ -573,9 +573,9 @@ class CommonVisitor : public AST::BaseVisitor { CommonVisitor(Allocator &al, LocationManager &lm, SymbolTable *symbol_table, diag::Diagnostics &diagnostics, bool main_module, std::map &ast_overload, std::string parent_dir, - std::string import_path, bool allow_implicit_casting_) + std::vector import_paths, bool allow_implicit_casting_) : diag{diagnostics}, al{al}, lm{lm}, current_scope{symbol_table}, main_module{main_module}, - ast_overload{ast_overload}, parent_dir{parent_dir}, import_path{import_path}, + ast_overload{ast_overload}, parent_dir{parent_dir}, import_paths{import_paths}, current_body{nullptr}, ann_assign_target_type{nullptr}, assign_ast_target{nullptr}, is_c_p_pointer_call{false}, allow_implicit_casting{allow_implicit_casting_} { current_module_dependencies.reserve(al, 4); @@ -3320,9 +3320,9 @@ class SymbolTableVisitor : public CommonVisitor { SymbolTableVisitor(Allocator &al, LocationManager &lm, SymbolTable *symbol_table, diag::Diagnostics &diagnostics, bool main_module, std::map &ast_overload, std::string parent_dir, - std::string import_path, bool allow_implicit_casting_) + std::vector import_paths, bool allow_implicit_casting_) : CommonVisitor(al, lm, symbol_table, diagnostics, main_module, ast_overload, - parent_dir, import_path, allow_implicit_casting_), is_derived_type{false} {} + parent_dir, import_paths, allow_implicit_casting_), is_derived_type{false} {} ASR::symbol_t* resolve_symbol(const Location &loc, const std::string &sub_name) { @@ -3636,8 +3636,8 @@ class SymbolTableVisitor : public CommonVisitor { in the second priority. Top priority path is runtime library path. */ - if( import_path != "" ) { - paths.insert(paths.begin() + 1, import_path); + for( auto& path: import_paths ) { + paths.push_back(path); } /* @@ -3870,10 +3870,10 @@ class SymbolTableVisitor : public CommonVisitor { Result symbol_table_visitor(Allocator &al, LocationManager &lm, const AST::Module_t &ast, diag::Diagnostics &diagnostics, bool main_module, std::map &ast_overload, std::string parent_dir, - std::string import_path, bool allow_implicit_casting) + std::vector import_paths, bool allow_implicit_casting) { SymbolTableVisitor v(al, lm, nullptr, diagnostics, main_module, ast_overload, - parent_dir, import_path, allow_implicit_casting); + parent_dir, import_paths, allow_implicit_casting); try { v.visit_Module(ast); } catch (const SemanticError &e) { @@ -3901,7 +3901,7 @@ class BodyVisitor : public CommonVisitor { BodyVisitor(Allocator &al, LocationManager &lm, ASR::asr_t *unit, diag::Diagnostics &diagnostics, bool main_module, std::map &ast_overload, bool allow_implicit_casting_) - : CommonVisitor(al, lm, nullptr, diagnostics, main_module, ast_overload, "", "", allow_implicit_casting_), + : CommonVisitor(al, lm, nullptr, diagnostics, main_module, ast_overload, "", {}, allow_implicit_casting_), asr{unit}, gotoids{0} {} @@ -6693,7 +6693,7 @@ Result python_ast_to_asr(Allocator &al, LocationManager ASR::asr_t *unit; auto res = symbol_table_visitor(al, lm, *ast_m, diagnostics, main_module, - ast_overload, parent_dir, compiler_options.import_path, allow_implicit_casting); + ast_overload, parent_dir, compiler_options.import_paths, allow_implicit_casting); if (res.ok) { unit = res.result; } else { From 1efe7364b227215cfd147b673daab8dc38caa282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Fri, 21 Apr 2023 17:33:04 -0600 Subject: [PATCH 2/2] Disallow allow_extra_args() --- src/bin/lpython.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/lpython.cpp b/src/bin/lpython.cpp index c5cb834935..7f3bc0fd46 100644 --- a/src/bin/lpython.cpp +++ b/src/bin/lpython.cpp @@ -1464,7 +1464,7 @@ int main(int argc, char *argv[]) // app.add_option("-l", arg_l, "Link library option"); // app.add_option("-L", arg_L, "Library path option"); app.add_option("-I", compiler_options.import_paths, "Specify the paths" - "to look for the module"); + "to look for the module")->allow_extra_args(false); // app.add_option("-J", arg_J, "Where to save mod files"); app.add_flag("-g", compiler_options.emit_debug_info, "Compile with debugging information"); app.add_flag("--debug-with-line-column", compiler_options.emit_debug_line_column,