void block::addInside(int i, block t) { if(i<blocksIn.size()){ int pos=0; if(blocksIn[i].cond&&(pos=blocksIn[i].blockIsInside(t))){ blocksIn[i].addInside(pos-1,t); } else { addIn(t, i); } } else addIn(t, i); }
void block::addInside(block & check, block grab, int i) { int pos=0; if(check.cond&&(pos=check.blockIsInside(grab))){ check.addInside(check.blocksIn[pos-1],grab,pos-1); } else { addIn(grab, i); } }
types::Function::ReturnValue sci_macrovar(types::typed_list &in, int _iRetCount, types::typed_list &out) { if (in.size() != 1) { Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), "macrovar" , 1); return types::Function::Error; } if (_iRetCount != 1) { Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), "macrovar" , 1); return types::Function::Error; } types::Macro* pM = NULL; switch (in[0]->getType()) { case types::InternalType::ScilabMacro: { pM = in[0]->getAs<types::Macro>(); break; } case types::InternalType::ScilabMacroFile: { types::MacroFile* pMF = in[0]->getAs<types::MacroFile>(); pM = pMF->getMacro(); break; } default : Scierror(999, _("%s: Wrong type for input arguments: macro expected.\n"), "macrovar"); return types::Function::Error; } ast::MacrovarVisitor visit; addIn(visit, pM->getInputs()); addOut(visit, pM->getOutputs()); pM->getBody()->accept(visit); types::List* pL = new types::List(); pL->append(createString(visit.getIn())); pL->append(createString(visit.getOut())); pL->append(createString(visit.getExternal())); pL->append(createString(visit.getCalled())); pL->append(createString(visit.getLocal())); out.push_back(pL); return types::Function::OK; }