* The reference to the object instance will be appended to the end of
* the argument list in the generated C code.
*/
- public bool has_target { get; set; }
+ public bool has_target {
+ get {
+ if (_has_target == null) {
+ _has_target = get_attribute_bool ("CCode", "has_target", true);
+ }
+ return _has_target;
+ }
+ set {
+ _has_target = value;
+ if (value) {
+ remove_attribute_argument ("CCode", "has_target");
+ } else {
+ set_attribute_bool ("CCode", "has_target", false);
+ }
+ }
+ }
public DataType? sender_type { get; set; }
private string cname;
private DataType _return_type;
+ private bool? _has_target;
/**
* Creates a new delegate.
if (a.has_argument ("cname")) {
set_cname (a.get_string ("cname"));
}
- if (a.has_argument ("has_target")) {
- has_target = a.get_bool ("has_target");
- }
if (a.has_argument ("instance_pos")) {
cinstance_parameter_position = a.get_double ("instance_pos");
}
d.access = get_access (sym.name);
}
- if (!(ModifierFlags.STATIC in flags)) {
- d.has_target = true;
+ if (ModifierFlags.STATIC in flags) {
+ d.has_target = false;
}
if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
d.external = true;
if (element_name == "callback") {
s = new Delegate (name, return_type, current.source_reference);
+ ((Delegate) s).has_target = false;
} else if (element_name == "constructor") {
if (name == "new") {
name = null;
// TODO enable warning in future releases
Report.warning (get_last_src (), "deprecated syntax, use [CCode (has_target = false)]");
}
- } else {
- d.has_target = true;
+ d.has_target = false;
}
if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
d.external = true;
var actual_return_type = return_type.get_actual_type (sender_type, null, node_reference);
var generated_delegate = new Delegate (null, actual_return_type);
- generated_delegate.has_target = true;
generated_delegate.access = SymbolAccessibility.PUBLIC;
generated_delegate.owner = scope;
var cb = new Delegate (node.name, return_type, current_source_reference);
cb.access = SymbolAccessibility.PUBLIC;
+ cb.has_target = false;
bool check_has_target = true;
bool suppress_throws = false;