[vala/parallel-0.10: 18/37] Create array lists in Method class only on demand
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/parallel-0.10: 18/37] Create array lists in Method class only on demand
- Date: Mon, 6 Sep 2010 13:16:44 +0000 (UTC)
commit 7ab580ab4f1559f9985b6ca8bf7e1c6ac0c77413
Author: Jürg Billeter <j bitron ch>
Date: Sat Aug 21 11:55:35 2010 +0200
Create array lists in Method class only on demand
vala/valamethod.vala | 70 ++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 56 insertions(+), 14 deletions(-)
---
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index 29f30ab..5d3cbeb 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -28,7 +28,7 @@ using GLib;
* Represents a type or namespace method.
*/
public class Vala.Method : Symbol {
- List<TypeParameter> type_parameters = new ArrayList<TypeParameter> ();
+ List<TypeParameter> type_parameters;
public const string DEFAULT_SENTINEL = "NULL";
@@ -238,8 +238,8 @@ public class Vala.Method : Symbol {
private string finish_name;
private string _vfunc_name;
private string _sentinel;
- private List<Expression> preconditions = new ArrayList<Expression> ();
- private List<Expression> postconditions = new ArrayList<Expression> ();
+ private List<Expression> preconditions;
+ private List<Expression> postconditions;
private DataType _return_type;
private Block _body;
@@ -252,6 +252,9 @@ public class Vala.Method : Symbol {
// only valid for closures
List<LocalVariable> captured_variables;
+ static List<Expression> _empty_expression_list;
+ static List<TypeParameter> _empty_type_parameter_list;
+
/**
* Creates a new method.
*
@@ -327,12 +330,16 @@ public class Vala.Method : Symbol {
result_var.accept (visitor);
}
- foreach (Expression precondition in preconditions) {
- precondition.accept (visitor);
+ if (preconditions != null) {
+ foreach (Expression precondition in preconditions) {
+ precondition.accept (visitor);
+ }
}
- foreach (Expression postcondition in postconditions) {
- postcondition.accept (visitor);
+ if (postconditions != null) {
+ foreach (Expression postcondition in postconditions) {
+ postcondition.accept (visitor);
+ }
}
if (body != null) {
@@ -590,6 +597,9 @@ public class Vala.Method : Symbol {
* @param p a type parameter
*/
public void add_type_parameter (TypeParameter p) {
+ if (type_parameters == null) {
+ type_parameters = new ArrayList<TypeParameter> ();
+ }
type_parameters.add (p);
scope.add (p.name, p);
}
@@ -600,10 +610,20 @@ public class Vala.Method : Symbol {
* @return list of type parameters
*/
public List<TypeParameter> get_type_parameters () {
- return type_parameters;
+ if (type_parameters != null) {
+ return type_parameters;
+ }
+ if (_empty_type_parameter_list == null) {
+ _empty_type_parameter_list = new ArrayList<TypeParameter> ();
+ }
+ return _empty_type_parameter_list;
}
public int get_type_parameter_index (string name) {
+ if (type_parameters == null) {
+ return -1;
+ }
+
int i = 0;
foreach (TypeParameter parameter in type_parameters) {
if (parameter.name == name) {
@@ -620,6 +640,9 @@ public class Vala.Method : Symbol {
* @param precondition a boolean precondition expression
*/
public void add_precondition (Expression precondition) {
+ if (preconditions == null) {
+ preconditions = new ArrayList<Expression> ();
+ }
preconditions.add (precondition);
precondition.parent_node = this;
}
@@ -630,7 +653,13 @@ public class Vala.Method : Symbol {
* @return list of preconditions
*/
public List<Expression> get_preconditions () {
- return preconditions;
+ if (preconditions != null) {
+ return preconditions;
+ }
+ if (_empty_expression_list == null) {
+ _empty_expression_list = new ArrayList<Expression> ();
+ }
+ return _empty_expression_list;
}
/**
@@ -639,6 +668,9 @@ public class Vala.Method : Symbol {
* @param postcondition a boolean postcondition expression
*/
public void add_postcondition (Expression postcondition) {
+ if (postconditions == null) {
+ postconditions = new ArrayList<Expression> ();
+ }
postconditions.add (postcondition);
postcondition.parent_node = this;
}
@@ -649,7 +681,13 @@ public class Vala.Method : Symbol {
* @return list of postconditions
*/
public List<Expression> get_postconditions () {
- return postconditions;
+ if (postconditions != null) {
+ return postconditions;
+ }
+ if (_empty_expression_list == null) {
+ _empty_expression_list = new ArrayList<Expression> ();
+ }
+ return _empty_expression_list;
}
public override void replace_type (DataType old_type, DataType new_type) {
@@ -853,12 +891,16 @@ public class Vala.Method : Symbol {
result_var.check (analyzer);
}
- foreach (Expression precondition in preconditions) {
- precondition.check (analyzer);
+ if (preconditions != null) {
+ foreach (Expression precondition in preconditions) {
+ precondition.check (analyzer);
+ }
}
- foreach (Expression postcondition in postconditions) {
- postcondition.check (analyzer);
+ if (postconditions != null) {
+ foreach (Expression postcondition in postconditions) {
+ postcondition.check (analyzer);
+ }
}
if (body != null) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]