]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Allow get_actual_type() to be used for expected failures
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 1 Dec 2018 13:13:31 +0000 (14:13 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 19 Dec 2018 23:51:37 +0000 (00:51 +0100)
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.

vala/valaarraytype.vala
vala/valadatatype.vala
vala/valagenerictype.vala
vala/valapointertype.vala
vala/valasemanticanalyzer.vala

index 7f4b45dda0d79d5588ac244fc151cd5e73d691b5..8265a8027055c1fa4fa30148b57b14bbacf0b069 100644 (file)
@@ -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) {
index 85d8fb87bcde86268a6b7d837f239ccd5393f3a3..51594c7a9289e3e7f851411ede0ba11f14d77bfd 100644 (file)
@@ -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) {
index 0a229a43ebd206e0cd183d5024532105054609ee..e5e1a50a83991d1b93ee4d452195942d47329452 100644 (file)
@@ -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) {
index 6e0d799cf5fa08f73554e0796c08896cc4928e2b..01d759edad892a1671bb7d81bb6eb4896db3e5d6 100644 (file)
@@ -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) {
index 139103b895d5bbd088c95deae4aa500ff690dd4a..485ab222dad6082b84bf73041bc82cb43d4e8509 100644 (file)
@@ -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 ();
                        }