vala r1322 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1322 - in trunk: . gobject vala
- Date: Sat, 26 Apr 2008 15:11:17 +0100 (BST)
Author: juergbi
Date: Sat Apr 26 14:11:16 2008
New Revision: 1322
URL: http://svn.gnome.org/viewvc/vala?rev=1322&view=rev
Log:
2008-04-26 Juerg Billeter <j bitron ch>
* vala/valaarraytype.vala:
* vala/valaclassinstancetype.vala:
* vala/valaclasstype.vala:
* vala/valadatatype.vala:
* vala/valadelegatetype.vala:
* vala/valaerrortype.vala:
* vala/valainterfaceinstancetype.vala:
* vala/valainterfacetype.vala:
* vala/valamethodtype.vala:
* vala/valanulltype.vala:
* vala/valapointertype.vala:
* vala/valasemanticanalyzer.vala:
* vala/valasymbolresolver.vala:
* vala/valatypeparametertype.vala:
* vala/valavaluetype.vala:
* vala/valavoidtype.vala:
* gobject/valaccodegenerator.vala:
Fix handling of const types, fixes bug 529851
Modified:
trunk/ChangeLog
trunk/gobject/valaccodegenerator.vala
trunk/vala/valaarraytype.vala
trunk/vala/valaclassinstancetype.vala
trunk/vala/valaclasstype.vala
trunk/vala/valadatatype.vala
trunk/vala/valadelegatetype.vala
trunk/vala/valaerrortype.vala
trunk/vala/valainterfaceinstancetype.vala
trunk/vala/valainterfacetype.vala
trunk/vala/valamethodtype.vala
trunk/vala/valanulltype.vala
trunk/vala/valapointertype.vala
trunk/vala/valasemanticanalyzer.vala
trunk/vala/valasymbolresolver.vala
trunk/vala/valatypeparametertype.vala
trunk/vala/valavaluetype.vala
trunk/vala/valavoidtype.vala
Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala (original)
+++ trunk/gobject/valaccodegenerator.vala Sat Apr 26 14:11:16 2008
@@ -715,7 +715,7 @@
p.accept_children (this);
if (!p.ellipsis) {
- string ctypename = p.type_reference.get_cname (false, !p.type_reference.transfers_ownership);
+ string ctypename = p.type_reference.get_cname ();
string cname = p.name;
// pass non-simple structs always by reference
@@ -778,7 +778,6 @@
this_type = new InterfaceInstanceType ((Interface) t);
}
var cselfparam = new CCodeFormalParameter ("self", this_type.get_cname ());
- var cvalueparam = new CCodeFormalParameter ("value", prop.type_reference.get_cname (false, true));
if (prop.is_abstract || prop.is_virtual) {
if (acc.readable) {
@@ -788,6 +787,7 @@
}
function.add_parameter (cselfparam);
if (acc.writable || acc.construction) {
+ var cvalueparam = new CCodeFormalParameter ("value", acc.value_parameter.type_reference.get_cname ());
function.add_parameter (cvalueparam);
}
@@ -877,11 +877,12 @@
function.add_parameter (cselfparam);
if (returns_real_struct) {
// return non simple structs as out parameter
- var coutparamname = "%s*".printf (prop.type_reference.get_cname (false, true));
+ var coutparamname = "%s*".printf (prop.type_reference.get_cname ());
var coutparam = new CCodeFormalParameter ("value", coutparamname);
function.add_parameter (coutparam);
} else {
if (acc.writable || acc.construction) {
+ var cvalueparam = new CCodeFormalParameter ("value", acc.value_parameter.type_reference.get_cname ());
function.add_parameter (cvalueparam);
}
}
@@ -1186,7 +1187,7 @@
var cvar = new CCodeVariableDeclarator.with_initializer (get_variable_cname (local.name), rhs);
var cfrag = new CCodeFragment ();
- var cdecl = new CCodeDeclaration (local.variable_type.get_cname (false, !local.variable_type.takes_ownership));
+ var cdecl = new CCodeDeclaration (local.variable_type.get_cname ());
cdecl.add_declarator (cvar);
cfrag.append (cdecl);
@@ -1426,7 +1427,7 @@
private void append_temp_decl (CCodeFragment cfrag, Collection<LocalVariable> temp_vars) {
foreach (LocalVariable local in temp_vars) {
- var cdecl = new CCodeDeclaration (local.variable_type.get_cname (true, !local.variable_type.takes_ownership));
+ var cdecl = new CCodeDeclaration (local.variable_type.get_cname ());
var vardecl = new CCodeVariableDeclarator (local.name);
// sets #line
Modified: trunk/vala/valaarraytype.vala
==============================================================================
--- trunk/vala/valaarraytype.vala (original)
+++ trunk/vala/valaarraytype.vala Sat Apr 26 14:11:16 2008
@@ -129,7 +129,8 @@
return result;
}
- public override string? get_cname (bool var_type, bool const_type) {
+ public override string? get_cname () {
+ // FIXME add support for [Immutable] or [Const] attribute to support arrays to const data
return element_type.get_cname () + "*";
}
Modified: trunk/vala/valaclassinstancetype.vala
==============================================================================
--- trunk/vala/valaclassinstancetype.vala (original)
+++ trunk/vala/valaclassinstancetype.vala Sat Apr 26 14:11:16 2008
@@ -51,4 +51,8 @@
return result;
}
+
+ public override string? get_cname () {
+ return "%s*".printf (class_symbol.get_cname (!takes_ownership && !transfers_ownership));
+ }
}
Modified: trunk/vala/valaclasstype.vala
==============================================================================
--- trunk/vala/valaclasstype.vala (original)
+++ trunk/vala/valaclasstype.vala Sat Apr 26 14:11:16 2008
@@ -51,7 +51,7 @@
return result;
}
- public override string? get_cname (bool var_type, bool const_type) {
+ public override string? get_cname () {
return "%sClass*".printf (class_symbol.get_cname ());
}
}
Modified: trunk/vala/valadatatype.vala
==============================================================================
--- trunk/vala/valadatatype.vala (original)
+++ trunk/vala/valadatatype.vala Sat Apr 26 14:11:16 2008
@@ -108,34 +108,10 @@
*
* @return the type string to be used in C code
*/
- public virtual string? get_cname (bool var_type = false, bool const_type = false) {
- if (data_type == null && type_parameter == null) {
- if (var_type) {
- return "gpointer";
- } else {
- return "void";
- }
- }
-
- string ptr;
- if (type_parameter != null || !data_type.is_reference_type ()) {
- ptr = "";
- } else {
- ptr = "*";
- }
- if (data_type != null) {
- return data_type.get_cname (const_type) + ptr;
- } else if (type_parameter != null) {
- if (const_type) {
- return "gconstpointer";
- } else {
- return "gpointer";
- }
- } else {
- /* raise error */
- Report.error (source_reference, "unresolved type reference");
- return null;
- }
+ public virtual string? get_cname () {
+ // raise error
+ Report.error (source_reference, "unresolved type reference");
+ return null;
}
/**
Modified: trunk/vala/valadelegatetype.vala
==============================================================================
--- trunk/vala/valadelegatetype.vala (original)
+++ trunk/vala/valadelegatetype.vala Sat Apr 26 14:11:16 2008
@@ -57,8 +57,8 @@
return new DelegateType (delegate_symbol);
}
- public override string? get_cname (bool var_type, bool const_type) {
- return delegate_symbol.get_cname (const_type);
+ public override string? get_cname () {
+ return delegate_symbol.get_cname ();
}
public override Collection<Symbol> get_symbols () {
Modified: trunk/vala/valaerrortype.vala
==============================================================================
--- trunk/vala/valaerrortype.vala (original)
+++ trunk/vala/valaerrortype.vala Sat Apr 26 14:11:16 2008
@@ -72,7 +72,7 @@
return new ErrorType (error_domain, source_reference);
}
- public override string? get_cname (bool var_type = false, bool const_type = false) {
+ public override string? get_cname () {
return "GError*";
}
Modified: trunk/vala/valainterfaceinstancetype.vala
==============================================================================
--- trunk/vala/valainterfaceinstancetype.vala (original)
+++ trunk/vala/valainterfaceinstancetype.vala Sat Apr 26 14:11:16 2008
@@ -51,4 +51,8 @@
return result;
}
+
+ public override string? get_cname () {
+ return "%s*".printf (interface_symbol.get_cname (!takes_ownership && !transfers_ownership));
+ }
}
Modified: trunk/vala/valainterfacetype.vala
==============================================================================
--- trunk/vala/valainterfacetype.vala (original)
+++ trunk/vala/valainterfacetype.vala Sat Apr 26 14:11:16 2008
@@ -51,7 +51,7 @@
return result;
}
- public override string? get_cname (bool var_type, bool const_type) {
+ public override string? get_cname () {
return "%sIface*".printf (interface_symbol.get_cname ());
}
}
Modified: trunk/vala/valamethodtype.vala
==============================================================================
--- trunk/vala/valamethodtype.vala (original)
+++ trunk/vala/valamethodtype.vala Sat Apr 26 14:11:16 2008
@@ -63,7 +63,7 @@
return method_symbol.get_full_name ();
}
- public override string? get_cname (bool var_type, bool const_type) {
+ public override string? get_cname () {
return "gpointer";
}
}
Modified: trunk/vala/valanulltype.vala
==============================================================================
--- trunk/vala/valanulltype.vala (original)
+++ trunk/vala/valanulltype.vala Sat Apr 26 14:11:16 2008
@@ -56,4 +56,8 @@
public override DataType copy () {
return new NullType (source_reference);
}
+
+ public override string? get_cname () {
+ return "gpointer";
+ }
}
Modified: trunk/vala/valapointertype.vala
==============================================================================
--- trunk/vala/valapointertype.vala (original)
+++ trunk/vala/valapointertype.vala Sat Apr 26 14:11:16 2008
@@ -41,11 +41,11 @@
return base_type.to_string () + "*";
}
- public override string? get_cname (bool var_type = false, bool const_type = false) {
+ public override string? get_cname () {
if (base_type.data_type != null && base_type.data_type.is_reference_type ()) {
- return base_type.get_cname (var_type, const_type);
+ return base_type.get_cname ();
} else {
- return base_type.get_cname (var_type, const_type) + "*";
+ return base_type.get_cname () + "*";
}
}
Modified: trunk/vala/valasemanticanalyzer.vala
==============================================================================
--- trunk/vala/valasemanticanalyzer.vala (original)
+++ trunk/vala/valasemanticanalyzer.vala Sat Apr 26 14:11:16 2008
@@ -735,7 +735,9 @@
}
if (acc.body != null && (acc.writable || acc.construction)) {
- acc.value_parameter = new FormalParameter ("value", acc.prop.type_reference, acc.source_reference);
+ var value_type = acc.prop.type_reference.copy ();
+ value_type.takes_ownership = value_type.transfers_ownership;
+ acc.value_parameter = new FormalParameter ("value", value_type, acc.source_reference);
acc.body.scope.add (acc.value_parameter.name, acc.value_parameter);
}
}
Modified: trunk/vala/valasymbolresolver.vala
==============================================================================
--- trunk/vala/valasymbolresolver.vala (original)
+++ trunk/vala/valasymbolresolver.vala Sat Apr 26 14:11:16 2008
@@ -295,6 +295,8 @@
/* check for array */
if (unresolved_type.array_rank > 0) {
var element_type = type;
+ // array contains strong references by default
+ element_type.takes_ownership = element_type.is_reference_type_or_type_parameter ();
element_type.transfers_ownership = false;
element_type.nullable = false;
Modified: trunk/vala/valatypeparametertype.vala
==============================================================================
--- trunk/vala/valatypeparametertype.vala (original)
+++ trunk/vala/valatypeparametertype.vala Sat Apr 26 14:11:16 2008
@@ -40,4 +40,12 @@
return result;
}
+
+ public override string? get_cname () {
+ if (takes_ownership || transfers_ownership) {
+ return "gpointer";
+ } else {
+ return "gconstpointer";
+ }
+ }
}
Modified: trunk/vala/valavaluetype.vala
==============================================================================
--- trunk/vala/valavaluetype.vala (original)
+++ trunk/vala/valavaluetype.vala Sat Apr 26 14:11:16 2008
@@ -52,11 +52,11 @@
return result;
}
- public override string? get_cname (bool var_type, bool const_type) {
+ public override string? get_cname () {
string ptr = "";
if (nullable) {
ptr = "*";
}
- return type_symbol.get_cname (const_type) + ptr;
+ return type_symbol.get_cname () + ptr;
}
}
Modified: trunk/vala/valavoidtype.vala
==============================================================================
--- trunk/vala/valavoidtype.vala (original)
+++ trunk/vala/valavoidtype.vala Sat Apr 26 14:11:16 2008
@@ -37,7 +37,7 @@
return "void";
}
- public override string? get_cname (bool var_type = false, bool const_type = false) {
+ public override string? get_cname () {
return "void";
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]