From 455f789b57f7bf8682e303f6abf1a0bfb0312aeb Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Fri, 14 Dec 2007 21:14:23 +0000 Subject: [PATCH] move reference type check from MemoryManager to DataType 2007-12-14 Juerg Billeter * vala/valadatatype.vala, vala/valamemorymanager.vala: move reference type check from MemoryManager to DataType svn path=/trunk/; revision=769 --- ChangeLog | 5 +++++ vala/valadatatype.vala | 6 ++++++ vala/valamemorymanager.vala | 16 ++++------------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index cefb2d4..f417ca5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-12-14 Jürg Billeter + * vala/valadatatype.vala, vala/valamemorymanager.vala: move reference + type check from MemoryManager to DataType + +2007-12-14 Jürg Billeter + * vala/Makefile.am, vala/valadatatype.vala, vala/valadelegatetype.vala, vala/valafield.vala, vala/valaformalparameter.vala, vala/valainterfacewriter.vala, vala/valainvokable.vala, diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala index c19ba42..3690b6b 100644 --- a/vala/valadatatype.vala +++ b/vala/valadatatype.vala @@ -357,4 +357,10 @@ public class Vala.DataType : CodeNode { public virtual Collection get_parameters () { return null; } + + public virtual bool is_reference_type_or_type_parameter () { + return (data_type != null && + data_type.is_reference_type ()) || + type_parameter != null; + } } diff --git a/vala/valamemorymanager.vala b/vala/valamemorymanager.vala index 1435784..21fdf31 100644 --- a/vala/valamemorymanager.vala +++ b/vala/valamemorymanager.vala @@ -42,9 +42,7 @@ public class Vala.MemoryManager : CodeVisitor { private void visit_possibly_leaked_expression (Expression! expr) { if (expr.static_type != null && - ((expr.static_type.data_type != null && - expr.static_type.data_type.is_reference_type ()) || - expr.static_type.type_parameter != null) && + expr.static_type.is_reference_type_or_type_parameter () && expr.static_type.transfers_ownership) { /* mark reference as leaked */ expr.ref_leaked = true; @@ -53,9 +51,7 @@ public class Vala.MemoryManager : CodeVisitor { private void visit_possibly_missing_copy_expression (Expression! expr) { if (expr.static_type != null && - ((expr.static_type.data_type != null && - expr.static_type.data_type.is_reference_type ()) || - expr.static_type.type_parameter != null) && + expr.static_type.is_reference_type_or_type_parameter () && !expr.static_type.transfers_ownership) { /* mark reference as missing */ expr.ref_missing = true; @@ -213,9 +209,7 @@ public class Vala.MemoryManager : CodeVisitor { if (params_it.next ()) { var param = params_it.get (); if (!param.ellipsis - && ((param.type_reference.data_type != null - && param.type_reference.data_type.is_reference_type ()) - || param.type_reference.type_parameter != null)) { + && param.type_reference.is_reference_type_or_type_parameter ()) { bool is_ref = param.type_reference.transfers_ownership; if (is_ref && param.type_reference.type_parameter != null) { if (expr.call is MemberAccess) { @@ -256,9 +250,7 @@ public class Vala.MemoryManager : CodeVisitor { if (params_it.next ()) { var param = params_it.get (); if (!param.ellipsis - && ((param.type_reference.data_type != null - && param.type_reference.data_type.is_reference_type ()) - || param.type_reference.type_parameter != null)) { + && param.type_reference.is_reference_type_or_type_parameter ()) { bool is_ref = param.type_reference.transfers_ownership; if (is_ref && param.type_reference.type_parameter != null) { var param_type = SemanticAnalyzer.get_actual_type (expr.type_reference, msym, param.type_reference, expr); -- 2.7.4