LCOV - code coverage report
Current view: top level - vala - valagenerictype.vala (source / functions) Coverage Total Hit
Test: vala 0.57.0.298-a8cae1 Lines: 100.0 % 44 44
Test Date: 2024-04-25 11:34:36 Functions: - 0 0

            Line data    Source code
       1              : /* valagenerictype.vala
       2              :  *
       3              :  * Copyright (C) 2008-2009  Jürg Billeter
       4              :  *
       5              :  * This library is free software; you can redistribute it and/or
       6              :  * modify it under the terms of the GNU Lesser General Public
       7              :  * License as published by the Free Software Foundation; either
       8              :  * version 2.1 of the License, or (at your option) any later version.
       9              : 
      10              :  * This library is distributed in the hope that it will be useful,
      11              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      12              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13              :  * Lesser General Public License for more details.
      14              : 
      15              :  * You should have received a copy of the GNU Lesser General Public
      16              :  * License along with this library; if not, write to the Free Software
      17              :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
      18              :  *
      19              :  * Author:
      20              :  *      Jürg Billeter <j@bitron.ch>
      21              :  */
      22              : 
      23              : using GLib;
      24              : 
      25              : /**
      26              :  * The type of a generic type parameter.
      27              :  */
      28      2266328 : public class Vala.GenericType : DataType {
      29              :         /**
      30              :          * The referred generic type parameter.
      31              :          */
      32              :         public weak TypeParameter type_parameter {
      33      1173706 :                 get {
      34      1173706 :                         return (TypeParameter) type_symbol;
      35              :                 }
      36              :         }
      37              : 
      38      2264791 :         GenericDupField? dup_field;
      39      2264791 :         GenericDestroyField? destroy_field;
      40              : 
      41      6794373 :         public GenericType (TypeParameter type_parameter, SourceReference? source_reference = null) {
      42      2264791 :                 base.with_symbol (type_parameter, source_reference);
      43              :         }
      44              : 
      45       760488 :         public override DataType copy () {
      46       760488 :                 var result = new GenericType (type_parameter);
      47       760488 :                 result.source_reference = source_reference;
      48       760488 :                 result.value_owned = value_owned;
      49       760488 :                 result.nullable = nullable;
      50       760488 :                 result.floating_reference = floating_reference;
      51              : 
      52       760488 :                 return result;
      53              :         }
      54              : 
      55       132514 :         public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
      56       132514 :                 var result = this.copy ();
      57              : 
      58       132514 :                 if (derived_instance_type == null && method_type_arguments == null) {
      59              :                         return result;
      60              :                 }
      61              : 
      62       132514 :                 result = SemanticAnalyzer.get_actual_type (derived_instance_type, method_type_arguments, (GenericType) result, node_reference);
      63       132514 :                 if (!result.is_non_null_simple_type ()) {
      64       131715 :                         result.nullable = result.nullable || nullable;
      65              :                 }
      66              : 
      67              :                 return result;
      68              :         }
      69              : 
      70          101 :         public override DataType? infer_type_argument (TypeParameter type_param, DataType value_type) {
      71          101 :                 if (type_parameter == type_param) {
      72           96 :                         var ret = value_type.copy ();
      73           96 :                         ret.value_owned = true;
      74           96 :                         return ret;
      75              :                 }
      76              : 
      77          101 :                 return null;
      78              :         }
      79              : 
      80           37 :         public override string to_qualified_string (Scope? scope = null) {
      81           37 :                 return "%s%s".printf (type_parameter.name, nullable ? "?" : "");
      82              :         }
      83              : 
      84           32 :         public override Symbol? get_member (string member_name) {
      85           32 :                 if (member_name == "dup") {
      86           32 :                         return get_dup_field ();
      87           16 :                 } else if (member_name == "destroy") {
      88           32 :                         return get_destroy_field ();
      89              :                 }
      90           32 :                 return null;
      91              :         }
      92              : 
      93           16 :         unowned GenericDupField get_dup_field () {
      94           16 :                 if (dup_field == null) {
      95           16 :                         dup_field = new GenericDupField (source_reference);
      96           16 :                         dup_field.access = SymbolAccessibility.PUBLIC;
      97              :                 }
      98           16 :                 return dup_field;
      99              :         }
     100              : 
     101           16 :         unowned GenericDestroyField get_destroy_field () {
     102           16 :                 if (destroy_field == null) {
     103           16 :                         destroy_field = new GenericDestroyField (source_reference);
     104           16 :                         destroy_field.access = SymbolAccessibility.PUBLIC;
     105              :                 }
     106           16 :                 return destroy_field;
     107              :         }
     108              : }
        

Generated by: LCOV version 2.0-1