Memory: Put pragma tables in the pool.

Fixes #916 (the last change covered by the PR).
3rd list item in #976.
This commit is contained in:
John Kessenich 2017-11-20 17:41:39 -07:00
parent cbdf871d7f
commit fd1d07daf1
5 changed files with 12 additions and 9 deletions

View File

@ -240,7 +240,10 @@ struct TSourceLoc {
int column;
};
typedef TMap<TString, TString> TPragmaTable;
class TPragmaTable : public TMap<TString, TString> {
public:
POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
};
const int MaxTokenLength = 1024;

View File

@ -1303,8 +1303,8 @@ typedef TVector<TStorageQualifier> TQualifierList;
//
class TIntermAggregate : public TIntermOperator {
public:
TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(0) { }
TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(0) { }
TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { }
TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { }
~TIntermAggregate() { delete pragmaTable; }
virtual TIntermAggregate* getAsAggregate() { return this; }
virtual const TIntermAggregate* getAsAggregate() const { return this; }
@ -1322,7 +1322,7 @@ public:
void setDebug(bool d) { debug = d; }
bool getOptimize() const { return optimize; }
bool getDebug() const { return debug; }
void addToPragmaTable(const TPragmaTable& pTable);
void setPragmaTable(const TPragmaTable& pTable);
const TPragmaTable& getPragmaTable() const { return *pragmaTable; }
protected:
TIntermAggregate(const TIntermAggregate&); // disallow copy constructor

View File

@ -3170,10 +3170,10 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
node->getLoc());
}
void TIntermAggregate::addToPragmaTable(const TPragmaTable& pTable)
void TIntermAggregate::setPragmaTable(const TPragmaTable& pTable)
{
assert(!pragmaTable);
pragmaTable = new TPragmaTable();
assert(pragmaTable == nullptr);
pragmaTable = new TPragmaTable;
*pragmaTable = pTable;
}

View File

@ -2916,7 +2916,7 @@ function_definition
// information. This information can be queried from the parse tree
$$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
$$->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
$$->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
$$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
}
;

View File

@ -7975,7 +7975,7 @@ yyreduce:
// information. This information can be queried from the parse tree
(yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
(yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
(yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
(yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
}
#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;