-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathПредметНативноїДії.ц
246 lines (206 loc) · 24 KB
/
ПредметНативноїДії.ц
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
взяти визначення МаМа;
секція МаМа {
місцева дія виділити_предмет_нативної_дії(М: адреса<Машина>, назва: адреса<Назва>, нативна_дія: НативнаДія, дані: адреса, відклик_перед_звільненням: ВідкликПередЗвільненнямПредметаНативноїДії): адреса<ПредметНативноїДії> {
ціль предмет_нативної_дії = виділити_предмет<ПредметНативноїДії>(М, М.предмет_структури_НативнаДія);
предмет_нативної_дії.властивості = зробити_реєстр<адреса<Назва>, адреса<Предмет>>(М, перевірити_чи_назви_рівні);
предмет_нативної_дії.назва = назва;
предмет_нативної_дії.нативна_дія = нативна_дія;
предмет_нативної_дії.дані = дані;
предмет_нативної_дії.відклик_перед_звільненням = відклик_перед_звільненням;
вернути предмет_нативної_дії;
}
місцева дія звільнити_предмет_нативної_дії(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>) {
якщо предмет_нативної_дії.відклик_перед_звільненням != пусто {
предмет_нативної_дії.відклик_перед_звільненням(предмет_нативної_дії, М);
}
звільнити_значення_реєстру<адреса<Назва>, адреса<Предмет>>(М, предмет_нативної_дії.властивості);
звільнити(М, предмет_нативної_дії);
}
місцева дія предмет_нативної_дії_виконати(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, предмет_я: адреса<Предмет>, аргументи: адреса<Накопичувач<адреса<Предмет>>>, іменовані_аргументи: адреса<Реєстр<адреса<Назва>, адреса<Предмет>>>): предмет_або_стан_падіння {
вернути предмет_нативної_дії.нативна_дія(предмет_нативної_дії, М, предмет_я, аргументи, іменовані_аргументи);
}
місцева дія предмет_нативної_дії_отримати_властивість(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, назва: адреса<Назва>): предмет_або_стан_падіння {
якщо назва == М.БН.С.назва {
якщо предмет_нативної_дії.назва == пусто {
вернути пусто;
}
вернути виділити_предмет_з_назви(М, предмет_нативної_дії.назва);
}
ціль елемент_реєстру = отримати_з_реєстру<адреса<Назва>, адреса<Предмет>>(М, предмет_нативної_дії.властивості::адреса, назва);
якщо елемент_реєстру != пусто {
вернути елемент_реєстру.значення;
}
змінна ціль тип = предмет_нативної_дії.тип;
поки тип != пусто {
ціль елемент_реєстру_методів = отримати_з_реєстру<адреса<Назва>, адреса<Предмет>>(М, тип.методи::адреса, назва);
якщо елемент_реєстру_методів != пусто {
вернути елемент_реєстру_методів.значення;
}
тип = тип.предок;
}
вернути пусто;
}
місцева дія предмет_нативної_дії_змінити_властивість(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, назва: адреса<Назва>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
якщо назва == М.БН.С.назва {
вернути пусто;
}
якщо перевірити_чи_назва_чародія(М, назва) {
вернути пусто;
}
змінити_в_реєстрі<адреса<Назва>, адреса<Предмет>>(М, предмет_нативної_дії.властивості::адреса, назва, аргумент);
вернути пусто;
}
місцева дія предмет_нативної_дії_видалити_властивість(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, назва: адреса<Назва>): предмет_або_стан_падіння {
якщо видалити_з_реєстру<адреса<Назва>, адреса<Предмет>>(М, предмет_нативної_дії.властивості::адреса, назва) {
вернути М.предмет_логічного_так як адреса<Предмет>;
}
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_виконати_властивість(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, назва_властивості: адреса<Назва>, аргументи: адреса<Накопичувач<адреса<Предмет>>>, іменовані_аргументи: адреса<Реєстр<адреса<Назва>, адреса<Предмет>>>): предмет_або_стан_падіння {
ціль предмет_властивості = предмет_нативної_дії_отримати_властивість(предмет_нативної_дії, М, назва_властивості);
якщо М.стан_падіння == позитивне(так) {
вернути предмет_властивості;
}
вернути предмет_виконати(предмет_властивості, М, предмет_нативної_дії як адреса<Предмет>, аргументи, іменовані_аргументи);
}
місцева дія предмет_нативної_дії_отримати_елемент(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, ключ: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо отримати елемент з дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_змінити_елемент(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, ключ: адреса<Предмет>, значення: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо змінити елемент в дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_видалити_елемент(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, ключ: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо видалити елемент з дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_отримати_перебір(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо отримати перебір з дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_додати(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати додавання для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_відняти(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати віднімання для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_помножити(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати множення для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_поділити(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати ділення для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_отримати_остачу_ділення(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати отримання остачі ділення для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_отримати_частку_ділення(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати отримання частки ділення для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_піднести_до_степеня(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати піднесення до степеня для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_зсунути_вліво(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати зсув вліво для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_зсунути_вправо(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати зсув вправо для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_зсунути_вправо_зі_заповненням(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати зсув вправо зі заповненням для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_двійкове_і(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати двійкове І для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_двійкове_або(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати двійкове АБО для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_двійкове_виключне_або(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати двійкове ВИКЛЮЧНЕ АБО для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_двійкове_не(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати двійкове НЕ для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_більше(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати перевірку на більшість для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_менше(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати перевірку на меншість для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_рівно(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
якщо перевірити_чи_предмет_нативної_дії_рівно(предмет_нативної_дії, М, аргумент) {
вернути М.предмет_логічного_так як адреса<Предмет>;
}
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_містить(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати перевірку на місткість для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_є(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
якщо аргумент == пусто {
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
якщо аргумент.тип != М.предмет_структури_Структура {
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
якщо перевірити_чи_предмет_нативної_дії_є(предмет_нативної_дії, М, аргумент як адреса<ПредметСтруктури>) {
вернути М.предмет_логічного_так як адреса<Предмет>;
}
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_відʼємне(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати відʼємне для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_числове(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати числове для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_заперечити(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_збільшити(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати збільшення для дії") як адреса<Предмет>;
}
місцева дія предмет_нативної_дії_зменшити(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>): предмет_або_стан_падіння {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_з_ю8(М, ю8"Неможливо виконати зменшення для дії") як адреса<Предмет>;
}
місцева дія перевірити_чи_предмет_нативної_дії_рівно(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, аргумент: адреса<Предмет>): логічне {
ціль предмет = предмет_нативної_дії як адреса<Предмет>;
якщо предмет == аргумент {
вернути так;
}
вернути ні;
}
місцева дія перевірити_чи_предмет_нативної_дії_є(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>): логічне {
якщо предмет_структури == М.предмет_структури_Дія {
вернути так;
}
якщо предмет_структури == М.предмет_структури_НативнаДія {
вернути так;
}
вернути ні;
}
місцева дія надрукувати_предмет_нативної_дії_в_накопичувач_ю8(предмет_нативної_дії: адреса<ПредметНативноїДії>, М: адреса<Машина>, накопичувач_ю8: адреса<НакопичувачЮ8>, глибина: позитивне) {
покласти_ю8_в_накопичувач_ю8(М, накопичувач_ю8, ю8"<нативна дія>");
}
}