From 5ad2f429e21e86853b01fb3391d98c579a6a9379 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Tue, 13 Jul 2010 22:26:05 +0200 Subject: [PATCH] dova: Support public and protected instance fields in classes Internally handled as properties to avoid ABI issues. Fixes bug 623503. --- vala/valaclass.vala | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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; -- 2.47.2