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 ); };
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); } }