aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2020-05-11 22:00:12 +0200
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2020-06-05 09:04:04 +0200
commitba8e838dcffa2b7a82afc9a75afae8a2c27d8883 (patch)
tree043f3736da101a646f9faddea1e083a298057d71
parent256e910dee90bda81286f31081b56a707f267e0d (diff)
downloadmeson-ba8e838dcffa2b7a82afc9a75afae8a2c27d8883.zip
meson-ba8e838dcffa2b7a82afc9a75afae8a2c27d8883.tar.gz
meson-ba8e838dcffa2b7a82afc9a75afae8a2c27d8883.tar.bz2
Revert "CompilerArgs: make lookup faster"
This was a not so nice solution, and should be replaced with something better. This reverts commit 4524088d386d2e2315d8fef6ffedc11d8e9a394a.
-rw-r--r--mesonbuild/compilers/compilers.py33
1 files changed, 7 insertions, 26 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index ce1016d..07b07d9 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -16,7 +16,6 @@ import contextlib, os.path, re, tempfile
import collections.abc
import itertools
import typing as T
-from functools import lru_cache
from ..linkers import (
GnuLikeDynamicLinkerMixin, LinkerEnvVarsMixin, SolarisDynamicLinker,
@@ -466,9 +465,6 @@ class CompilerArgs(collections.abc.MutableSequence):
iterable: T.Optional[T.Iterable[str]] = None):
self.compiler = compiler
self.__container = list(iterable) if iterable is not None else [] # type: T.List[str]
- self.__seen_args = set()
- for arg in self.__container:
- self.__seen_args.add(arg)
@T.overload # noqa: F811
def __getitem__(self, index: int) -> str: # noqa: F811
@@ -491,27 +487,20 @@ class CompilerArgs(collections.abc.MutableSequence):
def __setitem__(self, index, value) -> None: # noqa: F811
self.__container[index] = value
- for v in value:
- self.__seen_args.add(v)
def __delitem__(self, index: T.Union[int, slice]) -> None:
- value = self.__container[index]
del self.__container[index]
- if value in self.__seen_args and value in self.__container: # this is also honoring that you can have duplicated entries
- self.__seen_args.remove(value)
def __len__(self) -> int:
return len(self.__container)
def insert(self, index: int, value: str) -> None:
self.__container.insert(index, value)
- self.__seen_args.add(value)
def copy(self) -> 'CompilerArgs':
return CompilerArgs(self.compiler, self.__container.copy())
@classmethod
- @lru_cache(maxsize=None)
def _can_dedup(cls, arg):
'''
Returns whether the argument can be safely de-duped. This is dependent
@@ -566,7 +555,6 @@ class CompilerArgs(collections.abc.MutableSequence):
return 0
@classmethod
- @lru_cache(maxsize=None)
def _should_prepend(cls, arg):
if arg.startswith(cls.prepend_prefixes):
return True
@@ -643,7 +631,6 @@ class CompilerArgs(collections.abc.MutableSequence):
self.append(arg)
else:
self.__container.append(arg)
- self.__seen_args.add(arg)
def extend_direct(self, iterable: T.Iterable[str]) -> None:
'''
@@ -675,7 +662,6 @@ class CompilerArgs(collections.abc.MutableSequence):
Add two CompilerArgs while taking into account overriding of arguments
and while preserving the order of arguments as much as possible
'''
- this_round_added = set() # a dict that contains a value, when the value was added this round
pre = [] # type: T.List[str]
post = [] # type: T.List[str]
if not isinstance(args, collections.abc.Iterable):
@@ -687,25 +673,20 @@ class CompilerArgs(collections.abc.MutableSequence):
dedup = self._can_dedup(arg)
if dedup == 1:
# Argument already exists and adding a new instance is useless
- if arg in self.__seen_args or arg in pre or arg in post:
+ if arg in self or arg in pre or arg in post:
continue
- should_prepend = self._should_prepend(arg)
if dedup == 2:
# Remove all previous occurrences of the arg and add it anew
- if arg in self.__seen_args and arg not in this_round_added: # if __seen_args contains arg as well as this_round_added, then its not yet part in self.
+ if arg in self:
self.remove(arg)
- if should_prepend:
- if arg in pre:
- pre.remove(arg)
- else:
- if arg in post:
- post.remove(arg)
- if should_prepend:
+ if arg in pre:
+ pre.remove(arg)
+ if arg in post:
+ post.remove(arg)
+ if self._should_prepend(arg):
pre.append(arg)
else:
post.append(arg)
- self.__seen_args.add(arg)
- this_round_added.add(arg)
# Insert at the beginning
self[:0] = pre
# Append to the end