[AST/Parser] Convert TypeLoc struct into aligned class

This commit is contained in:
Pavel Yaskevich
2020-04-27 23:06:44 -07:00
parent 99ef865aac
commit 0b4404b51e
9 changed files with 13 additions and 9 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;