void fold_expr_str(expr *e, symtable *stab) { const stringlit *const strlit = e->bits.strlit.lit_at.lit; expr *sz; sz = expr_new_val(strlit->len); FOLD_EXPR(sz, stab); /* (const? char []) */ e->tree_type = type_array_of( type_qualify( type_nav_btype( cc1_type_nav, strlit->wide ? type_wchar : type_nchar), e->bits.strlit.is_func ? qual_const : qual_none), sz); }
static void test_arithmetic() { double d0 = 0.0; double d1 = 0.0; Expr *e_isum = expr_sum(expr_int(2), expr_int(2)); Expr *e_lsum = expr_sum(expr_long(2), expr_long(2)); Expr *e_rsum = expr_sum(expr_real(2.2), expr_real(2.2)); Expr *e_isub = expr_sub(expr_int(3), expr_int(7)); Expr *e_lsub = expr_sub(expr_long(3), expr_long(7)); Expr *e_rsub = expr_sub(expr_real(1.3), expr_real(0.3)); Expr *e_idiv = expr_div(expr_int(8), expr_int(4)); Expr *e_ldiv = expr_div(expr_long(8), expr_long(4)); Expr *e_rdiv = expr_div(expr_real(3.0), expr_real(0.1)); Expr *e_imul = expr_mul(expr_int(5), expr_int(5)); Expr *e_lmul = expr_mul(expr_long(5), expr_long(5)); Expr *e_rmul = expr_mul(expr_real(5.0), expr_real(0.5)); if (4 != val_int(expr_new_val(e_isum, NULL, NULL))) fail(); if (4LL != val_long(expr_new_val(e_lsum, NULL, NULL))) fail(); d0 = val_real(expr_new_val(e_rsum, NULL, NULL)); d1 = 4.4; if (d1 != d0) fail(); if (-4 != val_int(expr_new_val(e_isub, NULL, NULL))) fail(); if (-4LL != val_long(expr_new_val(e_lsub, NULL, NULL))) fail(); d0 = val_real(expr_new_val(e_rsub, NULL, NULL)); d1 = 1.0; if (d1 != d0) fail(); if (2 != val_int(expr_new_val(e_idiv, NULL, NULL))) fail(); if (2LL != val_long(expr_new_val(e_ldiv, NULL, NULL))) fail(); d0 = val_real(expr_new_val(e_rdiv, NULL, NULL)); d1 = 30; if (d1 != d0) fail(); if (25 != val_int(expr_new_val(e_imul, NULL, NULL))) fail(); if (25 != val_long(expr_new_val(e_lmul, NULL, NULL))) fail(); d0 = val_real(expr_new_val(e_rmul, NULL, NULL)); d1 = 2.5; if (d1 != d0) fail(); expr_free(e_isum); expr_free(e_lsum); expr_free(e_rsum); expr_free(e_isub); expr_free(e_lsub); expr_free(e_rsub); expr_free(e_idiv); expr_free(e_ldiv); expr_free(e_rdiv); expr_free(e_imul); expr_free(e_lmul); expr_free(e_rmul); }
expr *expr_new_array_idx(expr *base, int i) { return expr_new_array_idx_e(base, expr_new_val(i)); }