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;
class NonCopyable
{
protected:
NonCopyable() = default;
constexpr NonCopyable() = default;
~NonCopyable() = default;
private:
......
......@@ -54,7 +54,8 @@ class ImmutableString
{
}
ImmutableString(const ImmutableString &) = default;
constexpr ImmutableString(const ImmutableString &) = default;
ImmutableString &operator=(const ImmutableString &) = default;
constexpr const char *data() const { return mData ? mData : ""; }
......
......@@ -144,11 +144,6 @@ TFunction::TFunction(TSymbolTable *symbolTable,
ASSERT(name != nullptr || symbolType == SymbolType::AngleInternal || tOp != EOpNull);
}
TFunction::~TFunction()
{
// Just here to discourage the compiler from inlining it.
}
void TFunction::clearParameters()
{
parameters.clear();
......
......@@ -38,10 +38,9 @@ class TSymbol : angle::NonCopyable
SymbolType symbolType,
TExtension extension = TExtension::UNDEFINED);
virtual ~TSymbol()
{
// don't delete name, it's from the pool
}
// Note that we don't have a virtual destructor in order to support constexpr symbols. Data is
// either statically allocated or pool allocated.
~TSymbol() = default;
// Don't call name() or getMangledName() for empty symbols (symbolType == SymbolType::Empty).
ImmutableString name() const;
......@@ -56,6 +55,14 @@ class TSymbol : angle::NonCopyable
TExtension extension() const { return mExtension; }
protected:
constexpr TSymbol(const TSymbolUniqueId &id,
const ImmutableString &name,
SymbolType symbolType,
TExtension extension)
: mName(name), mUniqueId(id), mSymbolType(symbolType), mExtension(extension)
{
}
const ImmutableString mName;
private:
......@@ -75,7 +82,6 @@ class TVariable : public TSymbol
SymbolType symbolType,
TExtension ext = TExtension::UNDEFINED);
~TVariable() override {}
bool isVariable() const override { return true; }
const TType &getType() const { return *mType; }
......@@ -84,6 +90,15 @@ class TVariable : public TSymbol
void shareConstPointer(const TConstantUnion *constArray) { unionArray = constArray; }
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 TConstantUnion *unionArray;
};
......@@ -190,8 +205,6 @@ class TFunction : public TSymbol
TOperator tOp = EOpNull,
TExtension extension = TExtension::UNDEFINED);
virtual ~TFunction();
bool isFunction() const override { return true; }
void addParameter(const TConstParameter &p)
......
......@@ -20,7 +20,6 @@ TSymbolUniqueId::TSymbolUniqueId(const TSymbol &symbol) : mId(symbol.uniqueId().
{
}
TSymbolUniqueId::TSymbolUniqueId(const TSymbolUniqueId &) = default;
TSymbolUniqueId &TSymbolUniqueId::operator=(const TSymbolUniqueId &) = default;
int TSymbolUniqueId::get() const
......
......@@ -22,13 +22,15 @@ class TSymbolUniqueId
POOL_ALLOCATOR_NEW_DELETE();
explicit TSymbolUniqueId(TSymbolTable *symbolTable);
explicit TSymbolUniqueId(const TSymbol &symbol);
TSymbolUniqueId(const TSymbolUniqueId &);
constexpr TSymbolUniqueId(const TSymbolUniqueId &) = default;
TSymbolUniqueId &operator=(const TSymbolUniqueId &);
bool operator==(const TSymbolUniqueId &) const;
int get() const;
private:
constexpr TSymbolUniqueId(int staticId) : mId(staticId) {}
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