summaryrefslogtreecommitdiff
path: root/vala/valamemberaccess.vala
diff options
context:
space:
mode:
Diffstat (limited to 'vala/valamemberaccess.vala')
-rw-r--r--vala/valamemberaccess.vala13
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");