-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathПредметМодуля.ц
401 lines (359 loc) · 41.7 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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
взяти визначення МаМа;
секція МаМа {
місцева дія створити_структуру_модуля(М: адреса<Машина>): адреса<ПредметСтруктури> {
ціль предмет_структури = виділити_предмет_структури(М, М.БН.С.Модуль, М.предмет_структури_предмет);
вернути предмет_структури;
}
місцева дія виділити_предмет_модуля(М: адреса<Машина>, назва: адреса<Назва>): адреса<ПредметМодуля> {
ціль предмет_модуля = виділити_предмет<ПредметМодуля>(М, М.предмет_структури_Модуль);
предмет_модуля.властивості = зробити_реєстр<адреса<Назва>, адреса<Предмет>>(М, перевірити_чи_назви_рівні);
предмет_модуля.назва = назва;
предмет_модуля.назва_паку = пусто;
вернути предмет_модуля;
}
місцева дія звільнити_предмет_модуля(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>) {
звільнити_значення_реєстру<адреса<Назва>, адреса<Предмет>>(М, предмет_модуля.властивості);
звільнити(М, предмет_модуля.назва_паку);
звільнити(М, предмет_модуля);
}
місцева дія предмет_модуля_виконати(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, предмет_я: адреса<Предмет>, аргументи: адреса<Накопичувач<адреса<Предмет>>>, іменовані_аргументи: адреса<Реєстр<адреса<Назва>, адреса<Предмет>>>): предмет_або_стан_падіння {
ціль предмет_чародії_виконати = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_виконати);
якщо предмет_чародії_виконати == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_виконати, предмет_модуля як адреса<Предмет>);
}
вернути предмет_виконати(предмет_чародії_виконати, М, предмет_я, аргументи, іменовані_аргументи);
}
місцева дія предмет_модуля_отримати_властивість(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, назва: адреса<Назва>): предмет_або_стан_падіння {
ціль елемент_реєстру = отримати_з_реєстру<адреса<Назва>, адреса<Предмет>>(М, предмет_модуля.властивості::адреса, назва);
якщо елемент_реєстру != пусто {
вернути елемент_реєстру.значення;
}
змінна ціль тип = предмет_модуля.тип;
поки тип != пусто {
ціль елемент_реєстру_методів = отримати_з_реєстру<адреса<Назва>, адреса<Предмет>>(М, тип.методи::адреса, назва);
якщо елемент_реєстру_методів != пусто {
вернути елемент_реєстру_методів.значення;
}
тип = тип.предок;
}
вернути пусто;
}
місцева дія предмет_модуля_змінити_властивість(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, назва: адреса<Назва>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
змінити_в_реєстрі<адреса<Назва>, адреса<Предмет>>(М, предмет_модуля.властивості::адреса, назва, аргумент);
вернути пусто;
}
місцева дія предмет_модуля_видалити_властивість(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, назва: адреса<Назва>): предмет_або_стан_падіння {
якщо видалити_з_реєстру<адреса<Назва>, адреса<Предмет>>(М, предмет_модуля.властивості::адреса, назва) {
вернути М.предмет_логічного_так як адреса<Предмет>;
}
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_модуля_виконати_властивість(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, назва_властивості: адреса<Назва>, аргументи: адреса<Накопичувач<адреса<Предмет>>>, іменовані_аргументи: адреса<Реєстр<адреса<Назва>, адреса<Предмет>>>): предмет_або_стан_падіння {
ціль предмет_властивості = предмет_модуля_отримати_властивість(предмет_модуля, М, назва_властивості);
якщо М.стан_падіння == позитивне(так) {
вернути предмет_властивості;
}
вернути предмет_виконати(предмет_властивості, М, предмет_модуля як адреса<Предмет>, аргументи, іменовані_аргументи);
}
місцева дія предмет_модуля_отримати_елемент(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, ключ: адреса<Предмет>): предмет_або_стан_падіння {
ціль аргументи = виділити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи, ключ);
ціль результат = предмет_модуля_виконати_властивість(предмет_модуля, М, М.БН.С.чародія_отримати_елемент, аргументи, пусто);
звільнити_накопичувач<адреса<Предмет>>(М, аргументи);
вернути результат;
}
місцева дія предмет_модуля_змінити_елемент(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, ключ: адреса<Предмет>, значення: адреса<Предмет>): предмет_або_стан_падіння {
ціль аргументи = виділити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи, ключ);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи, значення);
ціль результат = предмет_модуля_виконати_властивість(предмет_модуля, М, М.БН.С.чародія_змінити_елемент, аргументи, пусто);
звільнити_накопичувач<адреса<Предмет>>(М, аргументи);
вернути результат;
}
місцева дія предмет_модуля_видалити_елемент(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, ключ: адреса<Предмет>): предмет_або_стан_падіння {
ціль аргументи = виділити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи, ключ);
ціль результат = предмет_модуля_виконати_властивість(предмет_модуля, М, М.БН.С.чародія_видалити_елемент, аргументи, пусто);
звільнити_накопичувач<адреса<Предмет>>(М, аргументи);
вернути результат;
}
місцева дія предмет_модуля_отримати_перебір(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
ціль результат = предмет_модуля_виконати_властивість(предмет_модуля, М, М.БН.С.чародія_перебір, пусто, пусто);
вернути результат;
}
місцева дія предмет_модуля_додати(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_додати);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_додати, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_відняти(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_відняти);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_відняти, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_помножити(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_помножити);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_помножити, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_поділити(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_поділити);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_поділити, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_отримати_остачу_ділення(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_остача);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_остача, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_отримати_частку_ділення(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_неповна_частка);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_неповна_частка, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_піднести_до_степеня(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_степінь);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_степінь, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_зсунути_вліво(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_вліво);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_вліво, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_зсунути_вправо(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_вправо);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_вправо, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_зсунути_вправо_зі_заповненням(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_вправо_зі_заповненням);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_вправо_зі_заповненням, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_двійкове_і(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_двійкове_і);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_двійкове_і, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_двійкове_або(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_двійкове_або);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_двійкове_і, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_двійкове_виключне_або(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_двійкове_виключне_або);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_двійкове_виключне_або, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_двійкове_не(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_двійкове_не);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_двійкове_не, предмет_модуля як адреса<Предмет>);
}
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, пусто, пусто);
вернути результат_виконання;
}
місцева дія предмет_модуля_більше(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_більше);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_більше, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_менше(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_менше);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_менше, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_рівно(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
якщо перевірити_чи_предмет_модуля_рівно(предмет_модуля, М, аргумент) {
вернути М.предмет_логічного_так як адреса<Предмет>;
}
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_модуля_містить(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_містить);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_містить, предмет_модуля як адреса<Предмет>);
}
ціль аргументи = зробити_накопичувач<адреса<Предмет>>(М);
покласти_в_накопичувач<адреса<Предмет>>(М, аргументи::адреса, аргумент);
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, аргументи::адреса, пусто);
звільнити_значення_накопичувача<адреса<Предмет>>(М, аргументи);
вернути результат_виконання;
}
місцева дія предмет_модуля_є(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): предмет_або_стан_падіння {
якщо аргумент == пусто {
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
якщо аргумент.тип != М.предмет_структури_Структура {
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
якщо перевірити_чи_предмет_модуля_є(предмет_модуля, М, аргумент як адреса<ПредметСтруктури>) {
вернути М.предмет_логічного_так як адреса<Предмет>;
}
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_модуля_відʼємне(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_відʼємне);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_відʼємне, предмет_модуля як адреса<Предмет>);
}
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, пусто, пусто);
вернути результат_виконання;
}
місцева дія предмет_модуля_числове(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_число);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_число, предмет_модуля як адреса<Предмет>);
}
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, пусто, пусто);
вернути результат_виконання;
}
місцева дія предмет_модуля_заперечити(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
вернути М.предмет_логічного_ні як адреса<Предмет>;
}
місцева дія предмет_модуля_збільшити(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_збільшити);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_збільшити, предмет_модуля як адреса<Предмет>);
}
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, пусто, пусто);
вернути результат_виконання;
}
місцева дія предмет_модуля_зменшити(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>): предмет_або_стан_падіння {
ціль предмет_чародії = предмет_модуля_отримати_властивість(предмет_модуля, М, М.БН.С.чародія_зменшити);
якщо предмет_чародії == пусто {
увімкнути_стан_падіння(М, пусто);
вернути виділити_предмет_тексту_помилки_неможливо_виконати_чародію_предмета(М, М.БН.С.чародія_зменшити, предмет_модуля як адреса<Предмет>);
}
ціль результат_виконання = предмет_виконати(предмет_чародії, М, предмет_модуля як адреса<Предмет>, пусто, пусто);
вернути результат_виконання;
}
місцева дія перевірити_чи_предмет_модуля_рівно(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, аргумент: адреса<Предмет>): логічне {
ціль предмет = предмет_модуля як адреса<Предмет>;
якщо предмет == аргумент {
вернути так;
}
вернути ні;
}
місцева дія перевірити_чи_предмет_модуля_є(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>): логічне {
якщо предмет_структури == М.предмет_структури_Модуль {
вернути так;
}
вернути ні;
}
місцева дія надрукувати_предмет_модуля_в_накопичувач_ю8(предмет_модуля: адреса<ПредметМодуля>, М: адреса<Машина>, накопичувач_ю8: адреса<НакопичувачЮ8>, глибина: позитивне) {
покласти_ю8_в_накопичувач_ю8(М, накопичувач_ю8, ю8"<модуль>");
}
}