Remove leftover attributes from parser (#39574)

#35042 introduced lazy hash parsing, but didn't remove a
few attributes from the parser that were needed only for
concrete specs

This commit removes them, since they are effectively
dead code.
This commit is contained in:
Massimiliano Culpo 2023-08-24 08:04:43 +02:00 committed by GitHub
parent ca1e4d54b5
commit fdea5e7624
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 1 additions and 27 deletions

View file

@ -288,9 +288,6 @@ def next_spec(
) )
raise SpecParsingError(msg, self.ctx.current_token, self.literal_str) raise SpecParsingError(msg, self.ctx.current_token, self.literal_str)
if root_spec.concrete:
raise spack.spec.RedundantSpecError(root_spec, "^" + str(dependency))
root_spec._add_dependency(dependency, deptypes=(), virtuals=()) root_spec._add_dependency(dependency, deptypes=(), virtuals=())
else: else:
@ -306,13 +303,12 @@ def all_specs(self) -> List[spack.spec.Spec]:
class SpecNodeParser: class SpecNodeParser:
"""Parse a single spec node from a stream of tokens""" """Parse a single spec node from a stream of tokens"""
__slots__ = "ctx", "has_compiler", "has_version", "has_hash" __slots__ = "ctx", "has_compiler", "has_version"
def __init__(self, ctx): def __init__(self, ctx):
self.ctx = ctx self.ctx = ctx
self.has_compiler = False self.has_compiler = False
self.has_version = False self.has_version = False
self.has_hash = False
def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spack.spec.Spec]: def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spack.spec.Spec]:
"""Parse a single spec node from a stream of tokens """Parse a single spec node from a stream of tokens
@ -343,7 +339,6 @@ def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spac
while True: while True:
if self.ctx.accept(TokenType.COMPILER): if self.ctx.accept(TokenType.COMPILER):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
if self.has_compiler: if self.has_compiler:
raise spack.spec.DuplicateCompilerSpecError( raise spack.spec.DuplicateCompilerSpecError(
f"{initial_spec} cannot have multiple compilers" f"{initial_spec} cannot have multiple compilers"
@ -353,7 +348,6 @@ def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spac
initial_spec.compiler = spack.spec.CompilerSpec(compiler_name.strip(), ":") initial_spec.compiler = spack.spec.CompilerSpec(compiler_name.strip(), ":")
self.has_compiler = True self.has_compiler = True
elif self.ctx.accept(TokenType.COMPILER_AND_VERSION): elif self.ctx.accept(TokenType.COMPILER_AND_VERSION):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
if self.has_compiler: if self.has_compiler:
raise spack.spec.DuplicateCompilerSpecError( raise spack.spec.DuplicateCompilerSpecError(
f"{initial_spec} cannot have multiple compilers" f"{initial_spec} cannot have multiple compilers"
@ -367,7 +361,6 @@ def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spac
elif self.ctx.accept(TokenType.VERSION) or self.ctx.accept( elif self.ctx.accept(TokenType.VERSION) or self.ctx.accept(
TokenType.VERSION_HASH_PAIR TokenType.VERSION_HASH_PAIR
): ):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
if self.has_version: if self.has_version:
raise spack.spec.MultipleVersionError( raise spack.spec.MultipleVersionError(
f"{initial_spec} cannot have multiple versions" f"{initial_spec} cannot have multiple versions"
@ -378,25 +371,21 @@ def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spac
initial_spec.attach_git_version_lookup() initial_spec.attach_git_version_lookup()
self.has_version = True self.has_version = True
elif self.ctx.accept(TokenType.BOOL_VARIANT): elif self.ctx.accept(TokenType.BOOL_VARIANT):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
variant_value = self.ctx.current_token.value[0] == "+" variant_value = self.ctx.current_token.value[0] == "+"
initial_spec._add_flag( initial_spec._add_flag(
self.ctx.current_token.value[1:].strip(), variant_value, propagate=False self.ctx.current_token.value[1:].strip(), variant_value, propagate=False
) )
elif self.ctx.accept(TokenType.PROPAGATED_BOOL_VARIANT): elif self.ctx.accept(TokenType.PROPAGATED_BOOL_VARIANT):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
variant_value = self.ctx.current_token.value[0:2] == "++" variant_value = self.ctx.current_token.value[0:2] == "++"
initial_spec._add_flag( initial_spec._add_flag(
self.ctx.current_token.value[2:].strip(), variant_value, propagate=True self.ctx.current_token.value[2:].strip(), variant_value, propagate=True
) )
elif self.ctx.accept(TokenType.KEY_VALUE_PAIR): elif self.ctx.accept(TokenType.KEY_VALUE_PAIR):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
name, value = self.ctx.current_token.value.split("=", maxsplit=1) name, value = self.ctx.current_token.value.split("=", maxsplit=1)
name = name.strip("'\" ") name = name.strip("'\" ")
value = value.strip("'\" ") value = value.strip("'\" ")
initial_spec._add_flag(name, value, propagate=False) initial_spec._add_flag(name, value, propagate=False)
elif self.ctx.accept(TokenType.PROPAGATED_KEY_VALUE_PAIR): elif self.ctx.accept(TokenType.PROPAGATED_KEY_VALUE_PAIR):
self.hash_not_parsed_or_raise(initial_spec, self.ctx.current_token.value)
name, value = self.ctx.current_token.value.split("==", maxsplit=1) name, value = self.ctx.current_token.value.split("==", maxsplit=1)
name = name.strip("'\" ") name = name.strip("'\" ")
value = value.strip("'\" ") value = value.strip("'\" ")
@ -411,12 +400,6 @@ def parse(self, initial_spec: Optional[spack.spec.Spec] = None) -> Optional[spac
return initial_spec return initial_spec
def hash_not_parsed_or_raise(self, spec, addition):
if not self.has_hash:
return
raise spack.spec.RedundantSpecError(spec, addition)
class FileParser: class FileParser:
"""Parse a single spec from a JSON or YAML file""" """Parse a single spec from a JSON or YAML file"""

View file

@ -112,7 +112,6 @@
"UnsatisfiableDependencySpecError", "UnsatisfiableDependencySpecError",
"AmbiguousHashError", "AmbiguousHashError",
"InvalidHashError", "InvalidHashError",
"RedundantSpecError",
"SpecDeprecatedError", "SpecDeprecatedError",
] ]
@ -5331,14 +5330,6 @@ class NoSuchSpecFileError(SpecFilenameError):
"""Raised when a spec file doesn't exist.""" """Raised when a spec file doesn't exist."""
class RedundantSpecError(spack.error.SpecError):
def __init__(self, spec, addition):
super().__init__(
"Attempting to add %s to spec %s which is already concrete."
" This is likely the result of adding to a spec specified by hash." % (addition, spec)
)
class SpecFormatStringError(spack.error.SpecError): class SpecFormatStringError(spack.error.SpecError):
"""Called for errors in Spec format strings.""" """Called for errors in Spec format strings."""