CodeBlock* VariableEntry::codeGen(){ CodeBlock* var_block = new CodeBlock(); if(initVal() != NULL){ var_block->append(initVal()->codeGen()); ICode::ICodeType store_type = ICode::ICodeType::STI; ICode get_addr; if(varKind() == VariableEntry::VarKind::GLOBAL_VAR){ ICode::ICodeType mov_type = ICode::ICodeType::MOVI; get_addr = ICode(mov_type,new Value(offSet(),Type::TypeTag::INT),&mem_register_); } else { ICode::ICodeType add_type = ICode::ICodeType::ADD; get_addr = ICode(add_type,&MemoryMgr::basePointerRegister(),new Value(offSet(),Type::TypeTag::INT),&mem_register_); } if(type()->tag() == Type::TypeTag::BOOL){ CodeBlock* true_block = new CodeBlock(); ICode store_true_val(store_type,new Value(1,Type::TypeTag::UINT),&mem_register_); ICode jmp_end(ICode::ICodeType::JMP,endLabel()); true_block->setStartLabel(trueLabel()); true_block->append(get_addr); true_block->append(store_true_val); true_block->append(jmp_end); CodeBlock* false_block = new CodeBlock(); ICode store_false_val(store_type,new Value(0,Type::TypeTag::UINT),&mem_register_); false_block->setStartLabel(falseLabel()); false_block->append(get_addr); false_block->append(store_false_val); false_block->setEndLabel(endLabel()); var_block->append(true_block); var_block->append(false_block); } else { if(initVal()->reg().isFloat()){ store_type = ICode::ICodeType::STF; } ICode store_val(store_type,&initVal()->reg(),&mem_register_); var_block->append(get_addr); var_block->append(store_val); } } ICode incr_stack(ICode::ICodeType::ADD,&MemoryMgr::stackPointerRegister(),new Value(1,Type::TypeTag::INT),&MemoryMgr::stackPointerRegister()); var_block->append(incr_stack); return var_block; }
QvisRotationTransition::QvisRotationTransition(const QPixmap &pix, QWidget *parent) : QGroupBox(parent) { QVBoxLayout *innerLayout = new QVBoxLayout(this); innerLayout->setMargin(10); innerLayout->addSpacing(15); // Add the pixmap here. QLabel *pixLabel = new QLabel(this); pixLabel->setPixmap(pix); innerLayout->addWidget(pixLabel); innerLayout->addSpacing(15); QHBoxLayout *hLayout = new QHBoxLayout(0); innerLayout->addLayout(hLayout); QGridLayout *gLayout = new QGridLayout(0); hLayout->addLayout(gLayout); gLayout->setSpacing(10); hLayout->addStretch(10); // Angle controls. startAngle = new QSpinBox(this); startAngle->setMinimum(-360 * 100); startAngle->setMaximum(360 * 100); startAngle->setValue(0); QString deg; deg.sprintf("%c", 176); QString startLabel(tr("Start angle") + deg); gLayout->addWidget( new QLabel(startLabel, this), 0, 0); gLayout->addWidget(startAngle, 0, 1); endAngle = new QSpinBox(this); endAngle->setMinimum(-360 * 100); endAngle->setMaximum(360 * 100); endAngle->setValue(360); QString endLabel(tr("End angle") +deg); gLayout->addWidget( new QLabel(endLabel, this), 1, 0); gLayout->addWidget(endAngle, 1, 1); // Number of steps controls. nSteps = new QSpinBox(this); nSteps->setMinimum(1); nSteps->setValue(30); gLayout->addWidget( new QLabel(tr("Number of steps"), this), 2, 0); gLayout->addWidget(nSteps, 2, 1); innerLayout->addStretch(10); }
vector<MamaInstruction> IfNode::codeV(const Environment &e, int sd) const { ENTERED("codeV"); typedef MamaInstruction MI; vector<MI> r(_if->codeB(e, sd)); MI elseLabel(MI::LABEL); MI endLabel(MI::LABEL); r.push_back(MI(MI::JUMPZ, elseLabel.arg1)); r += _then->codeV(e, sd); r.push_back(MI(MI::JUMP, endLabel.arg1)); r.push_back(elseLabel); r += _else->codeV(e, sd); r.push_back(endLabel); return r /= "if_V"; };
void VariableEntry::memAlloc(MemoryMgr &mm){ offSet(mm.getNextAddress()); if(initVal()!=NULL){ if(type()->tag() == Type::TypeTag::BOOL){ trueLabel(new Label(Label::LabelType::BOOL_TRUE)); falseLabel(new Label(Label::LabelType::BOOL_FALSE)); endLabel(new Label(Label::LabelType::BOOL_END)); initVal()->trueLabel(trueLabel()); initVal()->falseLabel(falseLabel()); } reg(mm.getNextRegister(true)); mm.addRegister(reg()); initVal()->memAlloc(mm); if(type()->tag() != Type::TypeTag::BOOL){ mm.freeRegister(initVal()->reg()); } mm.freeRegister(reg()); } }