Skip to content

Commit bd74524

Browse files
committed
Separate "passes" from "_passes" in custom actions
Our custom argparse actions (SplitStore and ExtendMatch) have special behavior when the destination is specified as "passes", because accurately emulating compiler behavior for different passes has proven very complicated. This change allows standard argparse actions (e.g., store_const) to append to the "passes" variable while our custom argparse actions modify "_passes". These two variables can then be combined after the fact to produce the final list of active compiler passes. Signed-off-by: John Pennycook <john.pennycook@intel.com>
1 parent a6ba12b commit bd74524

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

codebasin/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __call__(
105105
template = string.Template(self.format)
106106
split_values = [template.substitute(value=v) for v in split_values]
107107
if self.dest == "passes":
108-
passes = getattr(namespace, self.dest)
108+
passes = getattr(namespace, "_passes")
109109
passes[option_string] = split_values
110110
else:
111111
setattr(namespace, self.dest, split_values)
@@ -144,7 +144,7 @@ def __call__(
144144
template = string.Template(self.format)
145145
matches = [template.substitute(value=v) for v in matches]
146146
if self.dest == "passes":
147-
passes = getattr(namespace, self.dest)
147+
passes = getattr(namespace, "_passes")
148148
if self.flag_name not in passes:
149149
passes[self.flag_name] = []
150150
if self.override:

tests/compilers/test_actions.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def test_store_split_init(self):
3030
def test_store_split(self):
3131
"""Check that argparse calls store_split correctly"""
3232
namespace = argparse.Namespace()
33-
namespace.passes = {}
33+
namespace._passes = {}
3434

3535
parser = argparse.ArgumentParser()
3636
parser.add_argument("--foo", action=_StoreSplitAction, sep=",")
@@ -58,7 +58,7 @@ def test_store_split(self):
5858
args, _ = parser.parse_known_args(["--baz=1"], namespace)
5959

6060
args, _ = parser.parse_known_args(["--qux=one,two"], namespace)
61-
self.assertEqual(args.passes, {"--qux": ["one", "two"]})
61+
self.assertEqual(args._passes, {"--qux": ["one", "two"]})
6262

6363
def test_extend_match_init(self):
6464
"""Check that extend_match recognizes custom arguments"""
@@ -127,30 +127,30 @@ def test_extend_match(self):
127127

128128
# Check that the default pass defined by --qux always exists.
129129
# Note that the caller must initialize the default.
130-
namespace.passes = {"--qux": ["0"]}
130+
namespace._passes = {"--qux": ["0"]}
131131
args, _ = parser.parse_known_args(
132132
[],
133133
namespace,
134134
)
135-
self.assertEqual(args.passes, {"--qux": ["0"]})
135+
self.assertEqual(args._passes, {"--qux": ["0"]})
136136

137137
# Check that the default pass is overridden by use of --qux.
138138
# Note that the caller must initialize the default.
139-
namespace.passes = {"--qux": ["0"]}
139+
namespace._passes = {"--qux": ["0"]}
140140
args, _ = parser.parse_known_args(
141141
["--qux=option_1,option_2"],
142142
namespace,
143143
)
144-
self.assertEqual(args.passes, {"--qux": ["1", "2"]})
144+
self.assertEqual(args._passes, {"--qux": ["1", "2"]})
145145

146-
namespace.passes = {}
146+
namespace._passes = {}
147147
args, _ = parser.parse_known_args(
148148
["--one=option_1", "--two=option_2"],
149149
namespace,
150150
)
151-
self.assertEqual(args.passes, {"--one": ["1", "2"]})
151+
self.assertEqual(args._passes, {"--one": ["1", "2"]})
152152

153-
namespace.passes = {}
153+
namespace._passes = {}
154154

155155

156156
if __name__ == "__main__":

0 commit comments

Comments
 (0)