2024-07-29 22:30:52 +02:00
|
|
|
// Has `unused` parameters make sure ordering of used parameters is correct.
|
|
|
|
|
//
|
|
|
|
|
// The most-inner function will create a local (circumstantially, inside an
|
|
|
|
|
// `if`-block) to test returning locals.
|
|
|
|
|
|
2024-10-04 10:29:55 +02:00
|
|
|
var level1 := @( a, b, c ) {
|
|
|
|
|
return struct{ fnA1 := @( d, e, f ) {
|
|
|
|
|
return struct{ fnB1 := @( g, h, i ) {
|
|
|
|
|
return struct{ fnC1 := @( j, unused k, l ) {
|
|
|
|
|
var res := a + b + c + d + e + f + g + h + i + j;
|
|
|
|
|
if ( res > 0 )
|
|
|
|
|
var out_local := res * l;
|
|
|
|
|
return out_local;
|
|
|
|
|
endif
|
|
|
|
|
return res;
|
|
|
|
|
}, fnC2 := @( j, unused k, l ) {
|
|
|
|
|
var res := a * b * c * d * e * f * g * h * i * j;
|
|
|
|
|
if ( res > 0 )
|
|
|
|
|
var out_local := res / l;
|
|
|
|
|
return out_local;
|
|
|
|
|
endif
|
|
|
|
|
return res;
|
|
|
|
|
}, fnC3 := @( j, unused k, l ) {
|
|
|
|
|
var res := a - b - c - d - e - f - g - h - i - j;
|
|
|
|
|
if ( res > 0 )
|
|
|
|
|
var out_local := res + l;
|
|
|
|
|
return out_local;
|
|
|
|
|
endif
|
|
|
|
|
return res;
|
|
|
|
|
} };
|
|
|
|
|
}, fnB2 := @( g, h, i ) {
|
|
|
|
|
return struct{ fnC1 := @( j, unused k, l ) {
|
|
|
|
|
var res := a * b + c + d + e + f + g + h + i + j;
|
|
|
|
|
if ( res > 0 )
|
|
|
|
|
var out_local := res * l;
|
|
|
|
|
return out_local;
|
|
|
|
|
endif
|
|
|
|
|
return res;
|
|
|
|
|
}, fnC2 := @( j, unused k, l ) {
|
|
|
|
|
var res := a + b * c * d * e * f * g * h * i * j;
|
|
|
|
|
if ( res > 0 )
|
|
|
|
|
var out_local := res / l;
|
|
|
|
|
return out_local;
|
|
|
|
|
endif
|
|
|
|
|
return res;
|
|
|
|
|
}, fnC3 := @( j, unused k, l ) {
|
|
|
|
|
var res := a - b * c - d - e - f - g - h - i - j;
|
|
|
|
|
if ( res > 0 )
|
|
|
|
|
var out_local := res + l;
|
|
|
|
|
return out_local;
|
|
|
|
|
endif
|
|
|
|
|
return res;
|
|
|
|
|
} };
|
|
|
|
|
} };
|
|
|
|
|
} };
|
2024-07-29 22:30:52 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// (a + b + c + d + e + f + g + h + i + j) * l since inner expression is >0
|
|
|
|
|
// (-7 + -6 + -1 + 4 + -4 + 17 + 9 + 3 + 15 + -10) * -7 = -140
|
2024-10-04 10:29:55 +02:00
|
|
|
print( level1( -7, -6, -1 ).fnA1.call( 4, -4, 17 ).fnB1.call( 9, 3, 15 ).fnC1.call( -10, -7, -7 ) );
|
2024-07-29 22:30:52 +02:00
|
|
|
|
|
|
|
|
// a * b + c + d + e + f + g + h + i + j
|
|
|
|
|
// -3 * -1 + 2 + -7 + -4 + -5 + -2 + 7 + 1 + -1 = -6
|
2024-10-04 10:29:55 +02:00
|
|
|
print( level1( -3, -1, 2 ).fnA1.call( -7, -4, -5 ).fnB2.call( -2, 7, 1 ).fnC1.call( -1, 1, 5 ) );
|
2024-07-29 22:30:52 +02:00
|
|
|
|
|
|
|
|
// a - b * c - d - e - f - g - h - i - j
|
|
|
|
|
// 10 - 2 * 11 - 10 - 2 - 4 - -8 - -1 - -5 - 10 = -24
|
2024-10-04 10:29:55 +02:00
|
|
|
print( level1( 10, 2, 11 ).fnA1.call( 10, 2, 4 ).fnB2.call( -8, -1, -5 ).fnC3.call( 10, -3, 1 ) );
|