summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2018-12-01 14:13:31 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2018-12-20 00:51:37 +0100
commit25f8cafdb24ec89a37f6eca10d00e414b727975e (patch)
tree706b8b7725594eb187e86f4ea96bc68460dc6cf6
parent83112b21e245afec5e0d2a2b707d40259589db67 (diff)
downloadvala-25f8cafdb24ec89a37f6eca10d00e414b727975e.tar.gz
vala: Allow get_actual_type() to be used for expected failures
If the passed node_reference is null there won't be any error reporting. The resovled DataType will be an InvalidType on errors as usual.
-rw-r--r--vala/valaarraytype.vala2
-rw-r--r--vala/valadatatype.vala2
-rw-r--r--vala/valagenerictype.vala2
-rw-r--r--vala/valapointertype.vala2
-rw-r--r--vala/valasemanticanalyzer.vala24
5 files changed, 19 insertions, 13 deletions
diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
index 7f4b45dda..8265a8027 100644
--- a/vala/valaarraytype.vala
+++ b/vala/valaarraytype.vala
@@ -316,7 +316,7 @@ public class Vala.ArrayType : ReferenceType {
return element_type.check (context);
}
- public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode node_reference) {
+ public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
ArrayType result = (ArrayType) this.copy ();
if (derived_instance_type == null && method_type_arguments == null) {
diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala
index 85d8fb87b..51594c7a9 100644
--- a/vala/valadatatype.vala
+++ b/vala/valadatatype.vala
@@ -456,7 +456,7 @@ public abstract class Vala.DataType : CodeNode {
return false;
}
- public virtual DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode node_reference) {
+ public virtual DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
DataType result = this.copy ();
if (derived_instance_type == null && method_type_arguments == null) {
diff --git a/vala/valagenerictype.vala b/vala/valagenerictype.vala
index 0a229a43e..e5e1a50a8 100644
--- a/vala/valagenerictype.vala
+++ b/vala/valagenerictype.vala
@@ -47,7 +47,7 @@ public class Vala.GenericType : DataType {
return result;
}
- public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode node_reference) {
+ public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
var result = this.copy ();
if (derived_instance_type == null && method_type_arguments == null) {
diff --git a/vala/valapointertype.vala b/vala/valapointertype.vala
index 6e0d799cf..01d759eda 100644
--- a/vala/valapointertype.vala
+++ b/vala/valapointertype.vala
@@ -123,7 +123,7 @@ public class Vala.PointerType : DataType {
return false;
}
- public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode node_reference) {
+ public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
PointerType result = (PointerType) this.copy ();
if (derived_instance_type == null && method_type_arguments == null) {
diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala
index 139103b89..485ab222d 100644
--- a/vala/valasemanticanalyzer.vala
+++ b/vala/valasemanticanalyzer.vala
@@ -765,7 +765,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
return instance_base_type;
}
- internal static DataType? get_instance_base_type_for_member (DataType derived_instance_type, TypeSymbol type_symbol, CodeNode node_reference) {
+ internal static DataType? get_instance_base_type_for_member (DataType derived_instance_type, TypeSymbol type_symbol, CodeNode? node_reference) {
DataType instance_type = derived_instance_type;
while (instance_type is PointerType) {
@@ -840,7 +840,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
return null;
}
- public static DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, GenericType generic_type, CodeNode node_reference) {
+ public static DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, GenericType generic_type, CodeNode? node_reference) {
DataType actual_type = null;
if (generic_type.type_parameter.parent_symbol is TypeSymbol) {
if (derived_instance_type != null) {
@@ -848,9 +848,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
var instance_type = get_instance_base_type_for_member (derived_instance_type, (TypeSymbol) generic_type.type_parameter.parent_symbol, node_reference);
if (instance_type == null) {
- CodeNode? reference = get_symbol_for_data_type (derived_instance_type);
- Report.error ((reference ?? node_reference).source_reference, "The type-parameter `%s' is missing".printf (generic_type.to_string ()));
- node_reference.error = true;
+ if (node_reference != null) {
+ CodeNode? reference = get_symbol_for_data_type (derived_instance_type);
+ Report.error ((reference ?? node_reference).source_reference, "The type-parameter `%s' is missing".printf (generic_type.to_string ()));
+ node_reference.error = true;
+ }
return new InvalidType ();
}
@@ -861,8 +863,10 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
param_index = instance_type.data_type.get_type_parameter_index (generic_type.type_parameter.name);
}
if (param_index == -1) {
- Report.error (node_reference.source_reference, "internal error: unknown type parameter %s".printf (generic_type.type_parameter.name));
- node_reference.error = true;
+ if (node_reference != null) {
+ Report.error (node_reference.source_reference, "internal error: unknown type parameter %s".printf (generic_type.type_parameter.name));
+ node_reference.error = true;
+ }
return new InvalidType ();
}
@@ -876,8 +880,10 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
int param_index = m.get_type_parameter_index (generic_type.type_parameter.name);
if (param_index == -1) {
- Report.error (node_reference.source_reference, "internal error: unknown type parameter %s".printf (generic_type.type_parameter.name));
- node_reference.error = true;
+ if (node_reference != null) {
+ Report.error (node_reference.source_reference, "internal error: unknown type parameter %s".printf (generic_type.type_parameter.name));
+ node_reference.error = true;
+ }
return new InvalidType ();
}