示例#1
0
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);
}
示例#2
0
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);
	}
}
示例#3
0
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;
}