1 # coding: utf-8
2 # frozen_string_literal: true
3
4
5
6 module Umu
7
8 module Environment
9
10 class Preference < Abstraction::Record
11 attr_reader :interactive_mode
12 attr_reader :trace_mode
13 attr_reader :lex_trace_mode
14 attr_reader :dump_mode
15 attr_reader :no_prelude
16
17
18 def self.deconstruct_keys
19 {
20 interactive_mode: ::Object,
21 trace_mode: ::Object,
22 lex_trace_mode: ::Object,
23 dump_mode: ::Object,
24 no_prelude: ::Object
25 }.freeze
26 end
27
28
29 def initialize(
30 interactive_mode,
31 trace_mode,
32 lex_trace_mode,
33 dump_mode,
34 no_prelude
35 )
36 ASSERT.bool interactive_mode
37 ASSERT.bool trace_mode
38 ASSERT.bool lex_trace_mode
39 ASSERT.bool dump_mode
40 ASSERT.bool no_prelude
41
42 @interactive_mode = interactive_mode
43 @trace_mode = trace_mode
44 @lex_trace_mode = lex_trace_mode
45 @dump_mode = dump_mode
46 @no_prelude = no_prelude
47 end
48
49
50 def interactive_mode?
51 self.interactive_mode
52 end
53
54
55 def trace_mode?
56 self.trace_mode
57 end
58
59
60 def lex_trace_mode?
61 self.lex_trace_mode
62 end
63
64
65 def dump_mode?
66 self.dump_mode
67 end
68
69
70 def any_trace?
71 [
72 self.trace_mode,
73 self.lex_trace_mode,
74 self.dump_mode
75 ].any?
76 end
77
78
79 def no_prelude?
80 self.no_prelude
81 end
82
83
84 def update_interactive_mode(bool)
85 ASSERT.bool bool
86
87 self.update(interactive_mode: bool)
88 end
89
90
91 def update_trace_mode(bool)
92 ASSERT.bool bool
93
94 self.update(trace_mode: bool)
95 end
96
97
98 def update_lex_trace_mode(bool)
99 ASSERT.bool bool
100
101 self.update(lex_trace_mode: bool)
102 end
103
104
105 def update_dump_mode(bool)
106 ASSERT.bool bool
107
108 self.update(dump_mode: bool)
109 end
110
111
112 def update_no_prelude(bool)
113 ASSERT.bool bool
114
115 self.update(no_prelude: bool)
116 end
117 end
118
119
120 module_function
121
122 def make_preference(
123 interactive_mode,
124 trace_mode,
125 lex_trace_mode,
126 dump_mode,
127 no_prelude
128 )
129 ASSERT.bool interactive_mode
130 ASSERT.bool trace_mode
131 ASSERT.bool lex_trace_mode
132 ASSERT.bool dump_mode
133 ASSERT.bool no_prelude
134
135 Preference.new(
136 interactive_mode,
137 trace_mode,
138 lex_trace_mode,
139 dump_mode,
140 no_prelude
141 ).freeze
142 end
143
144
145 INITIAL_PREFERENCE = make_preference(
146 false, # interactive_mode
147 false, # trace_mode
148 false, # lex_trace_mode
149 false, # dump_mode
150 false # no_prelude
151 )
152
153 end # Umu::Environment
154
155 end # Umu