Commit aa4d2cf
committed
Introduce immutable objects
Allow to 'freeze' objects which will raise a runtime error on
trying to modify them.
Immutability flags is applied to SQObject, which is a handle
referencing an actual container, just like const reference in C++.
So the object possibly can be mutated by the external code (again
like in C++)
The immutability is propagated to nested fields during get operation,
so if table t={w={x=123}} is immutable, t.w is also immutable.
A new _flags field was added added to SQObject.
When SQInteger is 64-bit (which in case of Dagor engine is true
both on 32 and 64 bit platform) it doesn't affect size of SQObject
struct.
On 32 bit platform with 32-bit SQInteger it currently increases
struct size from 8 to 12 bytes. If needed _flags may be packed
together with _type field (since together they need 28+1 bits),
or alternatively NaN tagging may be used.
Squirrel API added:
freeze(object) - make a immutable object handle
getobjflags(object) - return object flags
Also SQOBJ_FLAG_IMMUTABLE was added to const table1 parent 2f70d87 commit aa4d2cf
9 files changed
Lines changed: 188 additions & 28 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
2 | 9 | | |
3 | 10 | | |
4 | 11 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
| 85 | + | |
| 86 | + | |
85 | 87 | | |
86 | 88 | | |
87 | 89 | | |
| |||
127 | 129 | | |
128 | 130 | | |
129 | 131 | | |
| 132 | + | |
| 133 | + | |
130 | 134 | | |
131 | 135 | | |
132 | 136 | | |
| |||
157 | 161 | | |
158 | 162 | | |
159 | 163 | | |
| 164 | + | |
160 | 165 | | |
161 | 166 | | |
162 | 167 | | |
| |||
325 | 330 | | |
326 | 331 | | |
327 | 332 | | |
| 333 | + | |
328 | 334 | | |
329 | 335 | | |
330 | 336 | | |
| |||
397 | 403 | | |
398 | 404 | | |
399 | 405 | | |
| 406 | + | |
400 | 407 | | |
401 | 408 | | |
402 | 409 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
145 | | - | |
| 145 | + | |
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
| |||
482 | 482 | | |
483 | 483 | | |
484 | 484 | | |
485 | | - | |
| 485 | + | |
486 | 486 | | |
487 | 487 | | |
488 | 488 | | |
| |||
529 | 529 | | |
530 | 530 | | |
531 | 531 | | |
532 | | - | |
| 532 | + | |
533 | 533 | | |
534 | 534 | | |
535 | 535 | | |
| |||
934 | 934 | | |
935 | 935 | | |
936 | 936 | | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
937 | 943 | | |
938 | 944 | | |
939 | 945 | | |
| |||
1028 | 1034 | | |
1029 | 1035 | | |
1030 | 1036 | | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
1031 | 1043 | | |
1032 | 1044 | | |
1033 | 1045 | | |
| |||
1168 | 1180 | | |
1169 | 1181 | | |
1170 | 1182 | | |
1171 | | - | |
| 1183 | + | |
1172 | 1184 | | |
1173 | 1185 | | |
1174 | 1186 | | |
| |||
1532 | 1544 | | |
1533 | 1545 | | |
1534 | 1546 | | |
1535 | | - | |
| 1547 | + | |
1536 | 1548 | | |
1537 | 1549 | | |
1538 | 1550 | | |
| |||
1611 | 1623 | | |
1612 | 1624 | | |
1613 | 1625 | | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
| 1636 | + | |
| 1637 | + | |
| 1638 | + | |
| 1639 | + | |
| 1640 | + | |
1614 | 1641 | | |
1615 | 1642 | | |
1616 | 1643 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
25 | 34 | | |
26 | 35 | | |
27 | 36 | | |
| |||
373 | 382 | | |
374 | 383 | | |
375 | 384 | | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
376 | 396 | | |
377 | 397 | | |
378 | 398 | | |
| |||
400 | 420 | | |
401 | 421 | | |
402 | 422 | | |
| 423 | + | |
| 424 | + | |
403 | 425 | | |
404 | 426 | | |
405 | 427 | | |
| |||
509 | 531 | | |
510 | 532 | | |
511 | 533 | | |
| 534 | + | |
512 | 535 | | |
513 | 536 | | |
514 | 537 | | |
| |||
524 | 547 | | |
525 | 548 | | |
526 | 549 | | |
| 550 | + | |
| 551 | + | |
527 | 552 | | |
528 | 553 | | |
529 | 554 | | |
| |||
545 | 570 | | |
546 | 571 | | |
547 | 572 | | |
| 573 | + | |
| 574 | + | |
548 | 575 | | |
549 | | - | |
550 | | - | |
| 576 | + | |
551 | 577 | | |
552 | 578 | | |
553 | 579 | | |
| |||
673 | 699 | | |
674 | 700 | | |
675 | 701 | | |
| 702 | + | |
| 703 | + | |
676 | 704 | | |
677 | 705 | | |
678 | 706 | | |
| |||
691 | 719 | | |
692 | 720 | | |
693 | 721 | | |
| 722 | + | |
| 723 | + | |
694 | 724 | | |
695 | 725 | | |
696 | 726 | | |
| |||
700 | 730 | | |
701 | 731 | | |
702 | 732 | | |
| 733 | + | |
703 | 734 | | |
704 | 735 | | |
705 | 736 | | |
| |||
942 | 973 | | |
943 | 974 | | |
944 | 975 | | |
| 976 | + | |
| 977 | + | |
945 | 978 | | |
946 | 979 | | |
947 | 980 | | |
| |||
955 | 988 | | |
956 | 989 | | |
957 | 990 | | |
| 991 | + | |
| 992 | + | |
958 | 993 | | |
959 | 994 | | |
960 | 995 | | |
| |||
969 | 1004 | | |
970 | 1005 | | |
971 | 1006 | | |
| 1007 | + | |
| 1008 | + | |
972 | 1009 | | |
973 | 1010 | | |
974 | 1011 | | |
975 | 1012 | | |
976 | 1013 | | |
| 1014 | + | |
| 1015 | + | |
977 | 1016 | | |
978 | 1017 | | |
979 | 1018 | | |
| |||
990 | 1029 | | |
991 | 1030 | | |
992 | 1031 | | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
993 | 1035 | | |
994 | 1036 | | |
995 | 1037 | | |
| |||
1001 | 1043 | | |
1002 | 1044 | | |
1003 | 1045 | | |
| 1046 | + | |
| 1047 | + | |
1004 | 1048 | | |
1005 | 1049 | | |
1006 | 1050 | | |
| |||
1015 | 1059 | | |
1016 | 1060 | | |
1017 | 1061 | | |
| 1062 | + | |
| 1063 | + | |
1018 | 1064 | | |
1019 | 1065 | | |
1020 | 1066 | | |
| |||
1079 | 1125 | | |
1080 | 1126 | | |
1081 | 1127 | | |
| 1128 | + | |
| 1129 | + | |
1082 | 1130 | | |
1083 | 1131 | | |
1084 | 1132 | | |
| |||
1299 | 1347 | | |
1300 | 1348 | | |
1301 | 1349 | | |
| 1350 | + | |
| 1351 | + | |
1302 | 1352 | | |
1303 | 1353 | | |
1304 | 1354 | | |
| |||
1346 | 1396 | | |
1347 | 1397 | | |
1348 | 1398 | | |
| 1399 | + | |
| 1400 | + | |
1349 | 1401 | | |
1350 | 1402 | | |
1351 | 1403 | | |
| |||
1380 | 1432 | | |
1381 | 1433 | | |
1382 | 1434 | | |
1383 | | - | |
1384 | 1435 | | |
1385 | 1436 | | |
1386 | 1437 | | |
| |||
0 commit comments