mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[AST/Parser] Convert TypeLoc struct into aligned class
This commit is contained in:
@@ -30,7 +30,7 @@ namespace swift {
|
|||||||
class Stmt;
|
class Stmt;
|
||||||
class Decl;
|
class Decl;
|
||||||
class Pattern;
|
class Pattern;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
class DeclContext;
|
class DeclContext;
|
||||||
class SourceLoc;
|
class SourceLoc;
|
||||||
class SourceRange;
|
class SourceRange;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace swift {
|
|||||||
class TypeDecl;
|
class TypeDecl;
|
||||||
class EnumElementDecl;
|
class EnumElementDecl;
|
||||||
class Type;
|
class Type;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
class Pattern;
|
class Pattern;
|
||||||
class ExtensionDecl;
|
class ExtensionDecl;
|
||||||
class NominalTypeDecl;
|
class NominalTypeDecl;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class ModuleDecl;
|
|||||||
class Stmt;
|
class Stmt;
|
||||||
class Pattern;
|
class Pattern;
|
||||||
class TypeRepr;
|
class TypeRepr;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
class ParameterList;
|
class ParameterList;
|
||||||
enum class AccessKind: unsigned char;
|
enum class AccessKind: unsigned char;
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ namespace swift {
|
|||||||
class TypeVariableType;
|
class TypeVariableType;
|
||||||
class TypeBase;
|
class TypeBase;
|
||||||
class TypeDecl;
|
class TypeDecl;
|
||||||
|
class TypeLoc;
|
||||||
class ValueDecl;
|
class ValueDecl;
|
||||||
|
|
||||||
/// We frequently use three tag bits on all of these types.
|
/// We frequently use three tag bits on all of these types.
|
||||||
@@ -63,6 +64,7 @@ namespace swift {
|
|||||||
constexpr size_t PatternAlignInBits = 3;
|
constexpr size_t PatternAlignInBits = 3;
|
||||||
constexpr size_t SILFunctionAlignInBits = 2;
|
constexpr size_t SILFunctionAlignInBits = 2;
|
||||||
constexpr size_t TypeVariableAlignInBits = 4;
|
constexpr size_t TypeVariableAlignInBits = 4;
|
||||||
|
constexpr size_t TypeLocAlignInBits = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@@ -124,6 +126,8 @@ LLVM_DECLARE_TYPE_ALIGNMENT(swift::SILFunction,
|
|||||||
|
|
||||||
LLVM_DECLARE_TYPE_ALIGNMENT(swift::AttributeBase, swift::AttrAlignInBits)
|
LLVM_DECLARE_TYPE_ALIGNMENT(swift::AttributeBase, swift::AttrAlignInBits)
|
||||||
|
|
||||||
|
LLVM_DECLARE_TYPE_ALIGNMENT(swift::TypeLoc, swift::TypeLocAlignInBits)
|
||||||
|
|
||||||
static_assert(alignof(void*) >= 2, "pointer alignment is too small");
|
static_assert(alignof(void*) >= 2, "pointer alignment is too small");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class RequirementRepr;
|
|||||||
class SpecializeAttr;
|
class SpecializeAttr;
|
||||||
class TrailingWhereClause;
|
class TrailingWhereClause;
|
||||||
class TypeAliasDecl;
|
class TypeAliasDecl;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
class Witness;
|
class Witness;
|
||||||
struct TypeWitnessAndDecl;
|
struct TypeWitnessAndDecl;
|
||||||
class ValueDecl;
|
class ValueDecl;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "swift/Basic/SourceLoc.h"
|
#include "swift/Basic/SourceLoc.h"
|
||||||
#include "swift/AST/Type.h"
|
#include "swift/AST/Type.h"
|
||||||
|
#include "swift/AST/TypeAlignments.h"
|
||||||
#include "llvm/ADT/PointerIntPair.h"
|
#include "llvm/ADT/PointerIntPair.h"
|
||||||
|
|
||||||
namespace swift {
|
namespace swift {
|
||||||
@@ -28,8 +29,7 @@ class TypeRepr;
|
|||||||
|
|
||||||
/// TypeLoc - Provides source location information for a parsed type.
|
/// TypeLoc - Provides source location information for a parsed type.
|
||||||
/// A TypeLoc is stored in AST nodes which use an explicitly written type.
|
/// A TypeLoc is stored in AST nodes which use an explicitly written type.
|
||||||
struct TypeLoc {
|
class alignas(1 << TypeLocAlignInBits) TypeLoc {
|
||||||
private:
|
|
||||||
Type Ty;
|
Type Ty;
|
||||||
TypeRepr *TyR = nullptr;
|
TypeRepr *TyR = nullptr;
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace swift {
|
|||||||
class ScopeInfo;
|
class ScopeInfo;
|
||||||
class SourceManager;
|
class SourceManager;
|
||||||
class TupleType;
|
class TupleType;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
|
|
||||||
struct EnumElementInfo;
|
struct EnumElementInfo;
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ namespace swift {
|
|||||||
class Token;
|
class Token;
|
||||||
class TopLevelContext;
|
class TopLevelContext;
|
||||||
class TypeCheckerOptions;
|
class TypeCheckerOptions;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
class UnifiedStatsReporter;
|
class UnifiedStatsReporter;
|
||||||
|
|
||||||
namespace Lowering {
|
namespace Lowering {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
namespace swift {
|
namespace swift {
|
||||||
|
|
||||||
class Expr;
|
class Expr;
|
||||||
struct TypeLoc;
|
class TypeLoc;
|
||||||
class VarDecl;
|
class VarDecl;
|
||||||
class Pattern;
|
class Pattern;
|
||||||
class SourceManager;
|
class SourceManager;
|
||||||
|
|||||||
Reference in New Issue
Block a user