SourceSelectorWidget::SourceSelectorWidget(QLineEdit* edit, QWidget* parent) :StylableWidget(parent) { QGridLayout* grid = new QGridLayout(this); m_edit = edit; m_edit->setParent(this); grid->setContentsMargins( 0, 0, 0, 0 ); grid->addWidget(m_edit, 0, 0); m_button = new QPushButton(tr("Add")); grid->addWidget(m_button, 0, 1); grid->setColumnStretch(0, 3); onTextChanged(m_edit->text()); m_list = new QListWidget(); m_list->setIconSize(QSize(0,0)); grid->addWidget(m_list, 1, 0, 1, 2); connect(m_edit, SIGNAL(returnPressed()), SLOT(emitAdd())); connect(m_edit, SIGNAL(textChanged(QString)), SLOT(onTextChanged(QString))); connect(m_button, SIGNAL(clicked()), SLOT(emitAdd())); connect(m_list, SIGNAL(itemActivated(QListWidgetItem *)), SIGNAL(itemActivated(QListWidgetItem *))); }
static void genExp(TreeNode *tree, TreeType ttype) { TreeNode *t1, *t2; int loc = 0; int tempvar_loc = 0; t1 = tree->child[0]; t2 = tree->child[1]; switch (tree->kind.exp) { case ConstK: //emitLOC(REG_EAX, tree->attr.token.val); break; case IdK: //loc = st_lookup(tree->attr.token.stype); //emitLOV_N(REG_EAX, loc); break; case OpK: genExp(t1, LEFT); genExp(t2, RIGHT); switch (t1->kind.exp) { case ConstK: emitLOC(REG_EAX, t1->attr.token.val); break; case IdK: loc = st_lookup(t1->attr.token.stype); emitLOV_N(REG_EAX, loc); tempvar_loc = mallocTempVar(); emitMov(REG_EAX, tempvar_loc, VTYPE_TEMP); break; case OpK: break; } switch (t2->kind.exp) { case ConstK: emitLOC(REG_EBX, t2->attr.token.val); break; case IdK: loc = st_lookup(t2->attr.token.stype); emitLOV_N(REG_EBX, loc); break; case OpK: break; } switch (ttype) { int tempvar_loc; case ROOT: switch (tree->attr.token.ttype) { case ADD: emitLOV(REG_EAX, 0, VTYPE_TEMP); emitLOV(REG_EBX, 1, VTYPE_TEMP); emitAdd(REG_EBX, REG_EAX); freeTempVar(); freeTempVar(); break; case SUB: break; case MUL: emitLOV(REG_EAX, 0, VTYPE_TEMP); emitLOV(REG_EBX, 1, VTYPE_TEMP); emitMul(REG_EBX, REG_EAX); freeTempVar(); freeTempVar(); break; case DIV: break; } break; case LEFT: switch (tree->attr.token.ttype) { case ADD: emitAdd(REG_EBX, REG_EAX); tempvar_loc = mallocTempVar(); emitMov(REG_EAX, tempvar_loc, VTYPE_TEMP); break; case SUB: break; case MUL: emitMul(REG_EBX, REG_EAX); tempvar_loc = mallocTempVar(); emitMov(REG_EAX, tempvar_loc, VTYPE_TEMP); break; case DIV: break; } break; case RIGHT: switch (tree->attr.token.ttype) { case ADD: emitAdd(REG_EAX, REG_EBX); tempvar_loc = mallocTempVar(); emitMov(REG_EBX, tempvar_loc, VTYPE_TEMP); break; case SUB: break; case MUL: emitMul(REG_EAX, REG_EBX); tempvar_loc = mallocTempVar(); emitMov(REG_EBX, tempvar_loc, VTYPE_TEMP); break; case DIV: break; } break; }; break; } }