2007-12-12 Jürg Billeter <j@bitron.ch>
+ * gobject/valaccodegeneratormethod.vala: fix invalid C code for virtual
+ interface method implementations
+
+ * tests/interfaces.exp, tests/interfaces.vala: test virtual interface
+ method implementations
+
+2007-12-12 Jürg Billeter <j@bitron.ch>
+
* vala/parser.y, vala/scanner.l, vala/valadatatype.vala,
vala/valasymbolresolver.vala, vala/valavoidtype.vala: always use
VoidType
if (m.parent_symbol is Class) {
var cl = (Class) m.parent_symbol;
- if (m.overrides || m.base_interface_method != null) {
+ if (m.overrides || (m.base_interface_method != null && !m.is_abstract && !m.is_virtual)) {
Method base_method;
if (m.overrides) {
base_method = m.base_method;
interface Maman.Ibaz : Object {
public abstract void do_action ();
+
+ public abstract void do_virtual_action ();
}
class Maman.Baz : Object, Ibaz {
stdout.printf (" 2");
}
+ public virtual void do_virtual_action () {
+ stdout.printf (" 4");
+ }
+}
+
+class Maman.SubBaz : Baz {
+ public override void do_virtual_action () {
+ stdout.printf (" 6");
+ }
+
static int main (string[] args) {
stdout.printf ("Interface Test: 1");
Ibaz ibaz = new Baz ();
ibaz.do_action ();
- stdout.printf (" 3\n");
+ stdout.printf (" 3");
+
+ ibaz.do_virtual_action ();
+
+ stdout.printf (" 5");
+
+ Ibaz subbaz = new SubBaz ();
+ subbaz.do_virtual_action ();
+
+ stdout.printf (" 7\n");
return 0;
}