@@ -158,13 +158,16 @@ def test_cli_get_args_parsing() -> None:
158158 "out.o" ,
159159 "--lib" ,
160160 "--show-tokens" ,
161+ "--link-mode" ,
162+ "no-pie" ,
161163 ]
162164 )
163165
164166 assert args .input_files == ["examples/sum.x" ]
165167 assert args .output_file == "out.o"
166168 assert args .is_lib is True
167169 assert args .show_tokens is True
170+ assert args .link_mode == "no-pie"
168171 assert args .run is False
169172
170173
@@ -194,6 +197,7 @@ def parse_args(self) -> Namespace:
194197 version = True ,
195198 output_file = "" ,
196199 is_lib = False ,
200+ link_mode = "auto" ,
197201 show_ast = False ,
198202 show_tokens = False ,
199203 show_llvm_ir = False ,
@@ -231,6 +235,7 @@ def parse_args(self) -> Namespace:
231235 version = False ,
232236 output_file = "out.o" ,
233237 is_lib = True ,
238+ link_mode = "auto" ,
234239 show_ast = False ,
235240 show_tokens = True ,
236241 show_llvm_ir = False ,
@@ -270,6 +275,7 @@ def parse_args(self) -> Namespace:
270275 version = False ,
271276 output_file = "" ,
272277 is_lib = True ,
278+ link_mode = "auto" ,
273279 show_ast = False ,
274280 show_tokens = False ,
275281 show_llvm_ir = False ,
@@ -508,23 +514,27 @@ class DummyIRBuild:
508514 built_tree : object | None = None
509515 built_out : str | None = None
510516 built_link : bool | None = None
517+ built_link_mode : str | None = None
511518
512519 def build (
513520 self ,
514521 tree : object ,
515522 output_file : str = "" ,
516523 link : bool = True ,
524+ link_mode : str = "auto" ,
517525 ) -> None :
518526 DummyIRBuild .built_tree = tree
519527 DummyIRBuild .built_out = output_file
520528 DummyIRBuild .built_link = link
529+ DummyIRBuild .built_link_mode = link_mode
521530
522531 monkeypatch .setattr (main_module , "LLVMLiteIR" , DummyIRBuild )
523532 monkeypatch .setattr (app , "_get_astx" , fake_get_astx_tree )
524533 app .compile ()
525534 assert DummyIRBuild .built_tree is not None
526535 assert DummyIRBuild .built_out == "out.o"
527536 assert DummyIRBuild .built_link is False
537+ assert DummyIRBuild .built_link_mode == "auto"
528538
529539
530540def test_arxmain_compile_default_output_name (
@@ -544,16 +554,19 @@ def fake_get_astx_tree() -> object:
544554 class DummyIRBuild :
545555 built_out : str | None = None
546556 built_link : bool | None = None
557+ built_link_mode : str | None = None
547558
548559 def build (
549560 self ,
550561 tree : object ,
551562 output_file : str = "" ,
552563 link : bool = True ,
564+ link_mode : str = "auto" ,
553565 ) -> None :
554566 del tree
555567 DummyIRBuild .built_out = output_file
556568 DummyIRBuild .built_link = link
569+ DummyIRBuild .built_link_mode = link_mode
557570
558571 monkeypatch .setattr (app , "_get_astx" , fake_get_astx_tree )
559572 monkeypatch .setattr (main_module , "LLVMLiteIR" , DummyIRBuild )
@@ -562,6 +575,7 @@ def build(
562575
563576 assert DummyIRBuild .built_out == "print-star"
564577 assert DummyIRBuild .built_link is False
578+ assert DummyIRBuild .built_link_mode == "auto"
565579 assert app .output_file == "print-star"
566580
567581
@@ -581,15 +595,18 @@ def fake_get_astx_tree() -> object:
581595
582596 class DummyIRBuild :
583597 built_link : bool | None = None
598+ built_link_mode : str | None = None
584599
585600 def build (
586601 self ,
587602 tree : object ,
588603 output_file : str = "" ,
589604 link : bool = True ,
605+ link_mode : str = "auto" ,
590606 ) -> None :
591607 del tree , output_file
592608 DummyIRBuild .built_link = link
609+ DummyIRBuild .built_link_mode = link_mode
593610
594611 def fake_has_main_entry (node : object ) -> bool :
595612 del node
@@ -602,6 +619,7 @@ def fake_has_main_entry(node: object) -> bool:
602619 app .compile ()
603620
604621 assert DummyIRBuild .built_link is True
622+ assert DummyIRBuild .built_link_mode == "auto"
605623
606624
607625def test_arxmain_run_requires_executable_for_run_flag (
0 commit comments