Branch: Tag:

2014-12-04

2014-12-04 19:23:35 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler: Fixed overriding of variant functions.

Overriding of variant functions now seems to work as intended.

Also adds testsuite test that checks some of the cases.

2926:   ]])   test_compile([[Stdio.File foo=Stdio.FILE();]])    + dnl variant   test_any([[ -  +  class A { +  variant string a() { return "A:a()"; } +  variant string a(string s) { return sprintf("A:a(%q)", s); } +  }; +  class B { +  inherit A; +  variant string a(int i) { return local::a() + ":" + local::a((string)i) + ":" + ::a((string)i); } +  variant string a(string s) { return sprintf("B:a(%q)", s); } +  }; +  class C { +  inherit B; +  string a() { return "C:a()"; } +  variant string a(string s) { return ::a(sizeof(s)) + "|" + ::a(s) + "|" + a(); } +  }; +  return C()->a("foo"); + ]], "A:a():B:a(\"3\"):A:a(\"3\")|B:a(\"foo\")|C:a()") +  + test_any([[    // Test symbol lookup for inherit in multi-pass.    // LysLysKOM 16472935    // An old pike will attempt to lookup X in the innermost X