Example #1
0
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);
}
Example #3
0
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";
};
Example #4
0
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());
	}
}