summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2008-11-09 22:43:27 +0000
committerJürg Billeter <juergbi@src.gnome.org>2008-11-09 22:43:27 +0000
commit40668a3951bba2462d7d164f1c9b6a05715040b4 (patch)
tree33e979f24a959655bcf6d9e73d1bffc08fdf3f2a /vala
parente13a4cc57ade4a8ff77798f2b9ee3ce8b16ae6c2 (diff)
downloadvala-40668a3951bba2462d7d164f1c9b6a05715040b4.tar.gz
Ensure attributes of field, property, parameter, and return types are
2008-11-09 Jürg Billeter <j@bitron.ch> * vala/valacreationmethod.vala: * vala/valadelegate.vala: * vala/valadelegatetype.vala: * vala/valaenum.vala: * vala/valafield.vala: * vala/valaformalparameter.vala: * vala/valamethod.vala: * vala/valaproperty.vala: * vala/valastruct.vala: * vala/valavaluetype.vala: Ensure attributes of field, property, parameter, and return types are processed before querying C header filenames svn path=/trunk/; revision=2006
Diffstat (limited to 'vala')
-rw-r--r--vala/valacreationmethod.vala7
-rw-r--r--vala/valadelegate.vala8
-rw-r--r--vala/valadelegatetype.vala4
-rw-r--r--vala/valaenum.vala8
-rw-r--r--vala/valafield.vala2
-rw-r--r--vala/valaformalparameter.vala4
-rw-r--r--vala/valamethod.vala2
-rw-r--r--vala/valaproperty.vala4
-rw-r--r--vala/valastruct.vala12
-rw-r--r--vala/valavaluetype.vala4
10 files changed, 49 insertions, 6 deletions
diff --git a/vala/valacreationmethod.vala b/vala/valacreationmethod.vala
index b99224cec..f7dfe265d 100644
--- a/vala/valacreationmethod.vala
+++ b/vala/valacreationmethod.vala
@@ -131,13 +131,16 @@ public class Vala.CreationMethod : Method {
return false;
}
+ var old_symbol = analyzer.current_symbol;
+ var old_return_type = analyzer.current_return_type;
+
analyzer.current_symbol = this;
analyzer.current_return_type = return_type;
accept_children (analyzer);
- analyzer.current_symbol = analyzer.current_symbol.parent_symbol;
- analyzer.current_return_type = null;
+ analyzer.current_symbol = old_symbol;
+ analyzer.current_return_type = old_return_type;
if (analyzer.current_symbol.parent_symbol is Method) {
/* lambda expressions produce nested methods */
diff --git a/vala/valadelegate.vala b/vala/valadelegate.vala
index 57596c9b1..25973d6f8 100644
--- a/vala/valadelegate.vala
+++ b/vala/valadelegate.vala
@@ -337,8 +337,16 @@ public class Vala.Delegate : TypeSymbol {
process_attributes ();
+ var old_source_file = analyzer.current_source_file;
+
+ if (source_reference != null) {
+ analyzer.current_source_file = source_reference.file;
+ }
+
accept_children (analyzer);
+ analyzer.current_source_file = old_source_file;
+
return !error;
}
}
diff --git a/vala/valadelegatetype.vala b/vala/valadelegatetype.vala
index 3b113473c..40035d9f7 100644
--- a/vala/valadelegatetype.vala
+++ b/vala/valadelegatetype.vala
@@ -70,4 +70,8 @@ public class Vala.DelegateType : DataType {
public override string? get_type_id () {
return "G_TYPE_POINTER";
}
+
+ public override bool check (SemanticAnalyzer analyzer) {
+ return delegate_symbol.check (analyzer);
+ }
}
diff --git a/vala/valaenum.vala b/vala/valaenum.vala
index aa80454d0..526cd4dac 100644
--- a/vala/valaenum.vala
+++ b/vala/valaenum.vala
@@ -307,8 +307,16 @@ public class Vala.Enum : TypeSymbol {
process_attributes ();
+ var old_source_file = analyzer.current_source_file;
+
+ if (source_reference != null) {
+ analyzer.current_source_file = source_reference.file;
+ }
+
accept_children (analyzer);
+ analyzer.current_source_file = old_source_file;
+
return !error;
}
}
diff --git a/vala/valafield.vala b/vala/valafield.vala
index 251cd5b07..9feb2826a 100644
--- a/vala/valafield.vala
+++ b/vala/valafield.vala
@@ -203,6 +203,8 @@ public class Vala.Field : Member, Lockable {
checked = true;
+ field_type.check (analyzer);
+
process_attributes ();
if (initializer != null) {
diff --git a/vala/valaformalparameter.vala b/vala/valaformalparameter.vala
index 36103789b..b5733945c 100644
--- a/vala/valaformalparameter.vala
+++ b/vala/valaformalparameter.vala
@@ -184,6 +184,10 @@ public class Vala.FormalParameter : Symbol {
}
analyzer.current_symbol = parent_symbol;
+ if (parameter_type != null) {
+ parameter_type.check (analyzer);
+ }
+
accept_children (analyzer);
if (analyzer.context.non_null && default_expression != null) {
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index d9bb2fd63..c6f3e2b53 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -652,6 +652,8 @@ public class Vala.Method : Member {
analyzer.current_symbol = this;
analyzer.current_return_type = return_type;
+ return_type.check (analyzer);
+
var init_attr = get_attribute ("ModuleInit");
if (init_attr != null) {
source_reference.file.context.module_init_method = this;
diff --git a/vala/valaproperty.vala b/vala/valaproperty.vala
index 2026a7b21..3dc081174 100644
--- a/vala/valaproperty.vala
+++ b/vala/valaproperty.vala
@@ -421,8 +421,8 @@ public class Vala.Property : Member, Lockable {
}
analyzer.current_symbol = this;
- property_type.accept (analyzer);
-
+ property_type.check (analyzer);
+
if (get_accessor != null) {
get_accessor.accept (analyzer);
}
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index bb2252fbb..4b2c208d6 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -615,6 +615,13 @@ public class Vala.Struct : TypeSymbol {
process_attributes ();
+ var old_source_file = analyzer.current_source_file;
+ var old_symbol = analyzer.current_symbol;
+ var old_struct = analyzer.current_struct;
+
+ if (source_reference != null) {
+ analyzer.current_source_file = source_reference.file;
+ }
analyzer.current_symbol = this;
analyzer.current_struct = this;
@@ -624,8 +631,9 @@ public class Vala.Struct : TypeSymbol {
Report.error (source_reference, "structs cannot be empty");
}
- analyzer.current_symbol = analyzer.current_symbol.parent_symbol;
- analyzer.current_struct = null;
+ analyzer.current_source_file = old_source_file;
+ analyzer.current_symbol = old_symbol;
+ analyzer.current_struct = old_struct;
return !error;
}
diff --git a/vala/valavaluetype.vala b/vala/valavaluetype.vala
index 87741d4ed..08df08205 100644
--- a/vala/valavaluetype.vala
+++ b/vala/valavaluetype.vala
@@ -77,4 +77,8 @@ public class Vala.ValueType : DataType {
return false;
}
+
+ public override bool check (SemanticAnalyzer analyzer) {
+ return type_symbol.check (analyzer);
+ }
}