Ejemplo n.º 1
0
dbMainObject::VecObj dbMainObject::getObject ( )
{

    VecObj ret;
    Obj buf;
    db->isOpened ();

    QSqlQuery query ( QString ( "select index, name_obj,sost_obj, err  from  all_object order by index ;" ));
    db->isValid ( query );
    while (query.next())
    {
        buf.id = query.value(0).toInt();
        buf.name = query.value(1).toString();
        buf.sost = query.value(2).toInt();
        buf.err = query.value(3).toInt();
        ret.push_back( buf );
    }
    return std::move( ret );
};
Ejemplo n.º 2
0
Pair *ASTGenerator::absorb(Tokenizor *tk) {
    FrameObj **top_ptr = parse_stack;
    for (;;)
    {
        if (top_ptr == parse_stack + PARSE_STACK_SIZE)
            throw TokenError("Parser", RUN_ERR_STACK_OVERFLOW);

        if (top_ptr - parse_stack > 1 &&
                !IS_BRAKET(*(top_ptr - 1)) &&
                IS_BRAKET(*(top_ptr - 2)))
        {
            ParseBracket *bptr = TO_BRACKET(*(top_ptr - 2));
            if (bptr->btype == 2)
            {
                top_ptr -= 2;
                Pair *lst_cdr = new Pair(TO_EVAL(*(top_ptr + 1)), empty_list);
                Pair *lst = new Pair(new SymObj("quote"), lst_cdr);
                *top_ptr++ = lst;
            }
        }

        if (top_ptr > parse_stack && !IS_BRAKET(*parse_stack))
            return new Pair(TO_EVAL(*(top_ptr - 1)), empty_list);
        string token;
        if (!tk->get_token(token)) return NULL;
        if (token == "(")       // a list
            *top_ptr++ = new ParseBracket(0);
        else if (token == "#(") // a vector
            *top_ptr++ = new ParseBracket(1);
        else if (token == "\'") // syntatic sugar for quote
            *top_ptr++ = new ParseBracket(2);
        else if (token == ")")
        {
            if (top_ptr == parse_stack)
                throw NormalError(READ_ERR_UNEXPECTED_RIGHT_BRACKET);
            EvalObj *lst = empty_list;
            bool improper = false;
            while (top_ptr >= parse_stack && !IS_BRAKET(*(--top_ptr)))
            {
                EvalObj *obj = TO_EVAL(*top_ptr);
                if (obj->is_sym_obj() && static_cast<SymObj*>(obj)->val == ".")
                {
                    if (improper ||
                            lst == empty_list ||
                            TO_PAIR(lst)->cdr != empty_list)
                        throw NormalError(PAR_ERR_IMPROPER_PAIR);
                    improper = true;
                    Pair *_lst = TO_PAIR(lst);
                    lst = _lst->car;
                    delete _lst;
                    delete obj;
                }
                else
                {
                    Pair *_lst = new Pair(obj, lst);    // Collect the list
                    lst = _lst;
                }
            }

            ParseBracket *bptr = TO_BRACKET(*top_ptr);
            if (bptr->btype == 0)
                *top_ptr++ = lst;
            else if (bptr->btype == 1)
            {
                if (improper) throw NormalError(PAR_ERR_IMPROPER_VECT);
                VecObj *vec = new VecObj();
                for (Pair *ptr = TO_PAIR(lst); ptr != empty_list; ptr = TO_PAIR(ptr->cdr))
                    vec->push_back(ptr->car);
                *top_ptr++ = vec;
                if (lst != empty_list) delete lst;
            }
        }
        else
            *top_ptr++ = ASTGenerator::to_obj(token);
    }
}