}
}
+ foreach (var prop in iface.get_properties ()) {
+ if (prop.is_abstract || prop.is_virtual) {
+ if (prop.get_accessor != null) {
+ var m = prop.get_accessor.get_method ();
+ write_indent ();
+ buffer.append_printf("<field name=\"%s\">\n", m.name);
+ indent++;
+ do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail, false);
+ indent--;
+ write_indent ();
+ buffer.append_printf ("</field>\n");
+ }
+
+ if (prop.set_accessor != null) {
+ var m = prop.set_accessor.get_method ();
+ write_indent ();
+ buffer.append_printf("<field name=\"%s\">\n", m.name);
+ indent++;
+ do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail, false);
+ indent--;
+ write_indent ();
+ buffer.append_printf ("</field>\n");
+ }
+ }
+ }
+
indent--;
write_indent ();
buffer.append_printf ("</record>\n");
indent--;
write_indent ();
buffer.append_printf ("</property>\n");
+
+ if (prop.get_accessor != null) {
+ var m = prop.get_accessor.get_method ();
+ if (m != null) {
+ visit_method (m);
+ }
+ }
+
+ if (prop.set_accessor != null) {
+ var m = prop.set_accessor.get_method ();
+ if (m != null) {
+ visit_method (m);
+ }
+ }
}
public override void visit_signal (Signal sig) {
}
}
+ /**
+ * Get the method representing this property accessor
+ * @return null if the accessor is neither readable nor writable
+ */
+ public Method? get_method () {
+ Method? m = null;
+ if (readable) {
+ m = new Method ("get_"+prop.name, value_type, source_reference, comment);
+ } else if (writable) {
+ m = new Method ("set_"+prop.name, new VoidType(), source_reference, comment);
+ m.add_parameter (value_parameter.copy ());
+ }
+
+ if (m != null) {
+ m.owner = prop.owner;
+ m.access = access;
+ m.binding = prop.binding;
+ m.is_abstract = prop.is_abstract;
+ m.is_virtual = prop.is_virtual;
+ }
+
+ return m;
+ }
+
public override bool check (CodeContext context) {
if (checked) {
return !error;
context.analyzer.current_symbol = this;
+ if (writable || construction) {
+ value_parameter = new Parameter ("value", value_type, source_reference);
+ }
+
if (prop.source_type == SourceFileType.SOURCE) {
if (body == null && !prop.interface_only && !prop.is_abstract) {
/* no accessor body specified, insert default body */
if (body != null) {
if (writable || construction) {
- value_parameter = new Parameter ("value", value_type, source_reference);
body.scope.add (value_parameter.name, value_parameter);
}