[vala] Do not use GLib-specific code outside GObject profile
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Subject: [vala] Do not use GLib-specific code outside GObject profile
- Date: Sun, 26 Jul 2009 19:29:04 +0000 (UTC)
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]