[vala] Do not use GLib-specific code outside GObject profile



commit 9ea838635ea7823c865bdebd65c56e8ba1826e69
Author: Jürg Billeter <j bitron ch>
Date:   Sun Jul 26 14:15:10 2009 +0200

    Do not use GLib-specific code outside GObject profile

 codegen/valaccodebasemodule.vala        |   22 ++++++++++++----------
 codegen/valaccodecontrolflowmodule.vala |    7 ++++++-
 codegen/valaccodemethodcallmodule.vala  |    8 ++++++--
 codegen/valaccodestructmodule.vala      |   20 +++++++++++---------
 4 files changed, 35 insertions(+), 22 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index bea64e0..bc6adf4 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -1927,7 +1927,7 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 	}
 
 	public CCodeExpression? get_destroy_func_expression (DataType type) {
-		if (type.data_type == glist_type || type.data_type == gslist_type) {
+		if (context.profile == Profile.GOBJECT && (type.data_type == glist_type || type.data_type == gslist_type)) {
 			// create wrapper function to free list elements if necessary
 
 			bool elements_require_free = false;
@@ -2041,7 +2041,7 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 			// normal value type, no null check
 			ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cvar));
 
-			if (type.data_type == gvalue_type) {
+			if (gvalue_type != null && type.data_type == gvalue_type) {
 				// g_value_unset must not be called for already unset values
 				var cisvalid = new CCodeFunctionCall (new CCodeIdentifier ("G_IS_VALUE"));
 				cisvalid.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cvar));
@@ -2079,10 +2079,11 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 		/* set freed references to NULL to prevent further use */
 		var ccomma = new CCodeCommaExpression ();
 
-		if (type.data_type == gstringbuilder_type
-		     || type.data_type == garray_type
-		     || type.data_type == gbytearray_type
-		     || type.data_type == gptrarray_type) {
+		if (context.profile == Profile.GOBJECT
+		    && (type.data_type == gstringbuilder_type
+		        || type.data_type == garray_type
+		        || type.data_type == gbytearray_type
+		        || type.data_type == gptrarray_type)) {
 			ccall.add_argument (new CCodeConstant ("TRUE"));
 		} else if (type is ArrayType) {
 			var array_type = (ArrayType) type;
@@ -2760,7 +2761,7 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 			ccomma.append_expression (copy_call);
 			ccomma.append_expression (ctemp);
 
-			if (expression_type.data_type == gvalue_type) {
+			if (gvalue_type != null && expression_type.data_type == gvalue_type) {
 				// g_value_init/copy must not be called for uninitialized values
 				var cisvalid = new CCodeFunctionCall (new CCodeIdentifier ("G_IS_VALUE"));
 				cisvalid.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cexpr));
@@ -3303,7 +3304,7 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 	}
 
 	public override void visit_cast_expression (CastExpression expr) {
-		if (expr.inner.value_type != null && expr.inner.value_type.data_type == gvalue_type
+		if (expr.inner.value_type != null && gvalue_type != null && expr.inner.value_type.data_type == gvalue_type
 		    && expr.type_reference.get_type_id () != null) {
 			// explicit conversion from GValue
 			var ccall = new CCodeFunctionCall (new CCodeIdentifier (expr.type_reference.data_type.get_get_value_function ()));
@@ -3314,7 +3315,7 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 
 		var cl = expr.type_reference.data_type as Class;
 		var iface = expr.type_reference.data_type as Interface;
-		if (iface != null || (cl != null && !cl.is_compact)) {
+		if (context.profile == Profile.GOBJECT && (iface != null || (cl != null && !cl.is_compact))) {
 			// checked cast for strict subtypes of GTypeInstance
 			if (expr.is_silent_cast) {
 				var ccomma = new CCodeCommaExpression ();
@@ -3614,7 +3615,8 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 		bool unboxing = (expression_type is ValueType && expression_type.nullable
 		                 && target_type is ValueType && !target_type.nullable);
 
-		bool gvalue_boxing = (target_type != null
+		bool gvalue_boxing = (context.profile == Profile.GOBJECT
+		                      && target_type != null
 		                      && target_type.data_type == gvalue_type
 		                      && !(expression_type is NullType)
 		                      && expression_type.get_type_id () != "G_TYPE_VALUE");
diff --git a/codegen/valaccodecontrolflowmodule.vala b/codegen/valaccodecontrolflowmodule.vala
index b0c84c0..86a98e3 100644
--- a/codegen/valaccodecontrolflowmodule.vala
+++ b/codegen/valaccodecontrolflowmodule.vala
@@ -224,7 +224,12 @@ internal class Vala.CCodeControlFlowModule : CCodeMethodModule {
 	public override void visit_loop (Loop stmt) {
 		stmt.accept_children (codegen);
 
-		stmt.ccodenode = new CCodeWhileStatement (new CCodeConstant ("TRUE"), (CCodeStatement) stmt.body.ccodenode);
+		if (context.profile == Profile.GOBJECT) {
+			stmt.ccodenode = new CCodeWhileStatement (new CCodeConstant ("TRUE"), (CCodeStatement) stmt.body.ccodenode);
+		} else {
+			source_declarations.add_include ("stdbool.h");
+			stmt.ccodenode = new CCodeWhileStatement (new CCodeConstant ("true"), (CCodeStatement) stmt.body.ccodenode);
+		}
 	}
 
 	public override void visit_foreach_statement (ForeachStatement stmt) {
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index f62ff3a..8fc87db 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -94,7 +94,11 @@ internal class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 		}
 
 		if (m is CreationMethod) {
-			ccall.add_argument (new CCodeIdentifier ("object_type"));
+			if (context.profile == Profile.GOBJECT) {
+				ccall.add_argument (new CCodeIdentifier ("object_type"));
+			} else {
+				ccall.add_argument (new CCodeIdentifier ("self"));
+			}
 
 			foreach (DataType base_type in current_class.get_base_types ()) {
 				if (base_type.data_type is Class) {
@@ -217,7 +221,7 @@ internal class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 				param.accept (codegen);
 			}
 			head.generate_dynamic_method_wrapper ((DynamicMethod) m);
-		} else if (m is CreationMethod) {
+		} else if (m is CreationMethod && context.profile == Profile.GOBJECT) {
 			ccall_expr = new CCodeAssignment (new CCodeIdentifier ("self"), new CCodeCastExpression (ccall, current_class.get_cname () + "*"));
 		}
 
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index e449a7c..9ffc52a 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -50,14 +50,16 @@ internal class Vala.CCodeStructModule : CCodeBaseModule {
 			return;
 		}
 
-		if (st.has_type_id) {
-			decl_space.add_type_declaration (new CCodeNewline ());
-			var macro = "(%s_get_type ())".printf (st.get_lower_case_cname (null));
-			decl_space.add_type_declaration (new CCodeMacroReplacement (st.get_type_id (), macro));
-
-			var type_fun = new StructRegisterFunction (st, context);
-			type_fun.init_from_type (false);
-			decl_space.add_type_member_declaration (type_fun.get_declaration ());
+		if (context.profile == Profile.GOBJECT) {
+			if (st.has_type_id) {
+				decl_space.add_type_declaration (new CCodeNewline ());
+				var macro = "(%s_get_type ())".printf (st.get_lower_case_cname (null));
+				decl_space.add_type_declaration (new CCodeMacroReplacement (st.get_type_id (), macro));
+
+				var type_fun = new StructRegisterFunction (st, context);
+				type_fun.init_from_type (false);
+				decl_space.add_type_member_declaration (type_fun.get_declaration ());
+			}
 		}
 
 		var instance_struct = new CCodeStruct ("_%s".printf (st.get_cname ()));
@@ -151,7 +153,7 @@ internal class Vala.CCodeStructModule : CCodeBaseModule {
 
 		st.accept_children (codegen);
 
-		if (!st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
+		if (context.profile == Profile.GOBJECT && !st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
 			if (st.is_disposable ()) {
 				add_struct_copy_function (st);
 				add_struct_destroy_function (st);



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