void NodeStatements::print(File * fp) { printNodeLocation(fp); //has same location as it's node UTI myut = getNodeType(); char id[255]; if((myut == Nav) || (myut == Nouti)) sprintf(id,"%s<NOTYPE>\n", prettyNodeName().c_str()); if(myut == Hzy) sprintf(id,"%s<HAZYTYPE>\n", prettyNodeName().c_str()); else sprintf(id,"%s<%s>\n", prettyNodeName().c_str(), m_state.getUlamTypeNameByIndex(myut).c_str()); fp->write(id); if(m_node) m_node->print(fp); else fp->write(" <EMPTYSTMT>\n"); if(m_nodeNext) m_nodeNext->print(fp); else fp->write(" <NONEXTSTMT>\n"); sprintf(id,"-----------------%s\n", prettyNodeName().c_str()); fp->write(id); } //print
void NodeControl::print(File * fp) { printNodeLocation(fp); UTI myut = getNodeType(); char id[255]; if((myut == Nav) || (myut == Nouti)) sprintf(id,"%s<NOTYPE>\n",prettyNodeName().c_str()); else if(myut == Hzy) sprintf(id,"%s<HAZYTYPE>\n",prettyNodeName().c_str()); else sprintf(id,"%s<%s>\n",prettyNodeName().c_str(), m_state.getUlamTypeNameByIndex(myut).c_str()); fp->write(id); fp->write("condition:\n"); if(m_nodeCondition) m_nodeCondition->print(fp); else fp->write("<NULLCOND>\n"); sprintf(id,"%s:\n",getName()); fp->write(id); if(m_nodeBody) m_nodeBody->print(fp); else fp->write("<NULLTRUE>\n"); } //print
const char * NodeBinaryOpCompare::getInverseOpName() { std::ostringstream msg; msg << "virtual const char * " << prettyNodeName().c_str(); msg << "::getInverseOpName(){} is needed!!"; MSG(getNodeLocationAsString().c_str(), msg.str().c_str(), ERR); return NULL; }
UTI NodeConstant::checkAndLabelType() { UTI it = Nav; bool stubcopy = m_state.isClassAStub(m_state.getCompileThisIdx()); //instantiate, look up in class block; skip if stub copy and already ready. if(!stubcopy && m_constSymbol == NULL) checkForSymbol(); else { stubcopy = m_state.hasClassAStub(m_state.getCompileThisIdx()); //includes ancestors } if(m_constSymbol) { it = m_constSymbol->getUlamTypeIdx(); } else if(isReadyConstant() && stubcopy) { assert(m_state.okUTItoContinue(m_constType)); setNodeType(m_constType); //t3565, t3640, t3641, t3642, t3652 //stub copy case: still wants uti mapping it = NodeTerminal::checkAndLabelType(); } else if(stubcopy) { // still need its symbol for a value // use the member class (unlike checkForSymbol) } // map incomplete UTI if(!m_state.isComplete(it)) //reloads to recheck { std::ostringstream msg; msg << "Incomplete " << prettyNodeName().c_str() << " for type: "; msg << m_state.getUlamTypeNameBriefByIndex(it).c_str(); msg << ", used with constant symbol name '"; msg << m_state.getTokenDataAsString(m_token).c_str() << "'"; MSG(getNodeLocationAsString().c_str(), msg.str().c_str(), WAIT); //wait until updateConstant tried. } setNodeType(it); Node::setStoreIntoAble(TBOOL_FALSE); //copy m_constant from Symbol into NodeTerminal parent. if(!isReadyConstant()) m_ready = updateConstant(); //sets ready here if(!isReadyConstant()) { it = Hzy; if(!stubcopy) m_constSymbol = NULL; //lookup again too! (e.g. inherited template instances) m_state.setGoAgain(); } return it; } //checkAndLabelType
void NodeBlock::print(File * fp) { printNodeLocation(fp); UTI myut = getNodeType(); char id[255]; if((myut == Nav) || (myut == Nouti)) sprintf(id,"%s<NOTYPE>\n", prettyNodeName().c_str()); else if(myut == Hzy) sprintf(id,"%s<HAZYTYPE>\n", prettyNodeName().c_str()); else sprintf(id,"%s<%s>\n", prettyNodeName().c_str(), m_state.getUlamTypeNameByIndex(myut).c_str()); fp->write(id); if(m_nodeNext) m_nodeNext->print(fp); sprintf(id,"-----------------%s\n", prettyNodeName().c_str()); fp->write(id); } //print
UTI NodeConstantArray::checkAndLabelType() { UTI it = Nav; bool stubcopy = m_state.isClassAStub(m_state.getCompileThisIdx()); //instantiate, look up in class block; skip if stub copy and already ready. if(!stubcopy && m_constSymbol == NULL) checkForSymbol(); else stubcopy = m_state.hasClassAStub(m_state.getCompileThisIdx()); //includes ancestors if(m_constSymbol) it = m_constSymbol->getUlamTypeIdx(); else if(stubcopy) { assert(m_state.okUTItoContinue(m_constType)); setNodeType(m_constType); //t3565, t3640, t3641, t3642, t3652 //stub copy case: still wants uti mapping it = m_constType; } // map incomplete UTI if(!m_state.isComplete(it)) //reloads to recheck { UTI mappedUTI = it; if(m_state.findaUTIAlias(it, mappedUTI)) { std::ostringstream msg; msg << "REPLACE " << prettyNodeName().c_str() << " for type: "; msg << m_state.getUlamTypeNameBriefByIndex(it).c_str(); msg << ", used with alias type: "; msg << m_state.getUlamTypeNameBriefByIndex(it).c_str(); MSG(getNodeLocationAsString().c_str(), msg.str().c_str(), DEBUG); it = mappedUTI; } if(!m_state.isComplete(it)) //reloads to recheck { std::ostringstream msg; msg << "Incomplete " << prettyNodeName().c_str() << " for type: "; msg << m_state.getUlamTypeNameBriefByIndex(it).c_str(); msg << ", used with constant symbol name '"; msg << m_state.getTokenDataAsString(m_token).c_str() << "'"; MSG(getNodeLocationAsString().c_str(), msg.str().c_str(), WAIT); //wait until updateConstant tried. } } setNodeType(it); Node::setStoreIntoAble(TBOOL_FALSE); if(!isReadyConstant()) { it = Hzy; if(!stubcopy) m_constSymbol = NULL; //lookup again too! (e.g. inherited template instances) m_state.setGoAgain(); } return it; } //checkAndLabelType