vala r1793 - in trunk: . gobject vala



Author: juergbi
Date: Sat Sep 27 08:51:57 2008
New Revision: 1793
URL: http://svn.gnome.org/viewvc/vala?rev=1793&view=rev

Log:
2008-09-27  JÃrg Billeter  <j bitron ch>

	* vala/valaparser.vala:
	* vala/valasemanticanalyzer.vala:
	* gobject/valaccodegenerator.vala:
	* gobject/valaccodememberaccessbinding.vala:

	Add basic support for static properties


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegenerator.vala
   trunk/gobject/valaccodememberaccessbinding.vala
   trunk/vala/valaparser.vala
   trunk/vala/valasemanticanalyzer.vala

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala	(original)
+++ trunk/gobject/valaccodegenerator.vala	Sat Sep 27 08:51:57 2008
@@ -769,7 +769,8 @@
 		next_temp_var_id = old_next_temp_var_id;
 
 		var cl = prop.parent_symbol as Class;
-		if (cl != null && cl.is_subtype_of (gobject_type)) {
+		if (cl != null && cl.is_subtype_of (gobject_type)
+		    && prop.binding == MemberBinding.INSTANCE) {
 			// GObject property
 			// FIXME: omit real struct types for now since they
 			// cannot be expressed as gobject property yet
@@ -899,16 +900,18 @@
 			}
 
 			ObjectType base_type = null;
-			if (is_virtual) {
-				if (prop.base_property != null) {
-					base_type = new ObjectType ((ObjectTypeSymbol) prop.base_property.parent_symbol);
-				} else if (prop.base_interface_property != null) {
-					base_type = new ObjectType ((ObjectTypeSymbol) prop.base_interface_property.parent_symbol);
+			if (prop.binding == MemberBinding.INSTANCE) {
+				if (is_virtual) {
+					if (prop.base_property != null) {
+						base_type = new ObjectType ((ObjectTypeSymbol) prop.base_property.parent_symbol);
+					} else if (prop.base_interface_property != null) {
+						base_type = new ObjectType ((ObjectTypeSymbol) prop.base_interface_property.parent_symbol);
+					}
+					function.modifiers |= CCodeModifiers.STATIC;
+					function.add_parameter (new CCodeFormalParameter ("base", base_type.get_cname ()));
+				} else {
+					function.add_parameter (cselfparam);
 				}
-				function.modifiers |= CCodeModifiers.STATIC;
-				function.add_parameter (new CCodeFormalParameter ("base", base_type.get_cname ()));
-			} else {
-				function.add_parameter (cselfparam);
 			}
 			if (returns_real_struct) {
 				// return non simple structs as out parameter
@@ -945,7 +948,7 @@
 				function.block.prepend_statement (cdecl);
 			}
 
-			if (!is_virtual) {
+			if (prop.binding == MemberBinding.INSTANCE && !is_virtual) {
 				if (returns_real_struct) {
 					function.block.prepend_statement (create_property_type_check_statement (prop, false, t, true, "self"));
 				} else {
@@ -3983,8 +3986,10 @@
 		
 		var ccall = new CCodeFunctionCall (new CCodeIdentifier (set_func));
 
-		/* target instance is first argument */
-		ccall.add_argument ((CCodeExpression) ma.inner.ccodenode);
+		if (prop.binding == MemberBinding.INSTANCE) {
+			/* target instance is first argument */
+			ccall.add_argument ((CCodeExpression) ma.inner.ccodenode);
+		}
 
 		if (prop.no_accessor_method) {
 			/* property name is second argument of g_object_set */

Modified: trunk/gobject/valaccodememberaccessbinding.vala
==============================================================================
--- trunk/gobject/valaccodememberaccessbinding.vala	(original)
+++ trunk/gobject/valaccodememberaccessbinding.vala	Sat Sep 27 08:51:57 2008
@@ -182,7 +182,9 @@
 				}
 				var ccall = new CCodeFunctionCall (new CCodeIdentifier (getter_cname));
 
-				ccall.add_argument (pub_inst);
+				if (prop.binding == MemberBinding.INSTANCE) {
+					ccall.add_argument (pub_inst);
+				}
 
 				// Property acesses to real struct types are handeled different to other properties.
 				// They are returned as out parameter.

Modified: trunk/vala/valaparser.vala
==============================================================================
--- trunk/vala/valaparser.vala	(original)
+++ trunk/vala/valaparser.vala	Sat Sep 27 08:51:57 2008
@@ -2176,6 +2176,11 @@
 		var prop = new Property (id, type, null, null, get_src_com (begin));
 		prop.access = access;
 		set_attributes (prop, attrs);
+		if (ModifierFlags.STATIC in flags) {
+			prop.binding = MemberBinding.STATIC;
+		} else if (ModifierFlags.CLASS in flags) {
+			prop.binding = MemberBinding.CLASS;
+		}
 		if (ModifierFlags.ABSTRACT in flags) {
 			prop.is_abstract = true;
 		}

Modified: trunk/vala/valasemanticanalyzer.vala
==============================================================================
--- trunk/vala/valasemanticanalyzer.vala	(original)
+++ trunk/vala/valasemanticanalyzer.vala	Sat Sep 27 08:51:57 2008
@@ -643,12 +643,6 @@
 	public override void visit_property (Property prop) {
 		current_symbol = prop;
 
-		if (prop.binding != MemberBinding.INSTANCE) {
-			Report.error (prop.source_reference, "static properties are not yet supported");
-			prop.error = true;
-			return;
-		}
-
 		prop.accept_children (this);
 
 		// check whether property type is at least as accessible as the property



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]