bool OutputDeclaration(TIntermDeclaration* node, TIntermTraverser* it) { TOutputTraverser* oit = static_cast<TOutputTraverser*>(it); TInfoSink& out = oit->infoSink; OutputExtensionText(out, node); OutputTreeText(out, node, oit->depth); TVariable* v = node->getVariable(); if (v->getType().getBasicType() == EbtInvariant) { out.debug << "redeclare '" << v->getName() << "' as invariant"; } else if (v->getType().getBasicType() != EbtStruct) { out.debug << "declare '" << v->getName() << "' (" << v->getType().getCompleteString() << ") [id: " << v->getUniqueId() << "]"; } else { out.debug << "declare '" << v->getName() << "' (" << v->getType().getCompleteString() << " '" << v->getType().getTypeName() << "') [id: " << v->getUniqueId() << "]"; } out.debug << " {" << node->isFirst() << "}"; OutputDebugText(out, node); out.debug << "\n"; #if DEBUG_CHANGEABLE == 1 OutputChangeableText(oit->infoSink, node, oit->depth, 0); #endif return true; }
TIntermDeclaration* ir_grow_declaration(TIntermDeclaration* declaration, TSymbol* symbol, TIntermTyped* initializer, TInfoSink& infoSink) { TVariable* var = static_cast<TVariable*>(symbol); TIntermSymbol* sym = ir_add_symbol(var->getUniqueId(), var->getName(), var->getType(), var->getType().getLine()); sym->setGlobal(symbol->isGlobal()); return ir_grow_declaration(declaration, sym, initializer, infoSink); }
TIntermSymbol *ReferenceGlobalVariable(const TString &name, const TSymbolTable &symbolTable) { TVariable *var = reinterpret_cast<TVariable *>(symbolTable.findGlobal(name)); ASSERT(var); return new TIntermSymbol(var->getUniqueId(), name, var->getType()); }