]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add support for static properties
authorJiří Zárevúcky <zarevucky.jiri@gmail.com>
Thu, 16 Jul 2009 17:58:35 +0000 (19:58 +0200)
committerJürg Billeter <j@bitron.ch>
Thu, 16 Jul 2009 17:58:35 +0000 (19:58 +0200)
Fixes bug 586166.

codegen/valaccodebasemodule.vala
vala/valamemberaccess.vala
vala/valaparser.vala
vala/valasemanticanalyzer.vala

index 240485e25e1bb5e35678642e554f38b24d13ba0f..bea64e02bba8e4e69c09e70faf962bc219d4a024 100644 (file)
@@ -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);
                }
index 2ef15a4752f1e0f417f813b6b49414bc11b14e35..aa44c1eaee2b0269f407a73e4edd5a76a7f7ffad 100644 (file)
@@ -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;
index 5afcd4ed53bceac6972970035bcb9cd86be7d2e4..88dacd5455f27edfaca9985b3adbbde4651707f0 100644 (file)
@@ -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;
                        }
                }
 
index 755b0ae5808afb25cb45e4d4a7bc9cdf12c2ec89..38380f8a6bdaea44d4f03923aeb463cf2119572f 100644 (file)
@@ -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;
                }