@@ -1629,27 +1629,60 @@ algorithm
1629
1629
end try ;
1630
1630
end lookupConfigFlag;
1631
1631
1632
+ protected function configFlagEq
1633
+ input ConfigFlag inFlag1;
1634
+ input ConfigFlag inFlag2;
1635
+ output Boolean eq;
1636
+ algorithm
1637
+ eq := match(inFlag1, inFlag2)
1638
+ local
1639
+ Integer index1, index2;
1640
+ case (CONFIG_FLAG (index= index1), CONFIG_FLAG (index= index2))
1641
+ then index1 == index2;
1642
+ end match;
1643
+ end configFlagEq;
1644
+
1645
+ protected function setAdditionalOptModules
1646
+ input ConfigFlag inFlag;
1647
+ input ConfigFlag inOppositeFlag;
1648
+ input list< String > inValues;
1649
+ protected
1650
+ list< String > values;
1651
+ algorithm
1652
+ for value in inValues loop
1653
+ // remove value from inOppositeFlag
1654
+ values := getConfigStringList(inOppositeFlag);
1655
+ values := List . removeOnTrue(value, stringEq, values);
1656
+ setConfigStringList(inOppositeFlag, values);
1657
+
1658
+ // add value to inFlag
1659
+ values := getConfigStringList(inFlag);
1660
+ values := List . removeOnTrue(value, stringEq, values);
1661
+ setConfigStringList(inFlag, value::values);
1662
+ end for ;
1663
+ end setAdditionalOptModules;
1664
+
1632
1665
protected function evaluateConfigFlag
1633
1666
"Evaluates a given flag and it's arguments."
1634
1667
input ConfigFlag inFlag;
1635
1668
input list< String > inValues;
1636
1669
input Flags inFlags;
1637
1670
algorithm
1638
- _ := match(inFlag, inValues, inFlags)
1671
+ _ := match(inFlag, inFlags)
1639
1672
local
1640
1673
array< Boolean > debug_flags;
1641
1674
array< FlagData > config_flags;
1642
1675
list< String > values;
1643
1676
1644
1677
// Special case for +d, +debug, set the given debug flags.
1645
- case (CONFIG_FLAG (index = 1 ), _, FLAGS (debugFlags = debug_flags))
1678
+ case (CONFIG_FLAG (index = 1 ), FLAGS (debugFlags = debug_flags))
1646
1679
equation
1647
1680
List . map1_0(inValues, setDebugFlag, debug_flags);
1648
1681
then
1649
1682
();
1650
1683
1651
1684
// Special case for +h, +help, show help text.
1652
- case (CONFIG_FLAG (index = 2 ), _, _ )
1685
+ case (CONFIG_FLAG (index = 2 ), _)
1653
1686
equation
1654
1687
values = List . map(inValues, System . tolower);
1655
1688
System . gettextInit(if getConfigString(RUNNING_TESTSUITE ) == "" then getConfigString(LOCALE_FLAG ) else "C" );
@@ -1658,8 +1691,50 @@ algorithm
1658
1691
then
1659
1692
();
1660
1693
1694
+ // Special case for --preOptModules+=<value>
1695
+ case (_, FLAGS (configFlags = config_flags)) guard(configFlagEq(inFlag, PRE_OPT_MODULES_ADD ))
1696
+ equation
1697
+ setAdditionalOptModules(PRE_OPT_MODULES_ADD , PRE_OPT_MODULES_SUB , inValues);
1698
+ then
1699
+ ();
1700
+
1701
+ // Special case for --preOptModules-=<value>
1702
+ case (_, FLAGS (configFlags = config_flags)) guard(configFlagEq(inFlag, PRE_OPT_MODULES_SUB ))
1703
+ equation
1704
+ setAdditionalOptModules(PRE_OPT_MODULES_SUB , PRE_OPT_MODULES_ADD , inValues);
1705
+ then
1706
+ ();
1707
+
1708
+ // Special case for --postOptModules+=<value>
1709
+ case (_, FLAGS (configFlags = config_flags)) guard(configFlagEq(inFlag, POST_OPT_MODULES_ADD ))
1710
+ equation
1711
+ setAdditionalOptModules(POST_OPT_MODULES_ADD , POST_OPT_MODULES_SUB , inValues);
1712
+ then
1713
+ ();
1714
+
1715
+ // Special case for --postOptModules-=<value>
1716
+ case (_, FLAGS (configFlags = config_flags)) guard(configFlagEq(inFlag, POST_OPT_MODULES_SUB ))
1717
+ equation
1718
+ setAdditionalOptModules(POST_OPT_MODULES_SUB , POST_OPT_MODULES_ADD , inValues);
1719
+ then
1720
+ ();
1721
+
1722
+ // Special case for --initOptModules+=<value>
1723
+ case (_, FLAGS (configFlags = config_flags)) guard(configFlagEq(inFlag, INIT_OPT_MODULES_ADD ))
1724
+ equation
1725
+ setAdditionalOptModules(INIT_OPT_MODULES_ADD , INIT_OPT_MODULES_SUB , inValues);
1726
+ then
1727
+ ();
1728
+
1729
+ // Special case for --initOptModules-=<value>
1730
+ case (_, FLAGS (configFlags = config_flags)) guard(configFlagEq(inFlag, INIT_OPT_MODULES_SUB ))
1731
+ equation
1732
+ setAdditionalOptModules(INIT_OPT_MODULES_SUB , INIT_OPT_MODULES_ADD , inValues);
1733
+ then
1734
+ ();
1735
+
1661
1736
// All other configuration flags, set the flag to the given values.
1662
- case (_, _, FLAGS (configFlags = config_flags))
1737
+ case (_, FLAGS (configFlags = config_flags))
1663
1738
equation
1664
1739
setConfigFlag(inFlag, config_flags, inValues);
1665
1740
then
0 commit comments