xref: /llvm-project/flang/lib/Common/default-kinds.cpp (revision d1d952c206efc3a651270c69331b180330ac3efc)
1 //===-- lib/Common/default-kinds.cpp --------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "flang/Common/default-kinds.h"
10 #include "flang/Common/idioms.h"
11 
12 namespace Fortran::common {
13 
14 IntrinsicTypeDefaultKinds::IntrinsicTypeDefaultKinds() {}
15 
16 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_defaultIntegerKind(
17     int k) {
18   defaultIntegerKind_ = k;
19   return *this;
20 }
21 
22 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_subscriptIntegerKind(
23     int k) {
24   subscriptIntegerKind_ = k;
25   return *this;
26 }
27 
28 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_sizeIntegerKind(
29     int k) {
30   sizeIntegerKind_ = k;
31   return *this;
32 }
33 
34 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_defaultRealKind(
35     int k) {
36   defaultRealKind_ = k;
37   return *this;
38 }
39 
40 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_doublePrecisionKind(
41     int k) {
42   doublePrecisionKind_ = k;
43   return *this;
44 }
45 
46 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_quadPrecisionKind(
47     int k) {
48   quadPrecisionKind_ = k;
49   return *this;
50 }
51 
52 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_defaultCharacterKind(
53     int k) {
54   defaultCharacterKind_ = k;
55   return *this;
56 }
57 
58 IntrinsicTypeDefaultKinds &IntrinsicTypeDefaultKinds::set_defaultLogicalKind(
59     int k) {
60   defaultLogicalKind_ = k;
61   return *this;
62 }
63 
64 int IntrinsicTypeDefaultKinds::GetDefaultKind(TypeCategory category) const {
65   switch (category) {
66   case TypeCategory::Integer:
67   case TypeCategory::Unsigned:
68     return defaultIntegerKind_;
69   case TypeCategory::Real:
70   case TypeCategory::Complex:
71     return defaultRealKind_;
72   case TypeCategory::Character:
73     return defaultCharacterKind_;
74   case TypeCategory::Logical:
75     return defaultLogicalKind_;
76   default:
77     CRASH_NO_CASE;
78     return 0;
79   }
80 }
81 } // namespace Fortran::common
82