From: Rico Tzschichholz Date: Sat, 1 Dec 2018 13:13:31 +0000 (+0100) Subject: vala: Allow get_actual_type() to be used for expected failures X-Git-Tag: 0.43.4~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=25f8cafdb24ec89a37f6eca10d00e414b727975e;p=thirdparty%2Fvala.git 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. --- 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? method_type_arguments, CodeNode node_reference) { + public override DataType get_actual_type (DataType? derived_instance_type, List? 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? method_type_arguments, CodeNode node_reference) { + public virtual DataType get_actual_type (DataType? derived_instance_type, List? 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? method_type_arguments, CodeNode node_reference) { + public override DataType get_actual_type (DataType? derived_instance_type, List? 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? method_type_arguments, CodeNode node_reference) { + public override DataType get_actual_type (DataType? derived_instance_type, List? 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? method_type_arguments, GenericType generic_type, CodeNode node_reference) { + public static DataType get_actual_type (DataType? derived_instance_type, List? 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 (); }