Example #1
0
void fold_stmt_case(stmt *t)
{
	intval val;

	fold_expr(t->expr, t->symtab);
	fold_need_expr(t->expr, "case", 0);
	const_fold_need_val(t->expr, &val);

	t->expr->spel = asm_label_case(CASE_CASE, val.val);

	fold_stmt_and_add_to_curswitch(t);
}
void fold_stmt_case_range(stmt *s)
{
	intval lval, rval;

	fold_expr(s->expr,  s->symtab);
	fold_expr(s->expr2, s->symtab);

	const_fold_need_val(s->expr,  &lval);
	const_fold_need_val(s->expr2, &rval);

	fold_need_expr(s->expr,  "case", 0);
	fold_need_expr(s->expr2, "case", 0);

	if(lval.val >= rval.val)
		DIE_AT(&s->where, "case range equal or inverse");

	s->expr->spel = asm_label_case(CASE_RANGE, lval.val);

	fold_stmt_and_add_to_curswitch(s);
}
void fold_stmt_case_range(stmt *s)
{
	integral_t lv, rv;

	FOLD_EXPR(s->expr,  s->symtab);
	FOLD_EXPR(s->expr2, s->symtab);

	fold_check_expr(s->expr,
			FOLD_CHK_INTEGRAL | FOLD_CHK_CONST_I,
			"case-range");
	lv = const_fold_val_i(s->expr);

	fold_check_expr(s->expr2,
			FOLD_CHK_INTEGRAL | FOLD_CHK_CONST_I,
			"case-range");
	rv = const_fold_val_i(s->expr2);

	if(lv >= rv)
		die_at(&s->where, "case range equal or inverse");

	s->bits.case_lbl = out_label_case(CASE_RANGE, lv);
	fold_stmt_and_add_to_curswitch(s, &s->bits.case_lbl);
}
Example #4
0
void fold_stmt_default(stmt *s)
{
	fold_stmt_and_add_to_curswitch(s, &s->bits.case_lbl);
}