Пример #1
0
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 );
}
Пример #2
0
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();
	}
}
Пример #3
0
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);
}
Пример #4
0
void CqParseTreeViz::Visit(IqParseNodeVariable& node)
{
	setNodeProperty(node, "label", splitVarNameToLines(node.strName()));
	setNodeProperty(node, "color", variableColor);
	visitChildren(node);
}