From: Jürg Billeter Date: Tue, 13 Jul 2010 20:26:05 +0000 (+0200) Subject: dova: Support public and protected instance fields in classes X-Git-Tag: 0.9.3~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ad2f429e21e86853b01fb3391d98c579a6a9379;p=thirdparty%2Fvala.git dova: Support public and protected instance fields in classes Internally handled as properties to avoid ABI issues. Fixes bug 623503. --- diff --git a/vala/valaclass.vala b/vala/valaclass.vala index 1b675dad6..b22b0093b 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -285,6 +285,32 @@ public class Vala.Class : ObjectTypeSymbol { * @param f a field */ public void add_field (Field f) { + if (CodeContext.get ().profile == Profile.DOVA && + f.binding == MemberBinding.INSTANCE && + (f.access == SymbolAccessibility.PUBLIC || f.access == SymbolAccessibility.PROTECTED) && + name != "string" /* temporary workaround */) { + // public/protected instance fields not supported, convert to automatic property + + var prop = new Property (f.name, f.field_type.copy (), null, null, f.source_reference, comment); + prop.access = access; + + var get_type = prop.property_type.copy (); + get_type.value_owned = true; + + prop.get_accessor = new PropertyAccessor (true, false, false, get_type, null, f.source_reference); + prop.get_accessor.access = SymbolAccessibility.PUBLIC; + + prop.set_accessor = new PropertyAccessor (false, true, false, prop.property_type.copy (), null, f.source_reference); + prop.set_accessor.access = SymbolAccessibility.PUBLIC; + + f.name = "_%s".printf (f.name); + f.access = SymbolAccessibility.PRIVATE; + prop.field = f; + + add_property (prop); + return; + } + fields.add (f); if (f.access == SymbolAccessibility.PRIVATE && f.binding == MemberBinding.INSTANCE) { has_private_fields = true;