本文整理汇总了C++中TSymbolTable::push方法的典型用法代码示例。如果您正苦于以下问题:C++ TSymbolTable::push方法的具体用法?C++ TSymbolTable::push怎么用?C++ TSymbolTable::push使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TSymbolTable
的用法示例。
在下文中一共展示了TSymbolTable::push方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InitializeSymbolTable
/// Initializize the symbol table
/// \param BuiltInStrings
/// Pointer to built in strings.
/// \param language
/// Shading language to initialize symbol table for
/// \param infoSink
/// Information sink (for errors/warnings)
/// \param symbolTables
/// Array of symbol tables (one for each language)
/// \param bUseGlobalSymbolTable
/// Whether to use the global symbol table or the per-language symbol table
/// \return
/// True if succesfully initialized, false otherwise
bool InitializeSymbolTable( TBuiltInStrings* BuiltInStrings, EShLanguage language, TInfoSink& infoSink,
TSymbolTable* symbolTables, bool bUseGlobalSymbolTable )
{
TIntermediate intermediate(infoSink);
TSymbolTable* symbolTable;
if ( bUseGlobalSymbolTable )
symbolTable = symbolTables;
else
symbolTable = &symbolTables[language];
TParseContext parseContext(*symbolTable, intermediate, language, infoSink);
GlobalParseContext = &parseContext;
setInitialState();
assert(symbolTable->isEmpty() || symbolTable->atSharedBuiltInLevel());
//
// Parse the built-ins. This should only happen once per
// language symbol table.
//
// Push the symbol table to give it an initial scope. This
// push should not have a corresponding pop, so that built-ins
// are preserved, and the test for an empty table fails.
//
symbolTable->push();
//Initialize the Preprocessor
int ret = InitPreprocessor();
if (ret)
{
infoSink.info.message(EPrefixInternalError, "Unable to intialize the Preprocessor");
return false;
}
for (TBuiltInStrings::iterator i = BuiltInStrings[parseContext.language].begin();
i != BuiltInStrings[parseContext.language].end();
++i)
{
const char* builtInShaders = (*i).c_str();
if (PaParseString(const_cast<char*>(builtInShaders), parseContext) != 0)
{
infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
return false;
}
}
if ( !bUseGlobalSymbolTable )
{
IdentifyBuiltIns(parseContext.language, *symbolTable);
}
FinalizePreprocessor();
return true;
}
示例2: InitializeSymbolTable
/// Initializize the symbol table
/// \param BuiltInStrings
/// Pointer to built in strings.
/// \param language
/// Shading language to initialize symbol table for
/// \param infoSink
/// Information sink (for errors/warnings)
/// \param symbolTables
/// Array of symbol tables (one for each language)
/// \param bUseGlobalSymbolTable
/// Whether to use the global symbol table or the per-language symbol table
/// \return
/// True if succesfully initialized, false otherwise
static bool InitializeSymbolTable( TBuiltInStrings* BuiltInStrings, EShLanguage language, TInfoSink& infoSink,
TSymbolTable* symbolTables, bool bUseGlobalSymbolTable )
{
TSymbolTable* symbolTable;
if ( bUseGlobalSymbolTable )
symbolTable = symbolTables;
else
symbolTable = &symbolTables[language];
//@TODO: for now, we use same global symbol table for all target language versions.
// This is wrong and will have to be changed at some point.
TParseContext parseContext(*symbolTable, language, ETargetVersionCount, 0, infoSink);
GlobalParseContext = &parseContext;
setInitialState();
assert(symbolTable->isEmpty() || symbolTable->atSharedBuiltInLevel());
//
// Parse the built-ins. This should only happen once per
// language symbol table.
//
// Push the symbol table to give it an initial scope. This
// push should not have a corresponding pop, so that built-ins
// are preserved, and the test for an empty table fails.
//
symbolTable->push();
for (TBuiltInStrings::iterator i = BuiltInStrings[parseContext.language].begin();
i != BuiltInStrings[parseContext.language].end();
++i)
{
const char* builtInShaders = (*i).c_str();
if (PaParseString(const_cast<char*>(builtInShaders), parseContext, NULL) != 0)
{
infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
return false;
}
}
if ( !bUseGlobalSymbolTable )
{
IdentifyBuiltIns(parseContext.language, *symbolTable);
}
return true;
}
示例3: InitializeSymbolTable
static bool InitializeSymbolTable(
const TBuiltInStrings& builtInStrings,
EShLanguage language, EShSpec spec, const TBuiltInResource& resources,
TInfoSink& infoSink, TSymbolTable& symbolTable)
{
TIntermediate intermediate(infoSink);
TParseContext parseContext(symbolTable, intermediate, language, spec, infoSink);
GlobalParseContext = &parseContext;
setInitialState();
assert(symbolTable.isEmpty());
//
// Parse the built-ins. This should only happen once per
// language symbol table.
//
// Push the symbol table to give it an initial scope. This
// push should not have a corresponding pop, so that built-ins
// are preserved, and the test for an empty table fails.
//
symbolTable.push();
//Initialize the Preprocessor
if (InitPreprocessor())
{
infoSink.info.message(EPrefixInternalError, "Unable to intialize the Preprocessor");
return false;
}
for (TBuiltInStrings::const_iterator i = builtInStrings.begin(); i != builtInStrings.end(); ++i)
{
const char* builtInShaders[1];
int builtInLengths[1];
builtInShaders[0] = (*i).c_str();
builtInLengths[0] = (int) (*i).size();
if (PaParseStrings(const_cast<char**>(builtInShaders), builtInLengths, 1, parseContext) != 0)
{
infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
return false;
}
}
IdentifyBuiltIns(language, spec, resources, symbolTable);
FinalizePreprocessor();
return true;
}