mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 20:30:14 +01:00
Push a scope_stack entry for match_first blocks, and handle impls being inside those scope entries. An impl should not use the `match_first` block as its "enclosing scope" for the purpose of deciding if the impl is a redecl of another impl. We should look through it to the class or namespace the impl (and match_first) are located inside. We don't yet store the relationship between the impl and its match_first block, nor then can we use it in impl lookup for prioritization.
194 lines
7.5 KiB
C++
194 lines
7.5 KiB
C++
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
// This is an X-macro header. It does not use `#include` guards, and instead is
|
|
// designed to be `#include`ed after the x-macro is defined in order for its
|
|
// inclusion to expand to the desired output. Macro definitions are cleaned up
|
|
// at the end of this file.
|
|
//
|
|
// This macro should be defined before including this header:
|
|
// - CARBON_SEM_IR_INST_KIND(Name)
|
|
// Invoked for each kind of semantic instruction.
|
|
|
|
#ifndef CARBON_SEM_IR_INST_KIND
|
|
#error "Must define the x-macro to use this file."
|
|
#define CARBON_SEM_IR_INST_KIND(Name)
|
|
#endif
|
|
|
|
// For each instruction kind declared here there is a matching definition in
|
|
// `typed_insts.h`.
|
|
CARBON_SEM_IR_INST_KIND(AccessMemberAction)
|
|
CARBON_SEM_IR_INST_KIND(AccessOptionalMemberAction)
|
|
CARBON_SEM_IR_INST_KIND(AcquireValue)
|
|
CARBON_SEM_IR_INST_KIND(AdaptDecl)
|
|
CARBON_SEM_IR_INST_KIND(AddrOf)
|
|
CARBON_SEM_IR_INST_KIND(AliasBinding)
|
|
CARBON_SEM_IR_INST_KIND(ArrayIndex)
|
|
CARBON_SEM_IR_INST_KIND(ArrayInit)
|
|
CARBON_SEM_IR_INST_KIND(ArrayType)
|
|
CARBON_SEM_IR_INST_KIND(AsCompatible)
|
|
CARBON_SEM_IR_INST_KIND(Assign)
|
|
CARBON_SEM_IR_INST_KIND(AssociatedConstantDecl)
|
|
CARBON_SEM_IR_INST_KIND(AssociatedEntity)
|
|
CARBON_SEM_IR_INST_KIND(AssociatedEntityType)
|
|
CARBON_SEM_IR_INST_KIND(AutoType)
|
|
CARBON_SEM_IR_INST_KIND(BaseDecl)
|
|
CARBON_SEM_IR_INST_KIND(BlockArg)
|
|
CARBON_SEM_IR_INST_KIND(BoolLiteral)
|
|
CARBON_SEM_IR_INST_KIND(BoolType)
|
|
CARBON_SEM_IR_INST_KIND(BoundMethod)
|
|
CARBON_SEM_IR_INST_KIND(BoundMethodType)
|
|
CARBON_SEM_IR_INST_KIND(Branch)
|
|
CARBON_SEM_IR_INST_KIND(BranchIf)
|
|
CARBON_SEM_IR_INST_KIND(BranchWithArg)
|
|
CARBON_SEM_IR_INST_KIND(Call)
|
|
CARBON_SEM_IR_INST_KIND(CalleePatternMatchAction)
|
|
CARBON_SEM_IR_INST_KIND(CallerPatternMatchAction)
|
|
CARBON_SEM_IR_INST_KIND(CharLiteralType)
|
|
CARBON_SEM_IR_INST_KIND(CharLiteralValue)
|
|
CARBON_SEM_IR_INST_KIND(ClassDecl)
|
|
CARBON_SEM_IR_INST_KIND(ClassElementAccess)
|
|
CARBON_SEM_IR_INST_KIND(ClassInit)
|
|
CARBON_SEM_IR_INST_KIND(ClassType)
|
|
CARBON_SEM_IR_INST_KIND(CompleteTypeWitness)
|
|
CARBON_SEM_IR_INST_KIND(ConstType)
|
|
CARBON_SEM_IR_INST_KIND(ConvertToValueAction)
|
|
CARBON_SEM_IR_INST_KIND(Converted)
|
|
CARBON_SEM_IR_INST_KIND(CppOverloadSetType)
|
|
CARBON_SEM_IR_INST_KIND(CppOverloadSetValue)
|
|
CARBON_SEM_IR_INST_KIND(CppTemplateNameType)
|
|
CARBON_SEM_IR_INST_KIND(CustomLayoutType)
|
|
CARBON_SEM_IR_INST_KIND(CustomWitness)
|
|
CARBON_SEM_IR_INST_KIND(Deref)
|
|
CARBON_SEM_IR_INST_KIND(EnclosingClassAccess)
|
|
CARBON_SEM_IR_INST_KIND(ErrorInst)
|
|
CARBON_SEM_IR_INST_KIND(ExportDecl)
|
|
CARBON_SEM_IR_INST_KIND(ExprPattern)
|
|
CARBON_SEM_IR_INST_KIND(FacetAccessType)
|
|
CARBON_SEM_IR_INST_KIND(FacetType)
|
|
CARBON_SEM_IR_INST_KIND(FacetValue)
|
|
CARBON_SEM_IR_INST_KIND(FieldDecl)
|
|
CARBON_SEM_IR_INST_KIND(FloatLiteralType)
|
|
CARBON_SEM_IR_INST_KIND(FloatLiteralValue)
|
|
CARBON_SEM_IR_INST_KIND(FloatType)
|
|
CARBON_SEM_IR_INST_KIND(FloatValue)
|
|
CARBON_SEM_IR_INST_KIND(FormParamPatternAction)
|
|
CARBON_SEM_IR_INST_KIND(FormType)
|
|
CARBON_SEM_IR_INST_KIND(FunctionDecl)
|
|
CARBON_SEM_IR_INST_KIND(FunctionType)
|
|
CARBON_SEM_IR_INST_KIND(FunctionTypeWithSelfType)
|
|
CARBON_SEM_IR_INST_KIND(GenericClassType)
|
|
CARBON_SEM_IR_INST_KIND(GenericInterfaceType)
|
|
CARBON_SEM_IR_INST_KIND(GenericNamedConstraintType)
|
|
CARBON_SEM_IR_INST_KIND(ImplDecl)
|
|
CARBON_SEM_IR_INST_KIND(ImplWitness)
|
|
CARBON_SEM_IR_INST_KIND(ImplWitnessAccess)
|
|
CARBON_SEM_IR_INST_KIND(ImplWitnessAccessSubstituted)
|
|
CARBON_SEM_IR_INST_KIND(ImplWitnessAssociatedConstant)
|
|
CARBON_SEM_IR_INST_KIND(ImplWitnessTable)
|
|
CARBON_SEM_IR_INST_KIND(ImportCppDecl)
|
|
CARBON_SEM_IR_INST_KIND(ImportDecl)
|
|
CARBON_SEM_IR_INST_KIND(ImportRefLoaded)
|
|
CARBON_SEM_IR_INST_KIND(ImportRefUnloaded)
|
|
CARBON_SEM_IR_INST_KIND(InPlaceInit)
|
|
CARBON_SEM_IR_INST_KIND(InitForm)
|
|
CARBON_SEM_IR_INST_KIND(InlineCppDecl)
|
|
CARBON_SEM_IR_INST_KIND(InstType)
|
|
CARBON_SEM_IR_INST_KIND(InstValue)
|
|
CARBON_SEM_IR_INST_KIND(IntLiteralType)
|
|
CARBON_SEM_IR_INST_KIND(IntType)
|
|
CARBON_SEM_IR_INST_KIND(IntValue)
|
|
CARBON_SEM_IR_INST_KIND(InterfaceDecl)
|
|
CARBON_SEM_IR_INST_KIND(InterfaceWithSelfDecl)
|
|
CARBON_SEM_IR_INST_KIND(LookupImplWitness)
|
|
CARBON_SEM_IR_INST_KIND(MarkInPlaceInit)
|
|
CARBON_SEM_IR_INST_KIND(MatchFirstDecl)
|
|
CARBON_SEM_IR_INST_KIND(MaybeUnformedType)
|
|
CARBON_SEM_IR_INST_KIND(NameBindingDecl)
|
|
CARBON_SEM_IR_INST_KIND(NamedConstraintDecl)
|
|
CARBON_SEM_IR_INST_KIND(NamedConstraintWithSelfDecl)
|
|
CARBON_SEM_IR_INST_KIND(NameRef)
|
|
CARBON_SEM_IR_INST_KIND(Namespace)
|
|
CARBON_SEM_IR_INST_KIND(NamespaceType)
|
|
CARBON_SEM_IR_INST_KIND(ObserveEquivalent)
|
|
CARBON_SEM_IR_INST_KIND(ObserveImpls)
|
|
CARBON_SEM_IR_INST_KIND(ObserveDecl)
|
|
CARBON_SEM_IR_INST_KIND(OutFormParamPatternAction)
|
|
CARBON_SEM_IR_INST_KIND(OutParam)
|
|
CARBON_SEM_IR_INST_KIND(OutParamPattern)
|
|
CARBON_SEM_IR_INST_KIND(PartialType)
|
|
CARBON_SEM_IR_INST_KIND(PatternType)
|
|
CARBON_SEM_IR_INST_KIND(PointerType)
|
|
CARBON_SEM_IR_INST_KIND(RefBindingPattern)
|
|
CARBON_SEM_IR_INST_KIND(RefForm)
|
|
CARBON_SEM_IR_INST_KIND(RefParam)
|
|
CARBON_SEM_IR_INST_KIND(RefParamPattern)
|
|
CARBON_SEM_IR_INST_KIND(RefReturn)
|
|
CARBON_SEM_IR_INST_KIND(RefReturnPattern)
|
|
CARBON_SEM_IR_INST_KIND(RefTagExpr)
|
|
CARBON_SEM_IR_INST_KIND(RefineTypeAction)
|
|
CARBON_SEM_IR_INST_KIND(RequireCompleteType)
|
|
CARBON_SEM_IR_INST_KIND(RequireImplsDecl)
|
|
CARBON_SEM_IR_INST_KIND(RequireSpecificDefinition)
|
|
CARBON_SEM_IR_INST_KIND(RequireSpecificDefinitionType)
|
|
CARBON_SEM_IR_INST_KIND(RequirementBaseFacetType)
|
|
CARBON_SEM_IR_INST_KIND(RequirementEquivalent)
|
|
CARBON_SEM_IR_INST_KIND(RequirementImpls)
|
|
CARBON_SEM_IR_INST_KIND(RequirementRewrite)
|
|
CARBON_SEM_IR_INST_KIND(Return)
|
|
CARBON_SEM_IR_INST_KIND(ReturnExpr)
|
|
CARBON_SEM_IR_INST_KIND(ReturnSlot)
|
|
CARBON_SEM_IR_INST_KIND(ReturnSlotPattern)
|
|
CARBON_SEM_IR_INST_KIND(SpecificConstant)
|
|
CARBON_SEM_IR_INST_KIND(SpecificFunction)
|
|
CARBON_SEM_IR_INST_KIND(SpecificFunctionType)
|
|
CARBON_SEM_IR_INST_KIND(SpecificImplFunction)
|
|
CARBON_SEM_IR_INST_KIND(SpliceBlock)
|
|
CARBON_SEM_IR_INST_KIND(SpliceInst)
|
|
CARBON_SEM_IR_INST_KIND(StringLiteral)
|
|
CARBON_SEM_IR_INST_KIND(StructAccess)
|
|
CARBON_SEM_IR_INST_KIND(StructInit)
|
|
CARBON_SEM_IR_INST_KIND(StructLiteral)
|
|
CARBON_SEM_IR_INST_KIND(StructType)
|
|
CARBON_SEM_IR_INST_KIND(StructValue)
|
|
CARBON_SEM_IR_INST_KIND(SymbolicBinding)
|
|
CARBON_SEM_IR_INST_KIND(SymbolicBindingPattern)
|
|
CARBON_SEM_IR_INST_KIND(Temporary)
|
|
CARBON_SEM_IR_INST_KIND(TemporaryStorage)
|
|
CARBON_SEM_IR_INST_KIND(TupleAccess)
|
|
CARBON_SEM_IR_INST_KIND(TupleInit)
|
|
CARBON_SEM_IR_INST_KIND(TupleLiteral)
|
|
CARBON_SEM_IR_INST_KIND(TuplePattern)
|
|
CARBON_SEM_IR_INST_KIND(TupleType)
|
|
CARBON_SEM_IR_INST_KIND(TupleValue)
|
|
CARBON_SEM_IR_INST_KIND(TypeComponentOf)
|
|
CARBON_SEM_IR_INST_KIND(TypeLiteral)
|
|
CARBON_SEM_IR_INST_KIND(TypeOfInst)
|
|
CARBON_SEM_IR_INST_KIND(TypeType)
|
|
CARBON_SEM_IR_INST_KIND(UnaryOperatorNot)
|
|
CARBON_SEM_IR_INST_KIND(UnboundElementType)
|
|
CARBON_SEM_IR_INST_KIND(UninitializedValue)
|
|
CARBON_SEM_IR_INST_KIND(UpdateInit)
|
|
CARBON_SEM_IR_INST_KIND(ValueAsRef)
|
|
CARBON_SEM_IR_INST_KIND(ValueBindingPattern)
|
|
CARBON_SEM_IR_INST_KIND(ValueForm)
|
|
CARBON_SEM_IR_INST_KIND(ValueOfInitializer)
|
|
CARBON_SEM_IR_INST_KIND(ValueParam)
|
|
CARBON_SEM_IR_INST_KIND(ValueParamPattern)
|
|
CARBON_SEM_IR_INST_KIND(ValueReturn)
|
|
CARBON_SEM_IR_INST_KIND(ValueReturnPattern)
|
|
CARBON_SEM_IR_INST_KIND(VarParamPattern)
|
|
CARBON_SEM_IR_INST_KIND(VarPattern)
|
|
CARBON_SEM_IR_INST_KIND(VarStorage)
|
|
CARBON_SEM_IR_INST_KIND(VtableDecl)
|
|
CARBON_SEM_IR_INST_KIND(VtableType)
|
|
CARBON_SEM_IR_INST_KIND(VtablePtr)
|
|
CARBON_SEM_IR_INST_KIND(WhereExpr)
|
|
CARBON_SEM_IR_INST_KIND(WitnessType)
|
|
CARBON_SEM_IR_INST_KIND(WrapperBinding)
|
|
CARBON_SEM_IR_INST_KIND(WrapperBindingPattern)
|
|
|
|
#undef CARBON_SEM_IR_INST_KIND
|
|
#undef CARBON_SEM_IR_BUILTIN_INST_KIND
|