Declaration order for nested classes matters - should not!
Imported from https://youtrack.roxen.com/issue/PIKE-9
Reported by KG Sterneberg kg@roxen.com
The following code does not work (but it should):
int main(int argc, array(string) argv)
{
Outer outer = Outer();
Outer.Nested n = outer->get_nested();
n->hello_world();
}
class Outer
{
Nested get_nested()
{
return Nested();
}
class Nested
{
void hello_world() { werror("Hello World!\n"); }
}
}
Running it:
>pike tmp.pike
tmp.pike:4:Indexing on illegal type.
tmp.pike:4:Got : zero.
tmp.pike:4:Index : string(78..116).
tmp.pike:4:Expected constant expression.
Pike: Failed to compile script.
Moving "class Outer" above main solves the problem. However the order should not matter!