polserver/testsuite/escript/funcexpr/complex-nested-struct.src
Kevin Eady 3ccf701ce9
Format testsuite scripts, pol-core support modules (#713)
* Format escript testsuite

* Manual formatting for escript testsuite
- Add format-off to places where formatter does what it should, but we don't like the results
- Manually change places where formatter outputs weird things _without_ format-off, so next format-all would show changes if not fixed

* Update .err files; add update_err.py helper script

Use the format `:line:col: message` for all .err file checks. This
allows us to change the file names without needing to edit the .err
contents.

Note that `in/inc0{1,2}.err` need have error messages between POSIX and
Windows, so their messages are a bit more "generic" than the other errs.

* Format pol testsuite

* Manual formatting for pol testsuite

* Format pol-core modules

* Manual formatting for pol-core modules

* Additional format pol-core modules

Use FormatterLineWidth=10000 since module functions must be on one line
because of the parse_modules target

* Address Discord comments

- Support multi-line module function declarations in parse_modules

* Format on df07831
2024-10-04 10:29:55 +02:00

68 lines
2.3 KiB
Text

// 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.
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;
} };
} };
} };
};
// (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
print( level1( -7, -6, -1 ).fnA1.call( 4, -4, 17 ).fnB1.call( 9, 3, 15 ).fnC1.call( -10, -7, -7 ) );
// a * b + c + d + e + f + g + h + i + j
// -3 * -1 + 2 + -7 + -4 + -5 + -2 + 7 + 1 + -1 = -6
print( level1( -3, -1, 2 ).fnA1.call( -7, -4, -5 ).fnB2.call( -2, 7, 1 ).fnC1.call( -1, 1, 5 ) );
// a - b * c - d - e - f - g - h - i - j
// 10 - 2 * 11 - 10 - 2 - 4 - -8 - -1 - -5 - 10 = -24
print( level1( 10, 2, 11 ).fnA1.call( 10, 2, 4 ).fnB2.call( -8, -1, -5 ).fnC3.call( 10, -3, 1 ) );