vala r1182 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1182 - in trunk: . gobject vala
- Date: Mon, 7 Apr 2008 21:29:36 +0100 (BST)
Author: juergbi
Date: Mon Apr 7 21:29:36 2008
New Revision: 1182
URL: http://svn.gnome.org/viewvc/vala?rev=1182&view=rev
Log:
2008-04-07 Juerg Billeter <j bitron ch>
* vala/valacodenode.vala, gobject/valaccodegenerator.vala: improve
error reporting for non reference-counted object instances,
fixes bug 471053
Modified:
trunk/ChangeLog
trunk/gobject/valaccodegenerator.vala
trunk/vala/valacodenode.vala
Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala (original)
+++ trunk/gobject/valaccodegenerator.vala Mon Apr 7 21:29:36 2008
@@ -1200,7 +1200,7 @@
}
}
- private CCodeExpression get_dup_func_expression (DataType! type) {
+ private CCodeExpression get_dup_func_expression (DataType! type, SourceReference source_reference) {
if (type.data_type != null) {
string dup_function;
if (type.data_type.is_reference_counting ()) {
@@ -1209,7 +1209,7 @@
dup_function = type.data_type.get_dup_function ();
} else {
// duplicating non-reference counted structs may cause side-effects (and performance issues)
- Report.error (type.source_reference, "duplicating %s instance, use weak variable or explicitly invoke copy method".printf (type.data_type.name));
+ Report.error (source_reference, "duplicating %s instance, use weak variable or explicitly invoke copy method".printf (type.data_type.name));
return null;
}
@@ -1218,11 +1218,11 @@
string func_name = "%s_dup_func".printf (type.type_parameter.name.down ());
return new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), func_name);
} else if (type is ArrayType) {
- Report.error (type.source_reference, "internal error: duplicating %s instances not yet supported".printf (type.to_string ()));
+ Report.error (source_reference, "internal error: duplicating %s instances not yet supported".printf (type.to_string ()));
return null;
} else if (type is PointerType) {
var pointer_type = (PointerType) type;
- return get_dup_func_expression (pointer_type.base_type);
+ return get_dup_func_expression (pointer_type.base_type, source_reference);
} else {
return new CCodeConstant ("NULL");
}
@@ -2693,9 +2693,10 @@
* if static type of expr is non-null
*/
- var dupexpr = get_dup_func_expression (expr.static_type);
+ var dupexpr = get_dup_func_expression (expr.static_type, expr.source_reference);
- if (null == dupexpr) {
+ if (dupexpr == null) {
+ expr.error = true;
return null;
}
@@ -2719,7 +2720,7 @@
}
// dup functions are optional for type parameters
- var cdupisnull = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, get_dup_func_expression (expr.static_type), new CCodeConstant ("NULL"));
+ var cdupisnull = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, get_dup_func_expression (expr.static_type, expr.source_reference), new CCodeConstant ("NULL"));
cisnull = new CCodeBinaryExpression (CCodeBinaryOperator.OR, cisnull, cdupisnull);
}
@@ -2851,7 +2852,7 @@
foreach (DataType type_arg in expr.type_reference.get_type_arguments ()) {
creation_call.add_argument (get_type_id_expression (type_arg));
if (type_arg.takes_ownership) {
- var dup_func = get_dup_func_expression (type_arg);
+ var dup_func = get_dup_func_expression (type_arg, type_arg.source_reference);
if (dup_func == null) {
// type doesn't contain a copy function
expr.error = true;
Modified: trunk/vala/valacodenode.vala
==============================================================================
--- trunk/vala/valacodenode.vala (original)
+++ trunk/vala/valacodenode.vala Mon Apr 7 21:29:36 2008
@@ -53,7 +53,7 @@
return _ccodenode;
}
set {
- if (source_reference != null) {
+ if (value != null && source_reference != null) {
value.line = new CCodeLineDirective (
Path.get_basename (source_reference.file.filename),
source_reference.first_line);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]