Commit 7b17fa18 by Olli Etuaho Committed by Commit Bot

Add a constexpr constructor for TVariable

BUG=angleproject:2267 TEST=angle_unittests Change-Id: I9b7e01801caa7235ac5e2d4212ea92e38c1f774d Reviewed-on: https://chromium-review.googlesource.com/908752 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 34a06269
...@@ -30,7 +30,7 @@ using Microsoft::WRL::ComPtr; ...@@ -30,7 +30,7 @@ using Microsoft::WRL::ComPtr;
class NonCopyable class NonCopyable
{ {
protected: protected:
NonCopyable() = default; constexpr NonCopyable() = default;
~NonCopyable() = default; ~NonCopyable() = default;
private: private:
......
...@@ -54,7 +54,8 @@ class ImmutableString ...@@ -54,7 +54,8 @@ class ImmutableString
{ {
} }
ImmutableString(const ImmutableString &) = default; constexpr ImmutableString(const ImmutableString &) = default;
ImmutableString &operator=(const ImmutableString &) = default; ImmutableString &operator=(const ImmutableString &) = default;
constexpr const char *data() const { return mData ? mData : ""; } constexpr const char *data() const { return mData ? mData : ""; }
......
...@@ -144,11 +144,6 @@ TFunction::TFunction(TSymbolTable *symbolTable, ...@@ -144,11 +144,6 @@ TFunction::TFunction(TSymbolTable *symbolTable,
ASSERT(name != nullptr || symbolType == SymbolType::AngleInternal || tOp != EOpNull); ASSERT(name != nullptr || symbolType == SymbolType::AngleInternal || tOp != EOpNull);
} }
TFunction::~TFunction()
{
// Just here to discourage the compiler from inlining it.
}
void TFunction::clearParameters() void TFunction::clearParameters()
{ {
parameters.clear(); parameters.clear();
......
...@@ -38,10 +38,9 @@ class TSymbol : angle::NonCopyable ...@@ -38,10 +38,9 @@ class TSymbol : angle::NonCopyable
SymbolType symbolType, SymbolType symbolType,
TExtension extension = TExtension::UNDEFINED); TExtension extension = TExtension::UNDEFINED);
virtual ~TSymbol() // Note that we don't have a virtual destructor in order to support constexpr symbols. Data is
{ // either statically allocated or pool allocated.
// don't delete name, it's from the pool ~TSymbol() = default;
}
// Don't call name() or getMangledName() for empty symbols (symbolType == SymbolType::Empty). // Don't call name() or getMangledName() for empty symbols (symbolType == SymbolType::Empty).
ImmutableString name() const; ImmutableString name() const;
...@@ -56,6 +55,14 @@ class TSymbol : angle::NonCopyable ...@@ -56,6 +55,14 @@ class TSymbol : angle::NonCopyable
TExtension extension() const { return mExtension; } TExtension extension() const { return mExtension; }
protected: protected:
constexpr TSymbol(const TSymbolUniqueId &id,
const ImmutableString &name,
SymbolType symbolType,
TExtension extension)
: mName(name), mUniqueId(id), mSymbolType(symbolType), mExtension(extension)
{
}
const ImmutableString mName; const ImmutableString mName;
private: private:
...@@ -75,7 +82,6 @@ class TVariable : public TSymbol ...@@ -75,7 +82,6 @@ class TVariable : public TSymbol
SymbolType symbolType, SymbolType symbolType,
TExtension ext = TExtension::UNDEFINED); TExtension ext = TExtension::UNDEFINED);
~TVariable() override {}
bool isVariable() const override { return true; } bool isVariable() const override { return true; }
const TType &getType() const { return *mType; } const TType &getType() const { return *mType; }
...@@ -84,6 +90,15 @@ class TVariable : public TSymbol ...@@ -84,6 +90,15 @@ class TVariable : public TSymbol
void shareConstPointer(const TConstantUnion *constArray) { unionArray = constArray; } void shareConstPointer(const TConstantUnion *constArray) { unionArray = constArray; }
private: private:
constexpr TVariable(const TSymbolUniqueId &id,
const ImmutableString &name,
SymbolType symbolType,
TExtension extension,
const TType *type)
: TSymbol(id, name, symbolType, extension), mType(type), unionArray(nullptr)
{
}
const TType *mType; const TType *mType;
const TConstantUnion *unionArray; const TConstantUnion *unionArray;
}; };
...@@ -190,8 +205,6 @@ class TFunction : public TSymbol ...@@ -190,8 +205,6 @@ class TFunction : public TSymbol
TOperator tOp = EOpNull, TOperator tOp = EOpNull,
TExtension extension = TExtension::UNDEFINED); TExtension extension = TExtension::UNDEFINED);
virtual ~TFunction();
bool isFunction() const override { return true; } bool isFunction() const override { return true; }
void addParameter(const TConstParameter &p) void addParameter(const TConstParameter &p)
......
...@@ -20,7 +20,6 @@ TSymbolUniqueId::TSymbolUniqueId(const TSymbol &symbol) : mId(symbol.uniqueId(). ...@@ -20,7 +20,6 @@ TSymbolUniqueId::TSymbolUniqueId(const TSymbol &symbol) : mId(symbol.uniqueId().
{ {
} }
TSymbolUniqueId::TSymbolUniqueId(const TSymbolUniqueId &) = default;
TSymbolUniqueId &TSymbolUniqueId::operator=(const TSymbolUniqueId &) = default; TSymbolUniqueId &TSymbolUniqueId::operator=(const TSymbolUniqueId &) = default;
int TSymbolUniqueId::get() const int TSymbolUniqueId::get() const
......
...@@ -22,13 +22,15 @@ class TSymbolUniqueId ...@@ -22,13 +22,15 @@ class TSymbolUniqueId
POOL_ALLOCATOR_NEW_DELETE(); POOL_ALLOCATOR_NEW_DELETE();
explicit TSymbolUniqueId(TSymbolTable *symbolTable); explicit TSymbolUniqueId(TSymbolTable *symbolTable);
explicit TSymbolUniqueId(const TSymbol &symbol); explicit TSymbolUniqueId(const TSymbol &symbol);
TSymbolUniqueId(const TSymbolUniqueId &); constexpr TSymbolUniqueId(const TSymbolUniqueId &) = default;
TSymbolUniqueId &operator=(const TSymbolUniqueId &); TSymbolUniqueId &operator=(const TSymbolUniqueId &);
bool operator==(const TSymbolUniqueId &) const; bool operator==(const TSymbolUniqueId &) const;
int get() const; int get() const;
private: private:
constexpr TSymbolUniqueId(int staticId) : mId(staticId) {}
int mId; int mId;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment