hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

class.ha (1570B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 // Returns true if the given type is a signed type.
      5 export fn is_signed(ty: const *_type) bool = {
      6 	match (ty.repr) {
      7 	case let al: alias =>
      8 		return is_signed(al.secondary as const *_type);
      9 	case let bi: builtin =>
     10 		switch (bi) {
     11 		case builtin::F32, builtin::F64, builtin::I16, builtin::I32,
     12 		builtin::I64, builtin::I8, builtin::INT =>
     13 			return true;
     14 		case =>
     15 			return false;
     16 		};
     17 	case let e: _enum =>
     18 		switch (e.storage) {
     19 		case builtin::I16, builtin::I32, builtin::I64, builtin::I8,
     20 		builtin::INT =>
     21 			return true;
     22 		case =>
     23 			return false;
     24 		};
     25 	case =>
     26 		return false;
     27 	};
     28 };
     29 
     30 // Returns true if the given type is a floating-point type.
     31 export fn is_float(ty: const *_type) bool = {
     32 	match (ty.repr) {
     33 	case let al: alias =>
     34 		return is_float(al.secondary as const *_type);
     35 	case let bi: builtin =>
     36 		switch (bi) {
     37 		case builtin::F32, builtin::F64 =>
     38 			return true;
     39 		case =>
     40 			return false;
     41 		};
     42 	case =>
     43 		return false;
     44 	};
     45 };
     46 
     47 // Returns true if the given type is an integer type.
     48 export fn is_integer(ty: const *_type) bool = {
     49 	match (ty.repr) {
     50 	case let al: alias =>
     51 		return is_integer(al.secondary as const *_type);
     52 	case let bi: builtin =>
     53 		switch (bi) {
     54 			case builtin::INT, builtin::UINT, builtin::I16,
     55 			builtin::I32, builtin::I64, builtin::I8, builtin::U16,
     56 			builtin::U32, builtin::U64, builtin::U8,
     57 			builtin::SIZE, builtin::UINTPTR =>
     58 				return true;
     59 			case =>
     60 				return false;
     61 		};
     62 	case _enum =>
     63 		return true;
     64 	case =>
     65 		return false;
     66 	};
     67 };