zkusila jsem test a muj vystup je spravny (target=26). sice muj kod (moji vinou) vypada jinak, ale myslim, ze by to melo fungovat nejak takto:Andrej píše:Kód: Vybrat vše
| DUTOK_REPEAT command_list DUTOK_UNTIL expression { if ( identical_type( $4.cur_type, ctx->tab->logical_bool() ) ) { $$.icb = $2.icb; icblock_append_delete( $$.icb, $4.icb ); $$.icb->append_instruction( new ai::JF( $$.icb->begin() ) ); } else { error( DUERR_TYPEMISMATCH, @4 ); $$.icb = $2.icb; } }
Kód: Vybrat vše
ic_label il = new_label(ctx);
$$.icb->add_label(il); // pridas do kodu misto pro skok
mlc::icblock_append_delete($$.icb, $2.icb); // prikazy
mlc::icblock_append_delete($$.icb, $4.icb); // podminka
$$.icb->append_instruction_with_target(new ai::JF($$.icb->end()),il); // pri false vyhodnoceni skok na il