vala r2263 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2263 - in trunk: . gobject
- Date: Sun, 4 Jan 2009 14:00:07 +0000 (UTC)
Author: juergbi
Date: Sun Jan 4 14:00:07 2009
New Revision: 2263
URL: http://svn.gnome.org/viewvc/vala?rev=2263&view=rev
Log:
2009-01-04 JÃrg Billeter <j bitron ch>
* gobject/valaccodebasemodule.vala:
Fix generated code for static array and delegate fields,
based on patch by Andreas Brauchli, fixes bug 521246
Modified:
trunk/ChangeLog
trunk/gobject/valaccodebasemodule.vala
Modified: trunk/gobject/valaccodebasemodule.vala
==============================================================================
--- trunk/gobject/valaccodebasemodule.vala (original)
+++ trunk/gobject/valaccodebasemodule.vala Sun Jan 4 14:00:07 2009
@@ -806,78 +806,15 @@
field_ctype = "volatile " + field_ctype;
}
- if (f.access != SymbolAccessibility.PRIVATE) {
- if (f.binding == MemberBinding.INSTANCE) {
+ if (f.binding == MemberBinding.INSTANCE) {
+ if (is_gtypeinstance && f.access == SymbolAccessibility.PRIVATE) {
+ st = instance_priv_struct;
+ lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), f.get_cname ());
+ } else {
st = instance_struct;
-
lhs = new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), f.get_cname ());
- } else if (f.binding == MemberBinding.CLASS) {
- if (!is_gtypeinstance) {
- Report.error (f.source_reference, "class fields are not supported in compact classes");
- f.error = true;
- return;
- }
-
- st = type_struct;
- } else {
- var cdecl = new CCodeDeclaration (field_ctype);
- cdecl.add_declarator (new CCodeVariableDeclarator (f.get_cname ()));
- cdecl.modifiers = CCodeModifiers.EXTERN;
- header_type_member_declaration.append (cdecl);
-
- var var_decl = new CCodeVariableDeclarator (f.get_cname ());
- var_decl.initializer = default_value_for_type (f.field_type, true);
-
- if (f.initializer != null) {
- var init = (CCodeExpression) f.initializer.ccodenode;
- if (is_constant_ccode_expression (init)) {
- var_decl.initializer = init;
- }
- }
-
- var var_def = new CCodeDeclaration (field_ctype);
- var_def.add_declarator (var_decl);
- var_def.modifiers = CCodeModifiers.EXTERN;
- source_type_member_declaration.append (var_def);
-
- lhs = new CCodeIdentifier (f.get_cname ());
- }
- } else if (f.access == SymbolAccessibility.PRIVATE) {
- if (f.binding == MemberBinding.INSTANCE) {
- if (is_gtypeinstance) {
- st = instance_priv_struct;
- lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), f.get_cname ());
- } else {
- st = instance_struct;
- lhs = new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), f.get_cname ());
- }
- } else if (f.binding == MemberBinding.CLASS) {
- if (!is_gtypeinstance) {
- Report.error (f.source_reference, "class fields are not supported in compact classes");
- f.error = true;
- return;
- }
-
- st = type_priv_struct;
- lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("klass"), "priv"), f.get_cname ());
- } else {
- var cdecl = new CCodeDeclaration (field_ctype);
- var var_decl = new CCodeVariableDeclarator (f.get_cname ());
- if (f.initializer != null) {
- var init = (CCodeExpression) f.initializer.ccodenode;
- if (is_constant_ccode_expression (init)) {
- var_decl.initializer = init;
- }
- }
- cdecl.add_declarator (var_decl);
- cdecl.modifiers = CCodeModifiers.STATIC;
- source_type_member_declaration.append (cdecl);
-
- lhs = new CCodeIdentifier (f.get_cname ());
}
- }
- if (f.binding == MemberBinding.INSTANCE) {
st.add_field (field_ctype, f.get_cname ());
if (f.field_type is ArrayType && !f.no_array_length) {
// create fields to store array dimensions
@@ -938,8 +875,48 @@
instance_finalize_fragment.append (new CCodeExpressionStatement (get_unref_expression (lhs, f.field_type, ma)));
}
} else if (f.binding == MemberBinding.CLASS) {
+ if (!is_gtypeinstance) {
+ Report.error (f.source_reference, "class fields are not supported in compact classes");
+ f.error = true;
+ return;
+ }
+
+ if (f.access != SymbolAccessibility.PRIVATE) {
+ st = type_struct;
+ } else {
+ st = type_priv_struct;
+ }
+
st.add_field (field_ctype, f.get_cname ());
} else {
+ lhs = new CCodeIdentifier (f.get_cname ());
+
+ if (!f.is_internal_symbol ()) {
+ var cdecl = new CCodeDeclaration (field_ctype);
+ cdecl.add_declarator (new CCodeVariableDeclarator (f.get_cname ()));
+ cdecl.modifiers = CCodeModifiers.EXTERN;
+ header_type_member_declaration.append (cdecl);
+ }
+
+ var var_decl = new CCodeVariableDeclarator (f.get_cname ());
+ var_decl.initializer = default_value_for_type (f.field_type, true);
+
+ if (f.initializer != null) {
+ var init = (CCodeExpression) f.initializer.ccodenode;
+ if (is_constant_ccode_expression (init)) {
+ var_decl.initializer = init;
+ }
+ }
+
+ var var_def = new CCodeDeclaration (field_ctype);
+ var_def.add_declarator (var_decl);
+ if (!f.is_internal_symbol ()) {
+ var_def.modifiers = CCodeModifiers.EXTERN;
+ } else {
+ var_def.modifiers = CCodeModifiers.STATIC;
+ }
+ source_type_member_declaration.append (var_def);
+
/* add array length fields where necessary */
if (f.field_type is ArrayType && !f.no_array_length) {
var array_type = (ArrayType) f.field_type;
@@ -947,29 +924,42 @@
for (int dim = 1; dim <= array_type.rank; dim++) {
var len_type = int_type.copy ();
- var cdecl = new CCodeDeclaration (len_type.get_cname ());
- cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname (f.get_cname (), dim)));
- if (f.access != SymbolAccessibility.PRIVATE) {
+ if (!f.is_internal_symbol ()) {
+ var cdecl = new CCodeDeclaration (len_type.get_cname ());
+ cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname (f.get_cname (), dim)));
cdecl.modifiers = CCodeModifiers.EXTERN;
header_type_member_declaration.append (cdecl);
+ }
+
+ var len_def = new CCodeDeclaration (len_type.get_cname ());
+ len_def.add_declarator (new CCodeVariableDeclarator.with_initializer (head.get_array_length_cname (f.get_cname (), dim), new CCodeConstant ("0")));
+ if (!f.is_internal_symbol ()) {
+ len_def.modifiers = CCodeModifiers.EXTERN;
} else {
- cdecl.modifiers = CCodeModifiers.STATIC;
- source_type_member_declaration.append (cdecl);
+ len_def.modifiers = CCodeModifiers.STATIC;
}
+ source_type_member_declaration.append (len_def);
}
} else if (f.field_type is DelegateType) {
var delegate_type = (DelegateType) f.field_type;
if (delegate_type.delegate_symbol.has_target) {
// create field to store delegate target
- var cdecl = new CCodeDeclaration ("gpointer");
- cdecl.add_declarator (new CCodeVariableDeclarator (get_delegate_target_cname (f.get_cname ())));
- if (f.access != SymbolAccessibility.PRIVATE) {
+
+ if (!f.is_internal_symbol ()) {
+ var cdecl = new CCodeDeclaration ("gpointer");
+ cdecl.add_declarator (new CCodeVariableDeclarator (get_delegate_target_cname (f.get_cname ())));
cdecl.modifiers = CCodeModifiers.EXTERN;
header_type_member_declaration.append (cdecl);
+ }
+
+ var target_def = new CCodeDeclaration ("gpointer");
+ target_def.add_declarator (new CCodeVariableDeclarator.with_initializer (get_delegate_target_cname (f.get_cname ()), new CCodeConstant ("NULL")));
+ if (!f.is_internal_symbol ()) {
+ target_def.modifiers = CCodeModifiers.EXTERN;
} else {
- cdecl.modifiers = CCodeModifiers.STATIC;
- source_type_member_declaration.append (cdecl);
+ target_def.modifiers = CCodeModifiers.STATIC;
}
+ source_type_member_declaration.append (target_def);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]