This fixes criticals if an errornous expression was given.
objects/signals-enum-marshal.vala \
objects/signals-delegate.vala \
objects/signals-delegate-parameter.vala \
+ objects/signals-dymanic-invalid-handler.test \
objects/signals-fundamental-return.vala \
objects/signals-gobject-return.vala \
objects/signals-lambda-delegate.vala \
--- /dev/null
+Invalid Code
+
+void main () {
+ dynamic Object? foo = null;
+ foo.on_bar.connect (non_existent);
+}
// the first argument is the handler
if (mcall.get_argument_list().size > 0) {
s.handler = mcall.get_argument_list()[0];
+ unowned MemberAccess? arg = s.handler as MemberAccess;
+ if (arg == null || !arg.check (context) || !(arg.symbol_reference is Method)) {
+ error = true;
+ Report.error (s.handler.source_reference, "Invalid handler for `%s'".printf (s.get_full_name ()));
+ }
}
s.access = SymbolAccessibility.PUBLIC;
dynamic_object_type.type_symbol.scope.add (null, s);