diff options
Diffstat (limited to 'vala/valamemberaccess.vala')
-rw-r--r-- | vala/valamemberaccess.vala | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index c8b3b267b..39a7af72c 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -390,6 +390,12 @@ public class Vala.MemberAccess : Expression { } } + if (inner.value_type is SignalType && member_name == "emit") { + // transform foo.sig.emit() to foo.sig() + parent_node.replace_expression (this, inner); + return true; + } + if (inner is MemberAccess) { unowned MemberAccess ma = (MemberAccess) inner; if (ma.prototype_access) { @@ -499,6 +505,13 @@ public class Vala.MemberAccess : Expression { s.access = SymbolAccessibility.PUBLIC; dynamic_object_type.type_symbol.scope.add (null, s); symbol_reference = s; + } else if (ma.member_name == "emit") { + // dynamic signal + var s = new DynamicSignal (inner.value_type, member_name, new VoidType (), source_reference); + s.access = SymbolAccessibility.PUBLIC; + s.add_parameter (new Parameter.with_ellipsis ()); + dynamic_object_type.type_symbol.scope.add (null, s); + symbol_reference = s; } else if (ma.member_name == "disconnect") { error = true; Report.error (ma.source_reference, "Use SignalHandler.disconnect() to disconnect from dynamic signal"); |