With statement code blocks in C
I'm not sure if this is a mistake or not.
struct Foo{
int a;
public void add(int i){
this.a += i;
}
public void mul(int i){
this.a *= i;
}
public void min(int i){
this.a -= i;
}
public void prin(){
print(@"$a\n");
}
}
struct Bar{
Foo foo;
Bar(Foo _foo){
foo = _foo;
}
public void div(int n){
for (var i = 0; i < n; i++){
foo.min(n);
}
}
}
void main(){
var bar = Bar(Foo());
var foo2 = Foo();
with(foo2){
add(5);
min(1);
add(2);
mul(7);
prin();
}
foo2.prin();
with (bar){
with(foo){
add(5);
min(1);
add(2);
mul(7);
prin();
}
// div(6);
foo.prin();
}
bar.foo.prin();
}
Real Output:
42
42
42
0
0
Expected result:
42
42
42
42
42
C Code:
void
_vala_main (void)
{
Bar bar = {0};
Foo _tmp0_ = {0};
Foo foo2 = {0};
Foo _tmp1_;
Bar _tmp2_;
memset (&_tmp0_, 0, sizeof (Foo));
bar_init (&bar, &_tmp0_);
memset (&foo2, 0, sizeof (Foo));
_tmp1_ = foo2;
{
foo_add (&foo2, 5);
foo_min (&foo2, 1);
foo_add (&foo2, 2);
foo_mul (&foo2, 7);
foo_prin (&foo2);
}
foo_prin (&foo2);
_tmp2_ = bar;
{
{
Foo _tmp3_ = {0};
Bar _tmp4_;
Foo _tmp5_;
_tmp4_ = bar;
_tmp5_ = _tmp4_.foo;
_tmp3_ = _tmp5_;
foo_add (&_tmp3_, 5);
foo_min (&_tmp3_, 1);
foo_add (&_tmp3_, 2);
foo_mul (&_tmp3_, 7);
foo_prin (&_tmp3_);
}
foo_prin (&bar.foo);
}
foo_prin (&bar.foo);
}