}
}
- unsigned char base = 10;
- if (literal->base.kind == EXPR_LITERAL_INTEGER_OCTAL) {
- base = 8;
- } else if (literal->base.kind == EXPR_LITERAL_INTEGER_HEXADECIMAL) {
- base = 16;
- } else {
- assert(literal->base.kind == EXPR_LITERAL_INTEGER);
+ unsigned base;
+ switch (literal->base.kind) {
+ case EXPR_LITERAL_INTEGER_OCTAL: base = 8; break;
+ case EXPR_LITERAL_INTEGER: base = 10; break;
+ case EXPR_LITERAL_INTEGER_HEXADECIMAL: base = 16; break;
+ default: panic("invalid literal kind");
}
tarval_int_overflow_mode_t old_mode = tarval_get_integer_overflow_mode();
assert(us == 1 || base != 10);
tarval_set_integer_overflow_mode(TV_OVERFLOW_WRAP);
bool res = try_create_integer(literal, type_unsigned_long_long, base);
- if (res == false)
+ if (!res)
panic("internal error when parsing number literal");
finished:
tv = new_tarval_from_str(string, size, mode);
goto make_const;
case EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL: {
- char *buffer = alloca(size + 2);
+ char buffer[size + 2];
memcpy(buffer, "0x", 2);
memcpy(buffer+2, string, size);
tv = new_tarval_from_str(buffer, size+2, mode);
* nodes into a new and unreachable block. */
keep_alive(node);
keep_alive(get_cur_block());
- new_Block(0, NULL);
+ ir_node *block = new_Block(0, NULL);
+ set_cur_block(block);
}
return result;
mature_immBlock(zero_block);
ir_node *in_cf[2] = { jmp_one, jmp_zero };
- new_Block(2, in_cf);
+ ir_node *block = new_Block(2, in_cf);
+ set_cur_block(block);
ir_node *in[2] = { one, zero };
ir_node *val = new_d_Phi(dbgi, 2, in, mode);
/* create the common block */
ir_node *in_cf[2] = { true_jmp, false_jmp };
- new_Block(2, in_cf);
+ ir_node *block = new_Block(2, in_cf);
+ set_cur_block(block);
/* TODO improve static semantics, so either both or no values are NULL */
if (true_val == NULL || false_val == NULL)
/* create output projs & connect them */
if (needs_memory) {
- ir_node *projm = new_Proj(node, mode_M, out_size+1);
+ ir_node *projm = new_Proj(node, mode_M, out_size);
set_store(projm);
}
assert(entity->kind == ENTITY_FUNCTION);
ir_graph *irg = current_ir_graph;
ir_node *args = get_irg_args(irg);
- ir_node *start_block = get_irg_start_block(irg);
ir_type *function_irtype = get_ir_type(entity->declaration.type);
int first_param_nr = 0;
if (entity->function.need_closure) {
/* add an extra parameter for the static link */
- entity->function.static_link = new_r_Proj(start_block, args, mode_P_data, 0);
+ entity->function.static_link = new_r_Proj(args, mode_P_data, 0);
++first_param_nr;
}
ir_mode *param_mode = get_type_mode(param_irtype);
long pn = n + first_param_nr;
- ir_node *value = new_r_Proj(start_block, args, param_mode, pn);
+ ir_node *value = new_r_Proj(args, param_mode, pn);
ir_mode *mode = get_ir_mode_storage(type);
value = create_conv(NULL, value, mode);