(self, tokens)
| 1950 | |
| 1951 | _parse_regex_target = re.compile(r'\s|[*,/]|([()])') |
| 1952 | def _parse_target_tokens(self, tokens): |
| 1953 | assert(isinstance(tokens, str)) |
| 1954 | final_targets = [] # to keep it sorted as specified |
| 1955 | extra_flags = [] |
| 1956 | has_baseline = False |
| 1957 | |
| 1958 | skipped = set() |
| 1959 | policies = set() |
| 1960 | multi_target = None |
| 1961 | |
| 1962 | tokens = list(filter(None, re.split(self._parse_regex_target, tokens))) |
| 1963 | if not tokens: |
| 1964 | self.dist_fatal("expected one token at least") |
| 1965 | |
| 1966 | for tok in tokens: |
| 1967 | TOK = tok.upper() |
| 1968 | ch = tok[0] |
| 1969 | if ch in ('+', '-'): |
| 1970 | self.dist_fatal( |
| 1971 | "+/- are 'not' allowed from target's groups or @targets, " |
| 1972 | "only from cpu_baseline and cpu_dispatch parms" |
| 1973 | ) |
| 1974 | elif ch == '$': |
| 1975 | if multi_target is not None: |
| 1976 | self.dist_fatal( |
| 1977 | "policies aren't allowed inside multi-target '()'" |
| 1978 | ", only CPU features" |
| 1979 | ) |
| 1980 | policies.add(self._parse_token_policy(TOK)) |
| 1981 | elif ch == '#': |
| 1982 | if multi_target is not None: |
| 1983 | self.dist_fatal( |
| 1984 | "target groups aren't allowed inside multi-target '()'" |
| 1985 | ", only CPU features" |
| 1986 | ) |
| 1987 | has_baseline, final_targets, extra_flags = \ |
| 1988 | self._parse_token_group(TOK, has_baseline, final_targets, extra_flags) |
| 1989 | elif ch == '(': |
| 1990 | if multi_target is not None: |
| 1991 | self.dist_fatal("unclosed multi-target, missing ')'") |
| 1992 | multi_target = set() |
| 1993 | elif ch == ')': |
| 1994 | if multi_target is None: |
| 1995 | self.dist_fatal("multi-target opener '(' wasn't found") |
| 1996 | targets = self._parse_multi_target(multi_target) |
| 1997 | if targets is None: |
| 1998 | skipped.add(tuple(multi_target)) |
| 1999 | else: |
| 2000 | if len(targets) == 1: |
| 2001 | targets = targets[0] |
| 2002 | if targets and targets not in final_targets: |
| 2003 | final_targets.append(targets) |
| 2004 | multi_target = None # back to default |
| 2005 | else: |
| 2006 | if TOK == "BASELINE": |
| 2007 | if multi_target is not None: |
| 2008 | self.dist_fatal("baseline isn't allowed inside multi-target '()'") |
| 2009 | has_baseline = True |
no test coverage detected