int SwitchStatement::execImpl(QoreValue& return_value, ExceptionSink *xsink) { int rc = 0; // instantiate local variables LVListInstantiator lvi(lvars, xsink); AbstractQoreNode *se = sexp->eval(xsink); if (!xsink->isEvent()) { // find match CaseNode *w = head; while (w) { if (w->matches(se, xsink)) break; w = w->next; } if (!w && deflt) w = deflt; while (w && !rc && !xsink->isEvent()) { if (w->code) rc = w->code->execImpl(return_value, xsink); w = w->next; } if (rc == RC_BREAK || rc == RC_CONTINUE) rc = 0; } if (se) se->deref(xsink); return rc; }
int ForStatement::execImpl(QoreValue& return_value, ExceptionSink *xsink) { int rc = 0; // instantiate local variables LVListInstantiator lvi(lvars, xsink); // evaluate assignment expression and discard results if any if (assignment) assignment->bigIntEval(xsink); // execute "for" body while (!xsink->isEvent()) { // check conditional expression, exit "for" loop if condition is // false if (cond && (!cond->boolEval(xsink) || xsink->isEvent())) break; // otherwise, execute "for" body if (code && (((rc = code->execImpl(return_value, xsink)) == RC_BREAK) || xsink->isEvent())) { rc = 0; break; } if (rc == RC_RETURN) break; else if (rc == RC_CONTINUE) rc = 0; // evaluate iterator expression and discard results if any if (iterator) iterator->bigIntEval(xsink); } return rc; }
// FIXME: local vars should only be instantiated if there is a non-null context int ContextStatement::execImpl(AbstractQoreNode **return_value, ExceptionSink *xsink) { int rc = 0; AbstractQoreNode *sort = sort_ascending ? sort_ascending : sort_descending; int sort_type = sort_ascending ? CM_SORT_ASCENDING : (sort_descending ? CM_SORT_DESCENDING : -1); // instantiate local variables LVListInstantiator lvi(lvars, xsink); // create the context ReferenceHolder<Context> context(new Context(name, xsink, exp, where_exp, sort_type, sort, 0), xsink); if (*xsink || !code) return rc; // execute the statements for (context->pos = 0; context->pos < context->max_pos && !xsink->isEvent(); context->pos++) { printd(4, "ContextStatement::exec() iteration %d/%d\n", context->pos, context->max_pos); if (((rc = code->execImpl(return_value, xsink)) == RC_BREAK) || *xsink) { rc = 0; break; } else if (rc == RC_RETURN) break; else if (rc == RC_CONTINUE) rc = 0; } return rc; }
// only executed by Statement::exec() int IfStatement::execImpl(QoreValue& return_value, ExceptionSink *xsink) { int rc = 0; // instantiate local variables LVListInstantiator lvi(lvars, xsink); if (cond->boolEval(xsink)) { if (!xsink->isEvent() && if_code) rc = if_code->execImpl(return_value, xsink); } else if (else_code) rc = else_code->execImpl(return_value, xsink); return rc; }
void NewDoc::createOpenDocPage() { PrefsContext* docContext = prefsManager->prefsFile->getContext("docdirs", false); QString docDir = "."; QString prefsDocDir=prefsManager->documentDir(); if (!prefsDocDir.isEmpty()) docDir = docContext->get("docsopen", prefsDocDir); else docDir = docContext->get("docsopen", "."); QString formats(FileLoader::getLoadFilterString()); // formats.remove("PDF (*.pdf *.PDF);;"); openDocFrame = new QFrame(this); openDocLayout = new QVBoxLayout(openDocFrame); openDocLayout->setMargin(5); openDocLayout->setSpacing(5); m_selectedFile = ""; fileDialog = new QFileDialog(openDocFrame, tr("Open"), docDir, formats); fileDialog->setFileMode(QFileDialog::ExistingFile); fileDialog->setAcceptMode(QFileDialog::AcceptOpen); fileDialog->setOption(QFileDialog::DontUseNativeDialog); fileDialog->setNameFilterDetailsVisible(false); fileDialog->setReadOnly(true); fileDialog->setSizeGripEnabled(false); fileDialog->setModal(false); QList<QPushButton *> b = fileDialog->findChildren<QPushButton *>(); QListIterator<QPushButton *> i(b); while (i.hasNext()) i.next()->setVisible(false); fileDialog->setWindowFlags(Qt::Widget); openDocLayout->addWidget(fileDialog); FileDialogEventCatcher* keyCatcher = new FileDialogEventCatcher(this); QList<QListView *> lv = fileDialog->findChildren<QListView *>(); QListIterator<QListView *> lvi(lv); while (lvi.hasNext()) lvi.next()->installEventFilter(keyCatcher); connect(keyCatcher, SIGNAL(escapePressed()), this, SLOT(reject())); connect(keyCatcher, SIGNAL(dropLocation(QString)), this, SLOT(locationDropped(QString))); connect(keyCatcher, SIGNAL(desktopPressed()), this, SLOT(gotoDesktopDirectory())); connect(keyCatcher, SIGNAL(homePressed()), this, SLOT(gotoHomeDirectory())); connect(keyCatcher, SIGNAL(parentPressed()), this, SLOT(gotoParentDirectory())); connect(keyCatcher, SIGNAL(enterSelectedPressed()), this, SLOT(gotoSelectedDirectory())); connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), this, SLOT(openFile())); connect(fileDialog, SIGNAL(rejected()), this, SLOT(reject())); }
bool RDAfactHandler::handleReturnStmt(DFAfact& df, PgmStmt& retnode, ExpDescr * retedesc, bool interproc) { RDAfact& rf = (RDAfact&) df; CFGfunction& parfn = retnode.getParentFunction(); AO& retao = parfn.getId().get_AOFunction().get_AOReturn(); //- treat as strong assign: Return(Fnid) = retaos rf.removeFacts(retao); rf.addFact(retao, 0, &retnode, 0); //- filter out local vars, only if non-recursive if(!parfn.getRecursionId()){ suco_iterator<AOId *> lvi(parfn.getLocalVars()); while(lvi.Iterate()) rf.removeFacts(*lvi.Current()); } return false; }
int WhileStatement::execImpl(AbstractQoreNode **return_value, ExceptionSink *xsink) { int rc = 0; // instantiate local variables LVListInstantiator lvi(lvars, xsink); while (cond->boolEval(xsink) && !xsink->isEvent()) { if (code && (((rc = code->execImpl(return_value, xsink)) == RC_BREAK) || xsink->isEvent())) { rc = 0; break; } if (rc == RC_RETURN) break; else if (rc == RC_CONTINUE) rc = 0; } return rc; }
bool MBUfactHandler::handleReturnStmt(DFAfact& df, PgmStmt& retnode, ExpDescr * retedesc, bool interproc) { bool is_useless = true; if(interproc){ //- interprocedural CFGfunction& parfn = retnode.getParentFunction(); if(flag_may_be_uninit < 2 && retedesc){ is_useless &= handleStrongAssign(df, parfn.getId().get_AOFunction().get_AOReturn(), *retedesc, 0, &retnode); } //-- filter out local vars, only if non-recursive //TODO: think about this if(!parfn.getRecursionId()){ is_useless = false; MBUfact& mf = (MBUfact&) df; suco_iterator<AOId *> lvi(parfn.getLocalVars()); while(lvi.Iterate()) mf.removeComponentAOs(*lvi.Current()); } } return is_useless; }
int ForEachStatement::execImpl(QoreValue& return_value, ExceptionSink* xsink) { if (is_ref) return execRef(return_value, xsink); if (is_keys) return execKeys(return_value, xsink); // instantiate local variables LVListInstantiator lvi(lvars, xsink); // get list evaluation (although may be a single node) ReferenceHolder<AbstractQoreNode> tlist(list->eval(xsink), xsink); if (!code || *xsink || is_nothing(*tlist)) return 0; qore_type_t t = tlist->getType(); QoreListNode* l_tlist = t == NT_LIST ? reinterpret_cast<QoreListNode*>(*tlist) : 0; if (l_tlist) { if (l_tlist->empty()) return 0; } else if (t == NT_OBJECT) { // check for an object derived from AbstractIterator AbstractIteratorHelper aih(xsink, "map operator", reinterpret_cast<QoreObject*>(*tlist)); if (*xsink) return 0; if (aih) return execIterator(aih, return_value, xsink); } // execute "foreach" body unsigned i = 0; int rc = 0; while (true) { { LValueHelper n(var, xsink); if (!n) break; // assign variable to current value in list if (n.assign(l_tlist ? l_tlist->get_referenced_entry(i) : tlist.release())) break; } // set offset in thread-local data for "$#" ImplicitElementHelper eh(l_tlist ? (int)i : 0); // execute "foreach" body if (((rc = code->execImpl(return_value, xsink)) == RC_BREAK) || *xsink) { rc = 0; break; } if (rc == RC_RETURN) break; else if (rc == RC_CONTINUE) rc = 0; i++; // if the argument is not a list or list iteration is done, then break if (!l_tlist || i == l_tlist->size()) break; } return rc; }
int ForEachStatement::execRef(QoreValue& return_value, ExceptionSink* xsink) { int rc = 0; // instantiate local variables LVListInstantiator lvi(lvars, xsink); ParseReferenceNode* r = reinterpret_cast<ParseReferenceNode*>(list); // here we get the runtime reference ReferenceHolder<ReferenceNode> vr(r->evalToRef(xsink), xsink); if (*xsink) return 0; // get the current value of the lvalue expression ReferenceHolder<AbstractQoreNode> tlist(vr->eval(xsink), xsink); if (!code || *xsink || is_nothing(*tlist)) return 0; QoreListNode* l_tlist = tlist->getType() == NT_LIST ? reinterpret_cast<QoreListNode*>(*tlist) : 0; if (l_tlist && l_tlist->empty()) return 0; // execute "foreach" body ReferenceHolder<AbstractQoreNode> ln(0, xsink); unsigned i = 0; if (l_tlist) ln = new QoreListNode; while (true) { { LValueHelper n(var, xsink); if (!n) return 0; // assign variable to current value in list if (n.assign(l_tlist ? l_tlist->get_referenced_entry(i) : tlist.release())) return 0; } // set offset in thread-local data for "$#" ImplicitElementHelper eh(l_tlist ? (int)i : 0); // execute "for" body rc = code->execImpl(return_value, xsink); if (*xsink) return 0; // get value of foreach variable AbstractQoreNode* nv = var->eval(xsink); if (*xsink) return 0; // assign new value to temporary variable for later assignment to referenced lvalue if (l_tlist) reinterpret_cast<QoreListNode*>(*ln)->push(nv); else ln = nv; if (rc == RC_BREAK) { // assign remaining values to list unchanged if (l_tlist) while (++i < l_tlist->size()) reinterpret_cast<QoreListNode*>(*ln)->push(l_tlist->get_referenced_entry(i)); rc = 0; break; } if (rc == RC_RETURN) break; else if (rc == RC_CONTINUE) rc = 0; i++; // break out of loop if appropriate if (!l_tlist || i == l_tlist->size()) break; } // write the value back to the lvalue LValueHelper val(**vr, xsink); if (!val) return 0; if (val.assign(ln.release())) return 0; return rc; }
// specialization for foreach ... in (keys <hash>) {} int ForEachStatement::execKeys(QoreValue& return_value, ExceptionSink* xsink) { // instantiate local variables LVListInstantiator lvi(lvars, xsink); assert(get_node_type(list) == NT_TREE); QoreTreeNode* t = reinterpret_cast<QoreTreeNode*>(list); QoreHashNodeHolder hash(reinterpret_cast<QoreHashNode*>(t->left->eval(xsink)), xsink); if (*xsink || !code) return 0; qore_type_t hnt = get_node_type(*hash); // create an empty reference holder for a temporary hash in case the operand is an object ReferenceHolder<QoreHashNode> hh(xsink); const QoreHashNode* h; // if the result is not a hash, then return if (hnt == NT_OBJECT) { hh = reinterpret_cast<const QoreObject *>(*hash)->getRuntimeMemberHash(xsink); if (*xsink) return 0; h = *hh; } else if (hnt != NT_HASH) { return 0; } else h = reinterpret_cast<const QoreHashNode*>(*hash); ConstHashIterator hi(h); int rc = 0; int i = 0; while (hi.next()) { { LValueHelper n(var, xsink); if (!n) break; // assign variable to current key value in list if (n.assign(new QoreStringNode(hi.getKey()))) break; } // set offset in thread-local data for "$#" ImplicitElementHelper eh(i++); // execute "foreach" body if (((rc = code->execImpl(return_value, xsink)) == RC_BREAK) || *xsink) { rc = 0; break; } if (rc == RC_RETURN) break; else if (rc == RC_CONTINUE) rc = 0; } return rc; }
void ReportManager::updateReportBrowser() { QStringList openReports; for (QListViewItemIterator lvi(browser); *lvi; ++lvi) if ((*lvi)->firstChild()) if ((*lvi)->isOpen()) openReports.append((*lvi)->text(0)); QString currentReport; if (browser->currentItem() && browser->currentItem()->firstChild() == 0) currentReport = browser->currentItem()->text(0) + browser->currentItem()->text(1) + browser->currentItem()->text(2) + browser->currentItem()->text(3); browser->clear(); qtReports = new KListViewItem(browser, i18n("Interactive Reports")); qtReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_interactive_reports", KIcon::Small)); qtReports->setOpen(openReports.isEmpty() || openReports.find(qtReports->text(0)) != openReports.end()); htmlReports = new KListViewItem(browser, i18n("HTML Reports")); htmlReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_html_reports", KIcon::Small)); htmlReports->setOpen(openReports.find(htmlReports->text(0)) != openReports.end()); csvReports = new KListViewItem(browser, i18n("CSV Reports")); csvReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_csv_reports", KIcon::Small)); csvReports->setOpen(openReports.find(csvReports->text(0)) != openReports.end()); svgReports = new KListViewItem(browser, i18n("SVG Reports")); svgReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_svg_reports", KIcon::Small)); svgReports->setOpen(openReports.find(svgReports->text(0)) != openReports.end()); xmlReports = new KListViewItem(browser, i18n("XML Reports")); xmlReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_xml_reports", KIcon::Small)); xmlReports->setOpen(openReports.find(xmlReports->text(0)) != openReports.end()); icalReports = new KListViewItem(browser, i18n("iCalendars")); icalReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_ical_reports", KIcon::Small)); icalReports->setOpen(openReports.find(icalReports->text(0)) != openReports.end()); exportReports = new KListViewItem(browser, i18n("Export Reports")); exportReports->setPixmap(0, KGlobal::iconLoader()-> loadIcon("tj_export_reports", KIcon::Small)); exportReports->setOpen(openReports.find(exportReports->text(0)) != openReports.end()); for (std::list<ManagedReportInfo*>::const_iterator mri = reports.begin(); mri != reports.end(); ++mri) { if ((*mri)->getBrowserEntry()) continue; Report* r = (*mri)->getProjectReport(); addReportItem(r, currentReport); } // Make sure that we have a current report. If the current report is a // report folder, then select the first interactive report if it exists. if (browser->currentItem() == 0 || browser->currentItem()->firstChild() != 0) if (qtReports->firstChild() != 0) browser->setCurrentItem(qtReports->firstChild()); searchLine->updateSearch(); }
void FileManager::updateFileBrowser() { QString commonPath = findCommonPath(); QStringList openDirectories, closedDirectories; for (QListViewItemIterator lvi(browser); *lvi; ++lvi) if ((*lvi)->firstChild()) if ((*lvi)->isOpen()) openDirectories.append((*lvi)->text(1)); else closedDirectories.append((*lvi)->text(1)); QString currentFile; if (browser->currentItem()) currentFile = browser->currentItem()->text(1); // Remove all entries from file browser browser->clear(); for (std::list<ManagedFileInfo*>::iterator mfi = files.begin(); mfi != files.end(); ++mfi) { /* Now we are inserting the file into the file browser again. * We don't care about the common path and create tree nodes for each * remaining directory. So we can browse the files in a directory like * tree. */ QString url = (*mfi)->getFileURL().url(); // Remove common path from URL. QString shortenedURL = url.right(url.length() - commonPath.length()); KListViewItem* currentDir = 0; int start = 0; /* The remaining file name is traversed directory by directory. If * there is no node yet for this directory in the browser, we create a * directory node. */ for (int dirNameEnd = -1; (dirNameEnd = shortenedURL.find("/", start)) > 0; start = dirNameEnd + 1) { // Ignore multiple slahes if (dirNameEnd == start + 1) continue; KListViewItem* lvi; if ((lvi = static_cast<KListViewItem*> (browser->findItem(shortenedURL.left(dirNameEnd), 1))) == 0) { if (!currentDir) currentDir = new KListViewItem(browser, shortenedURL.left(dirNameEnd), shortenedURL.left(dirNameEnd)); else currentDir = new KListViewItem(currentDir, shortenedURL.mid(start, dirNameEnd - start), shortenedURL.left(dirNameEnd)); currentDir->setPixmap (0, KGlobal::iconLoader()->loadIcon("folder", KIcon::Small)); } else currentDir = lvi; if (openDirectories.find(currentDir->text(1)) != openDirectories.end()) currentDir->setOpen(true); else if (closedDirectories.find(currentDir->text(1)) != closedDirectories.end()) currentDir->setOpen(false); else currentDir->setOpen(true); } KListViewItem* newFile; if (currentDir) newFile = new KListViewItem(currentDir, shortenedURL.right(shortenedURL.length() - start), url); else newFile = new KListViewItem(browser, shortenedURL.right(shortenedURL.length() - start), url); if (newFile->text(1) == currentFile) browser->setCurrentItem(newFile); // Save the pointer to the browser entry. (*mfi)->setBrowserEntry(newFile); /* Decorate files with a file icon. The master file will be decorated * differently so it can be easyly identified. */ if (*mfi == masterFile) newFile->setPixmap (0, KGlobal::iconLoader()-> loadIcon("tj_file_tjp", KIcon::Small)); else newFile->setPixmap (0, KGlobal::iconLoader()-> loadIcon("tj_file_tji", KIcon::Small)); /* The 3rd column shows whether the file is part of the current * project or not. So we need to set the proper icons. */ if ((*mfi)->isPartOfProject()) newFile->setPixmap (3, KGlobal::iconLoader()->loadIcon("tj_ok", KIcon::Small)); else newFile->setPixmap (3, KGlobal::iconLoader()->loadIcon("tj_not_ok", KIcon::Small)); } searchLine->updateSearch(); }
int StatementBlock::execImpl(AbstractQoreNode** return_value, ExceptionSink* xsink) { // instantiate local variables LVListInstantiator lvi(lvars, xsink); return execIntern(return_value, xsink); }