dynamic_object_type.type_symbol.scope.add (null, prop);
symbol_reference = prop;
}
+ } else if (parent_node is MemberAccess && inner is MemberAccess && parent_node.parent_node is MethodCall) {
+ var ma = (MemberAccess) parent_node;
+ if (ma.member_name == "connect" || ma.member_name == "connect_after") {
+ // dynamic signal
+ var s = new DynamicSignal (inner.value_type, member_name, new VoidType (), source_reference);
+ var mcall = (MethodCall) parent_node.parent_node;
+ // the first argument is the handler
+ if (mcall.get_argument_list().size > 0) {
+ s.handler = mcall.get_argument_list()[0];
+ }
+ s.access = SymbolAccessibility.PUBLIC;
+ dynamic_object_type.type_symbol.scope.add (null, s);
+ symbol_reference = s;
+ }
}
if (symbol_reference == null) {
// dynamic property read access
if (m.returns_floating_reference) {
value_type.floating_reference = true;
}
+
+ var dynamic_sig = m.parent_symbol as DynamicSignal;
+ if (dynamic_sig != null && dynamic_sig.handler != null) {
+ bool first = true;
+ foreach (FormalParameter param in dynamic_sig.handler.value_type.get_parameters ()) {
+ if (first) {
+ // skip sender parameter
+ first = false;
+ } else {
+ dynamic_sig.add_parameter (param.copy ());
+ }
+ }
+ dynamic_sig.handler.target_type = new DelegateType (dynamic_sig.get_delegate (new ObjectType ((ObjectTypeSymbol) dynamic_sig.parent_symbol), this));
+ }
} else if (mtype is DelegateType) {
var d = ((DelegateType) mtype).delegate_symbol;
foreach (DataType error_type in d.get_error_types ()) {