blob: 86efb7264f1621b7493563751917d739cfb9c6cb [file] [log] [blame]
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Attributes in the C++ backend and associated metadata."""
from enum import Enum
from compiler.util import attribute_util
class Attribute(str, Enum):
"""Attributes available in the C++ backend."""
NAMESPACE = "namespace"
ENUM_CASE = "enum_case"
# Types associated with C++ backend attributes.
TYPES = {
Attribute.NAMESPACE: attribute_util.STRING,
Attribute.ENUM_CASE: attribute_util.STRING,
}
class Scope(set[tuple[Attribute, bool]], Enum):
"""Allowed scopes for C++ backend attributes.
Each entry is a set of (Attribute, default?) tuples, the first value being
the attribute itself, the second value being a boolean value indicating
whether the attribute is allowed to be defaulted in that scope."""
BITS = {
# Bits may contain an enum definition.
(Attribute.ENUM_CASE, True)
}
ENUM = {
(Attribute.ENUM_CASE, True),
}
ENUM_VALUE = {
(Attribute.ENUM_CASE, False),
}
MODULE = {
(Attribute.NAMESPACE, False),
(Attribute.ENUM_CASE, True),
},
STRUCT = {
# Struct may contain an enum definition.
(Attribute.ENUM_CASE, True),
}