blob: 5c9587ca9f614f9a822d89586a6c33bc06b8d727 [file] [log] [blame]
// REQUIRED_ARGS: -unittest -boundscheck=off
// PERMUTE_ARGS:
// EXTRA_SOURCES: imports/a15030.d imports/b15030.d
// EXTRA_FILES: imports/std15030algo.d
void main() {}
/+
Compiler output with -v switch.
With 2.068.0:
--------
code a
code b
function b.__unittestL5_2
function b.__unittestL5_2.__lambda1
function b.__unittestL5_2.__lambda1.__lambda2
function b.__unittestL5_2.__lambda1.__lambda2.filter!((a) => a).filter!(int[]).filter
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.this
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.empty
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.front
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.popFront
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xopEquals
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xtoHash
function b.__unittestL5_2.__lambda1.__lambda2.__lambda2
The nested functions '__lambda1', '__lambda2', and 'filter' are
(fortunately) generated from outer to inner.
With 2.068.1:
--------
code a
function b.__unittestL5_2.__lambda1.__lambda2.filter!((a) => a).filter!(int[]).filter
function b.__unittestL5_2.__lambda1.__lambda2
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.this
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.empty
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.front
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.popFront
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xopEquals
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xtoHash
code b
function b.__unittestL5_2
function b.__unittestL5_2.__lambda1
Assertion failure: '!v->csym' on line 1060 in file 'glue.c'
abnormal program termination
'filer' is generated before its ancestor functions '__lambda1' and '__lambda2' - it's a bug.
Fixed (contains debug prints):
--------
code a
b.__unittestL5_2.__lambda1.__lambda2.filter!((a) => a).filter!(int[]).filter @[algorithm.d(5)]
--> pushed to unittest @[b.d(5)]
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.this
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.empty
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.front
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.popFront
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xopEquals
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xtoHash
code b
function b.__unittestL5_2
function b.__unittestL5_2.__lambda1
function b.__unittestL5_2.__lambda1.__lambda2
function b.__unittestL5_2.__lambda1.__lambda2.filter!((a) => a).filter!(int[]).filter
function b.__unittestL5_2.__lambda1.__lambda2.__lambda2
By using `deferredNested` correctly, those nested function generations are ordered again.
Fixed more:
--------
function D main
code a
code b
function b.__unittestL5_2
function b.__unittestL5_2.__lambda1
function b.__unittestL5_2.__lambda1.__lambda2
function b.__unittestL5_2.__lambda1.__lambda2.filter!(int[]).filter
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.this
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.empty
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.front
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.popFront
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xopEquals
function b.__unittestL5_2.__lambda1.__lambda2.FilterResult!(__lambda2, int[]).FilterResult.__xtoHash
function b.__unittestL5_2.__lambda1.__lambda2.__lambda2
By the tweak in TemplateInstance::appendToModuleMember(), all the code of
(implicitly) nested instances are stored into corresponding module object file.
+/