forked from Matway/mpl-sl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobjectTools.mpl
executable file
·64 lines (52 loc) · 1.68 KB
/
objectTools.mpl
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
"objectTools" module
"control" useModule
fieldIsRef: [drop drop FALSE];
fieldIsRef: [index:object:;; index @object @ Ref index @object ! TRUE] [drop drop TRUE] pfunc;
fieldIsref: [isConst] [0 .ERROR_CAN_ONLY_HANDLE_MUTABLE_OBJECTS] pfunc;
unwrapField: [
objectIsMoved: isMoved;
object:;
index:;
index @object fieldIsRef [index @object @] [index @object @ objectIsMoved moveIf copy] uif
];
unwrapFields: [
object:;
@object fieldCount [i @object unwrapField] times
];
insertField: [
insertField_objectIsMoved: isMoved;
insertField_object:;
insertField_name:;
insertField_index:;
insertField_wrappedValue:;
insertField_loopIndex: 0 static;
insertField_uloopBody: [
insertField_index insertField_loopIndex = [
0 static @insertField_wrappedValue unwrapField insertField_name def
] [] uif
insertField_loopIndex @insertField_object fieldCount < [
insertField_loopIndex @insertField_object unwrapField @insertField_object insertField_loopIndex fieldName def
insertField_loopIndex 1 static + !insertField_loopIndex
@insertField_uloopBody ucall
] [
] uif
];
{@insertField_uloopBody ucall}
];
removeField: [
removeField_objectIsMoved: isMoved;
removeField_object:;
removeField_index:;
removeField_loopIndex: 0;
removeField_uloopBody: [
removeField_loopIndex @removeField_object fieldCount < [
removeField_index removeField_loopIndex = ~ [
removeField_loopIndex @removeField_object unwrapField @removeField_object removeField_loopIndex fieldName def
] [] uif
removeField_loopIndex 1 + !removeField_loopIndex
@removeField_uloopBody ucall
] [
] uif
];
{@removeField_uloopBody ucall}
];