void CreateTranslationTable( IqParseNode* pParam, IqParseNode* pArg, std::vector<std::vector<SqVarRefTranslator> >& Stack ) { // assert( NULL != pParam && NULL != pArg ); std::vector<SqVarRefTranslator> aTransTable; while ( pParam != 0 ) { if ( pArg->IsVariableRef() ) { IqParseNodeVariable * pVarArg; pVarArg = static_cast<IqParseNodeVariable*>(pArg->GetInterface( ParseNode_Variable )); IqParseNodeVariable* pParamArg; if ( ( pParamArg = static_cast<IqParseNodeVariable*>(pParam->GetInterface( ParseNode_Variable ))) != 0 ) { SqVarRefTranslator Trans; Trans.m_From = pParamArg->VarRef(); Trans.m_To = pVarArg->VarRef(); aTransTable.push_back( Trans ); } } pParam = pParam->pNextSibling(); pArg = pArg->pNextSibling(); } Stack.push_back( aTransTable ); }
void CreateTempMap( IqParseNode* pParam, IqParseNode* pArg, std::deque<std::map<std::string, std::string> >& Stack, std::vector<std::vector<SqVarRefTranslator> >& Trans, std::map<std::string, IqVarDef*>& TempVars ) { assert( NULL != pParam && NULL != pArg ); std::map<std::string, std::string> mapTrans; Stack.push_back( mapTrans ); while ( pParam != 0 ) { if ( !pArg->IsVariableRef() ) { IqParseNodeVariable * pLocalVar; pLocalVar = static_cast<IqParseNodeVariable*>(pParam->GetInterface( ParseNode_Variable )); std::stringstream strTempName; strTempName << "_" << Stack.size() << "$" << pLocalVar->strName() << std::ends; Stack.back() [ pLocalVar->strName() ] = std::string( strTempName.str() ); SqVarRef temp( pLocalVar->VarRef() ); IqVarDef* pVD = pTranslatedVariable( temp, Trans ); TempVars[ strTempName.str() ] = pVD; pVD->IncUseCount(); } pParam = pParam->pNextSibling(); pArg = pArg->pNextSibling(); } }
void CqParseTreeViz::Visit(IqParseNodeArrayVariableAssign& node) { IqParseNodeVariable* varNode = static_cast<IqParseNodeVariable*>( node.GetInterface(ParseNode_Variable)); setNodeProperty(node, "label", boost::format("%s [] := ") % splitVarNameToLines(varNode->strName())); setNodeProperty(node, "fillcolor", variableAssignColor); visitChildren(node); }
void CqParseTreeViz::Visit(IqParseNodeVariable& node) { setNodeProperty(node, "label", splitVarNameToLines(node.strName())); setNodeProperty(node, "color", variableColor); visitChildren(node); }