From: Jiří Zárevúcky Date: Thu, 16 Jul 2009 17:58:35 +0000 (+0200) Subject: Add support for static properties X-Git-Tag: 0.7.5~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ce152e4261b46cceb135478685f0885cbdb4d20e;p=thirdparty%2Fvala.git Add support for static properties Fixes bug 586166. --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 240485e25..bea64e02b 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1155,11 +1155,6 @@ internal class Vala.CCodeBaseModule : CCodeModule { bool returns_real_struct = prop.property_type.is_real_struct_type (); - var t = (ObjectTypeSymbol) prop.parent_symbol; - - var this_type = new ObjectType (t); - generate_type_declaration (this_type, decl_space); - var cselfparam = new CCodeFormalParameter ("self", this_type.get_cname ()); CCodeFormalParameter cvalueparam; if (returns_real_struct) { @@ -1174,7 +1169,16 @@ internal class Vala.CCodeBaseModule : CCodeModule { } else { function = new CCodeFunction (acc.get_cname (), "void"); } - function.add_parameter (cselfparam); + + if (prop.binding == MemberBinding.INSTANCE) { + var t = (ObjectTypeSymbol) prop.parent_symbol; + var this_type = new ObjectType (t); + generate_type_declaration (this_type, decl_space); + var cselfparam = new CCodeFormalParameter ("self", this_type.get_cname ()); + + function.add_parameter (cselfparam); + } + if (acc.writable || acc.construction || returns_real_struct) { function.add_parameter (cvalueparam); } diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index 2ef15a475..aa44c1eae 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -246,7 +246,7 @@ public class Vala.MemberAccess : Expression { } else if (sym is Property) { var prop = (Property) sym; this_parameter = prop.this_parameter; - may_access_instance_members = true; + may_access_instance_members = (prop.binding == MemberBinding.INSTANCE); } else if (sym is Constructor) { var c = (Constructor) sym; this_parameter = c.this_parameter; diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 5afcd4ed5..88dacd545 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -2359,6 +2359,7 @@ public class Vala.Parser : CodeVisitor { var field_type = prop.property_type.copy (); prop.field = new Field ("_%s".printf (prop.name), field_type, prop.default_expression, prop.source_reference); prop.field.access = SymbolAccessibility.PRIVATE; + prop.field.binding = prop.binding; } } diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 755b0ae58..38380f8a6 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -636,7 +636,8 @@ public class Vala.SemanticAnalyzer : CodeVisitor { } else if (sym is Destructor) { return true; } else if (sym is Property) { - return true; + var p = (Property) sym; + return p.binding == MemberBinding.INSTANCE; } sym = sym.parent_symbol; }