#include "M3Runtime.h" typedef struct { int tc; char* str; int len; } TXT; PRIVATE TXT txt1 = { 3, "Duplicate key while expanding Table?", 37}; #line 32 ".ROOT/.boots/corelib/Interfaces/List.i3" #define t4 ADDRESS #define t11 ADDRESS #define t31 void #define TC11 TC_REFANY IMPORT TYPE TC_REFANY; IMPORT char VS_REFANY__4b8748e831fc107a; #line 33 typedef struct { t11 _first; t4 _tail; } t29; #line 32 #define TC4 TC_List__T IMPORT TYPE TC_List__T; #line 32 IMPORT char VS_List__T__c661f0b12f626d56; #line 21 "IntTable.m3" #define t5 ADDRESS typedef int t9; typedef struct { t5 _nextEntry; t9 _key; t11 _value; } t19; #line 21 PRIVATE void t5_MapProc (); PRIVATE void t5_PrintProc (); PRIVATE typecell t5_TC; PRIVATE typecell t5_TC_init = {0, 0, 0, 0, 0, t5_MapProc, #line 21 12, 0, NIL, 0, 0, (PROC)NIL, (PROC)NIL, t5_PrintProc, "", 451552532, 695804211}; PRIVATE TYPE TC5 = &t5_TC; #line 13 "./IntTable.i3" #define t6 ADDRESS #define TC6 TC_IntTable__T IMPORT TYPE TC_IntTable__T; #line 13 IMPORT char VS_IntTable__T__e38bb59132b51757; #define t6_MapProc TC_IntTable__T->mapProc #define t8 ADDRESS PRIVATE void t8_PrintProc (); #line 336 "IntTable.m3" PRIVATE typecell t8_TC; PRIVATE typecell t8_TC_init = {0, 0, 0, 0, 0, (PROC)NIL, 4, 0, NIL, 0, 0, (PROC)NIL, (PROC)NIL, t8_PrintProc, #line 336 "", -280641975, 792733071}; PRIVATE TYPE TC8 = &t8_TC; #line 27 #define t15 ADDRESS typedef struct { #line 244 ".ROOT/.boots/corelib/Interfaces/List.i3" char* elts; int size[1]; } t20; #line 27 "IntTable.m3" #define t18 t20 PRIVATE void t15_MapProc (); #line 27 PRIVATE void t15_PrintProc (); PRIVATE typecell t15_TC; PRIVATE typecell t15_TC_init = {0, 0, 0, 0, 0, t15_MapProc, -2, 0, NIL, 1, 4, (PROC)NIL, (PROC)NIL, t15_PrintProc, #line 27 "", 1104281773, 740248854}; PRIVATE TYPE TC15 = &t15_TC; #define t16 ADDRESS typedef int t14; #line 30 typedef struct { t15 _buckets; t14 _logSize; t14 _entries; t14 _nonEmptyBuckets; t14 _maxChainLength; } t17; PRIVATE void t16_MapProc (); PRIVATE void t16_PrintProc (); PRIVATE typecell t16_TC; PRIVATE typecell t16_TC_init = {0, 0, 0, 0, 0, t16_MapProc, #line 36 20, 0, NIL, 0, 0, (PROC)NIL, (PROC)NIL, t16_PrintProc, "IntTable v1.0", 1780848482, 902649183}; PRIVATE TYPE TC16 = &t16_TC; #line 248 ".ROOT/.boots/corelib/Interfaces/List.i3" #define t23 ADDRESS #define t24 t20 PRIVATE void t23_MapProc (); #line 248 PRIVATE void t23_PrintProc (); PRIVATE typecell t23_TC; PRIVATE typecell t23_TC_init = {0, 0, 0, 0, 0, t23_MapProc, -2, 0, NIL, 1, 4, (PROC)NIL, (PROC)NIL, t23_PrintProc, #line 248 "", -38782153, 817587111}; PRIVATE TYPE TC23 = &t23_TC; #define t35 ADDRESS #define TC35 TC_ADDRESS IMPORT TYPE TC_ADDRESS; IMPORT char VS_ADDRESS__30f7308738738b44; #define t36 ADDRESS #define TC36 TC_NULL IMPORT TYPE TC_NULL; IMPORT char VS_NULL__fb50c7d53bec30dc; #define t1 ADDRESS #define TC1 TC_TEXT IMPORT TYPE TC_TEXT; IMPORT char VS_TEXT__b7a92447326386f5; #define t1_MapProc TC_TEXT->mapProc typedef unsigned char t2; #line 359 "IntTable.m3" typedef t31 (*t3)(); #line 341 typedef t4 (*t7)(); #line 332 typedef t8 (*t10)(); #line 31 "./IntTable.i3" typedef t2 (*t12)(); #line 257 "IntTable.m3" typedef t6 (*t13)(); #line 273 ".ROOT/.boots/corelib/Interfaces/List.i3" typedef t9 (*t21)(); #line 41 typedef t11 (*t22)(); #line 248 typedef t23 (*t25)(); #line 189 typedef signed_char t27; #line 38 typedef t27 (*t26)(); #line 85 typedef t14 (*t28)(); typedef CLOSURE t30; #define t34 ADDRESS typedef struct { TYPE self; int private; } t34_methods; #define t34_msize (sizeof (t34_methods)) typedef struct { ADDRESS methods; } t34_fields; #define t34_size (sizeof (t34_fields)) #define TC34 TC_ROOT IMPORT TYPE TC_ROOT; IMPORT char VS_ROOT__349f58f628be0ac6; #define t34_MapProc TC_ROOT->mapProc #define t32 ADDRESS #define TC32 TC_MUTEX IMPORT TYPE TC_MUTEX; IMPORT char VS_MUTEX__1f9d4e89391ab815; #define t32_MapProc TC_MUTEX->mapProc #define t33 ADDRESS typedef struct { TYPE self; int private; } t33_methods; #define t33_msize (sizeof (t33_methods)) typedef struct { ADDRESS methods; } t33_fields; #define t33_size (sizeof (t33_fields)) #define TC33 TC_UNTRACED_ROOT IMPORT TYPE TC_UNTRACED_ROOT; IMPORT char VS_UNTRACED_ROOT__3e0964513fd6da20; typedef unsigned char t37; typedef double t38; typedef float t39; #line 8 "IntTable.m3" IMPORT INITLINK* Word__init; IMPORT INITLINK* List__init; IMPORT INITLINK* IntTable__init; IMPORT t9 _Word__Shift (); IMPORT char VS_Word__Shift__e50a3c672927c57d; #line 8 IMPORT t4 _List__List2 (); IMPORT char VS_List__List2__88dbdaa322c8e005; IMPORT t31 _List__Push (); IMPORT char VS_List__Push__699e02922bc37610; #line 8 EXPORT t6 _IntTable__New (); EXPORT char VS_IntTable__New__3dc7ffff24de1d12 = '\0'; EXPORT t2 _IntTable__Get (); EXPORT char VS_IntTable__Get__d252c369205f828a = '\0'; #line 8 EXPORT t2 _IntTable__Put (); EXPORT char VS_IntTable__Put__2e50da8725271a2d = '\0'; EXPORT t2 _IntTable__Delete (); EXPORT char VS_IntTable__Delete__243ffdac2131e630 = '\0'; #line 8 EXPORT t31 _IntTable__Clear (); EXPORT char VS_IntTable__Clear__98ad75fe3056e268 = '\0'; EXPORT t6 _IntTable__Copy (); EXPORT char VS_IntTable__Copy__2ea3f11830e8ebf5 = '\0'; #line 8 EXPORT t2 _IntTable__Enumerate (); EXPORT char VS_IntTable__Enumerate__d2bfc5a83d802d46 = '\0'; EXPORT t4 _IntTable__ToValuesList (); #line 8 EXPORT char VS_IntTable__ToValuesList__511cc59c2eaddb9d = '\0'; EXPORT t4 _IntTable__ToAssocList (); EXPORT char VS_IntTable__ToAssocList__1de89ec7273ddba3 = '\0'; #line 8 PRIVATE EXCEPTION_NAME _IntTable__ASSERT_FAILED = "_IntTable__ASSERT_FAILED"; PRIVATE TYPE TC_IntTable__Entry; PRIVATE TYPE TC_IntTable__Buckets; #line 8 PRIVATE t31 _IntTable__Expand (); PRIVATE t8 _IntTable__NewInteger (); PRIVATE t31 _IntTable__ASSERT (); EXPORT char VS_IntTable__T__e3f9aa83231ef0fb = '\0'; #line 8 #line 40 "IntTable.m3" EXPORT t6 _IntTable__New (_initialSize, _maxChainLength) t14 _initialSize; t14 _maxChainLength; { t2 z2; t9 z3; t9 z0; t9 z1; t9 z4; t9 z5; t6 z6; t15 z7; #line 40 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t6 _table; auto t14 _s; auto t14 _logSize; auto t6 __result; #line 40 { ZERO1 (& _table); ZERO1 (& _s); ZERO1 (& _logSize); #line 40 ZERO1 (& __result); CHECKSTACKOVERFLOW; _logSize = 0 ; _s = _initialSize; z2 = (_s != 0 ); if (z2) do { z3 = _logSize + 1 ; z0 = z3; if (z0 < 0) RANGEFAULT; _logSize = z0; z1 = ((unsigned)_s) >> 1; z0 = z1; if (z0 < 0) RANGEFAULT; _s = z0; z2 = (_s != 0 ); } while (z2); z3 = _logSize - 1 ; z0 = z3; if (z0 < 0) RANGEFAULT; _logSize = z0; z4 = 1 ; z5 = _logSize; z3 = (((z5 <= -32) || (z5 >= 32)) ? 0 : ((z5 < 0) ? (((unsigned)z4) >> -(z5)) : (((unsigned) z4) << z5))); #line 56 z0 = z3; if (z0 < 0) RANGEFAULT; _initialSize = z0; { register t17* ptr = (t17*) TNEW (TC6); z6 = (t6) ptr; }; _table = z6; { register t20* ptr; int sz[1]; sz[0] = _initialSize; ptr = (t20*) TNEWA(TC15, 8 + sz[0] * 4); ptr->elts = (char*)(& ptr->size[1]); #line 59 ptr->size[0] = sz[0]; z7 = (t15) ptr; }; NILCHECKA (z6 = _table); ((*((t17*) z6))._buckets) = z7; NILCHECKA (z6 = _table); ((*((t17*) z6))._logSize) = _logSize; NILCHECKA (z6 = _table); ((*((t17*) z6))._maxChainLength) = _maxChainLength; NILCHECKA (z6 = _table); ((*((t17*) z6))._entries) = 0 ; NILCHECKA (z6 = _table); ((*((t17*) z6))._nonEmptyBuckets) = 0 ; __result = _table; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 66 }; }; #line 70 "IntTable.m3" EXPORT t2 _IntTable__Get (_table, _key, _value) t6 _table; t9 _key; t11 * _value; { t9 z2; t9 z1; t6 z3; t9 z5; t9 z0; t9 z4; t15 z6; t14 z7; t2 z8; t5 z9; #line 70 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t14 _i; auto t5 _entry; auto t2 __result; { ZERO1 (& _i); ZERO1 (& _entry); #line 70 ZERO1B (& __result); CHECKSTACKOVERFLOW; z2 = _key * -1664117991 ; z1 = - 32 ; NILCHECKA (z3 = _table); z5 = z1 + ((*((t17*) z3))._logSize); z1 = z2; z4 = z5; z0 = (((z4 <= -32) || (z4 >= 32)) ? 0 : #line 79 ((z4 < 0) ? (((unsigned)z1) >> -(z4)) : (((unsigned) z1) << z4))); z1 = z0; if (z1 < 0) RANGEFAULT; _i = z1; NILCHECKA (z3 = _table); NILCHECKB (z6 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z6)); z7 = _i; #line 82 if (z7 >= (array->size[0])) RANGEFAULT; z2 = (int)(array->elts + (z7 * 4)); }; _entry = (*(t5*)z2); loop_0:; z8 = (_entry == 0); if (z8) { goto loop_exit_0; }; NILCHECKA (z9 = _entry); z8 = (_key < ((*((t19*) z9))._key)); if (z8) { goto loop_exit_0; }; NILCHECKA (z9 = _entry); z8 = (_key == ((*((t19*) z9))._key)); if (z8) { NILCHECKA (z9 = _entry); (*_value) = ((*((t19*) z9))._value); __result = 1 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; }; NILCHECKA (z9 = _entry); _entry = ((*((t19*) z9))._nextEntry); goto loop_0; loop_exit_0: /**/; (*_value) = (t11) 0; __result = 0 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 96 }; }; #line 100 "IntTable.m3" EXPORT t2 _IntTable__Put (_table, _key, _value) t6 _table; t9 _key; t11 _value; { t9 z2; t9 z1; t6 z3; t9 z5; t9 z0; t9 z4; t15 z6; t14 z7; t2 z8; t5 z9; #line 100 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t14 _i; auto t5 _entry; auto t5 _prevEntry; auto t5 _newEntry; #line 100 auto t2 __result; { ZERO1 (& _i); ZERO1 (& _entry); ZERO1 (& _prevEntry); ZERO1 (& _newEntry); #line 100 ZERO1B (& __result); CHECKSTACKOVERFLOW; #line 111 z2 = _key * -1664117991 ; z1 = - 32 ; NILCHECKA (z3 = _table); z5 = z1 + ((*((t17*) z3))._logSize); z1 = z2; z4 = z5; z0 = (((z4 <= -32) || (z4 >= 32)) ? 0 : #line 111 ((z4 < 0) ? (((unsigned)z1) >> -(z4)) : (((unsigned) z1) << z4))); z1 = z0; if (z1 < 0) RANGEFAULT; _i = z1; _prevEntry = (t5) 0; NILCHECKA (z3 = _table); NILCHECKB (z6 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z6)); z7 = _i; #line 115 if (z7 >= (array->size[0])) RANGEFAULT; z2 = (int)(array->elts + (z7 * 4)); }; _entry = (*(t5*)z2); loop_1:; z8 = (_entry == 0); if (z8) { goto loop_exit_1; }; NILCHECKA (z9 = _entry); z8 = (_key < ((*((t19*) z9))._key)); if (z8) { goto loop_exit_1; }; NILCHECKA (z9 = _entry); z8 = (_key == ((*((t19*) z9))._key)); if (z8) { NILCHECKA (z9 = _entry); ((*((t19*) z9))._value) = _value; __result = 1 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; }; _prevEntry = _entry; NILCHECKA (z9 = _entry); _entry = ((*((t19*) z9))._nextEntry); goto loop_1; loop_exit_1: /**/; { register t19* ptr = (t19*) TNEW (TC5); z9 = (t5) ptr; }; _newEntry = z9; NILCHECKA (z9 = _newEntry); ((*((t19*) z9))._key) = _key; NILCHECKA (z9 = _newEntry); ((*((t19*) z9))._value) = _value; NILCHECKA (z9 = _newEntry); ((*((t19*) z9))._nextEntry) = _entry; z8 = (_prevEntry == 0); if (z8) { NILCHECKA (z3 = _table); NILCHECKB (z6 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z6)); #line 134 z7 = _i; if (z7 >= (array->size[0])) RANGEFAULT; z2 = (int)(array->elts + (z7 * 4)); }; z8 = ((*(t5*)z2) == 0); #line 134 if (z8) { NILCHECKA (z3 = _table); z4 = ((*((t17*) z3))._nonEmptyBuckets) + 1 ; z0 = z4; if (z0 < 0) RANGEFAULT; NILCHECKA (z3 = _table); #line 135 ((*((t17*) z3))._nonEmptyBuckets) = z0; goto if_6_end; }; if_6_end: /**/; NILCHECKA (z3 = _table); NILCHECKB (z6 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z6)); #line 137 z7 = _i; if (z7 >= (array->size[0])) RANGEFAULT; z4 = (int)(array->elts + (z7 * 4)); }; (*(t5*)z4) = _newEntry; #line 137 goto if_5_end; }; NILCHECKA (z9 = _prevEntry); ((*((t19*) z9))._nextEntry) = _newEntry; if_5_end: /**/; NILCHECKA (z3 = _table); z4 = ((*((t17*) z3))._entries) + 1 ; z0 = z4; if (z0 < 0) RANGEFAULT; NILCHECKA (z3 = _table); #line 142 ((*((t17*) z3))._entries) = z0; NILCHECKA (z3 = _table); z4 = ((*((t17*) z3))._entries) + ((*((t17*) z3))._nonEmptyBuckets); z1 = z4 - 1 ; NILCHECKA (z3 = _table); #line 143 z4 = IDIV (z1, ((*((t17*) z3))._nonEmptyBuckets)); NILCHECKA (z3 = _table); z8 = (z4 > ((*((t17*) z3))._maxChainLength)); #line 143 if (z8) { _IntTable__Expand (_table); goto if_7_end; }; if_7_end: /**/; __result = 0 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 149 }; }; #line 153 "IntTable.m3" PRIVATE t31 _IntTable__Expand (_table) t6 _table; { t6 z1; t15 z0; t14 z2; t15 z4; t9 z3; t6 z5; t9 z6; t2 z7; t5 z8; t9 z9; t9 z10; t9 z11; t5 z12; t14 z13; #line 153 "IntTable.m3" { auto t15 _oldBuckets; auto t5 _oldEntry; auto t5 _nextOldEntry; auto t5 _entry; auto t5 _prevEntry; auto t14 _i; { ZERO1 (& _oldBuckets); ZERO1 (& _oldEntry); ZERO1 (& _nextOldEntry); ZERO1 (& _entry); ZERO1 (& _prevEntry); ZERO1 (& _i); #line 153 CHECKSTACKOVERFLOW; NILCHECKA (z1 = _table); _oldBuckets = ((*((t17*) z1))._buckets); { register t20* ptr; int sz[1]; NILCHECKB (z4 = _oldBuckets); z2 = (*((t18*) z4)).size[0]; z3 = 2 * z2; sz[0] = z3; #line 163 ptr = (t20*) TNEWA(TC15, 8 + sz[0] * 4); ptr->elts = (char*)(& ptr->size[1]); ptr->size[0] = sz[0]; z0 = (t15) ptr; #line 163 }; NILCHECKA (z5 = _table); ((*((t17*) z5))._buckets) = z0; NILCHECKA (z1 = _table); z6 = ((*((t17*) z1))._logSize) + 1 ; z3 = z6; if (z3 < 0) RANGEFAULT; NILCHECKA (z1 = _table); #line 164 ((*((t17*) z1))._logSize) = z3; NILCHECKA (z5 = _table); ((*((t17*) z5))._nonEmptyBuckets) = 0 ; { int from, to, index; from = 0 ; NILCHECKB (z4 = _oldBuckets); z3 = (*((t18*) z4)).size[0] - 1; to = z3; { auto t9 _oldI; #line 167 { for (index = from; index <= to; index += 1) { _oldI = (t9) index; NILCHECKB (z4 = _oldBuckets); { register t20* array = & (*((t18*) z4)); z6 = _oldI; if (z6 >= (array->size[0])) RANGEFAULT; #line 168 z3 = (int)(array->elts + (z6 * 4)); }; _oldEntry = (*(t5*)z3); z7 = (_oldEntry != 0); if (z7) do { NILCHECKA (z8 = _oldEntry); _nextOldEntry = ((*((t19*) z8))._nextEntry); NILCHECKA (z8 = _oldEntry); z3 = ((*((t19*) z8))._key) * -1664117991 ; z6 = - 32 ; NILCHECKA (z1 = _table); #line 172 z9 = z6 + ((*((t17*) z1))._logSize); z10 = z3; z11 = z9; z6 = (((z11 <= -32) || (z11 >= 32)) ? 0 : ((z11 < 0) ? (((unsigned)z10) >> -(z11)) : (((unsigned) z10) << z11))); #line 172 z3 = z6; if (z3 < 0) RANGEFAULT; _i = z3; _prevEntry = (t5) 0; NILCHECKA (z1 = _table); NILCHECKB (z4 = ((*((t17*) z1))._buckets)); { register t20* array = & (*((t18*) z4)); #line 176 z2 = _i; if (z2 >= (array->size[0])) RANGEFAULT; z3 = (int)(array->elts + (z2 * 4)); }; _entry = (*(t5*)z3); loop_2:; z7 = (_entry == 0); if (z7) { goto loop_exit_2; }; NILCHECKA (z8 = _oldEntry); NILCHECKA (z12 = _entry); z7 = (((*((t19*) z8))._key) < ((*((t19*) z12))._key)); #line 179 if (z7) { goto loop_exit_2; }; NILCHECKA (z8 = _oldEntry); NILCHECKA (z12 = _entry); z7 = (((*((t19*) z8))._key) == ((*((t19*) z12))._key)); #line 180 if (z7) { _IntTable__ASSERT ( 0 , ((ADDRESS)(& txt1.str))); goto if_9_end; }; _prevEntry = _entry; NILCHECKA (z8 = _entry); _entry = ((*((t19*) z8))._nextEntry); if_9_end: /**/; goto loop_2; loop_exit_2: /**/; NILCHECKA (z8 = _oldEntry); ((*((t19*) z8))._nextEntry) = _entry; z7 = (_prevEntry == 0); if (z7) { NILCHECKA (z1 = _table); NILCHECKB (z4 = ((*((t17*) z1))._buckets)); { register t20* array = & (*((t18*) z4)); #line 191 z2 = _i; if (z2 >= (array->size[0])) RANGEFAULT; z3 = (int)(array->elts + (z2 * 4)); }; z7 = ((*(t5*)z3) == 0); #line 191 if (z7) { NILCHECKA (z1 = _table); z6 = ((*((t17*) z1))._nonEmptyBuckets) + 1 ; z3 = z6; if (z3 < 0) RANGEFAULT; #line 192 NILCHECKA (z1 = _table); ((*((t17*) z1))._nonEmptyBuckets) = z3; goto if_11_end; }; if_11_end: /**/; NILCHECKA (z5 = _table); NILCHECKB (z4 = ((*((t17*) z5))._buckets)); { register t20* array = & (*((t18*) z4)); #line 194 z13 = _i; if (z13 >= (array->size[0])) RANGEFAULT; z3 = (int)(array->elts + (z13 * 4)); }; (*(t5*)z3) = _oldEntry; #line 194 goto if_10_end; }; NILCHECKA (z8 = _prevEntry); ((*((t19*) z8))._nextEntry) = _oldEntry; if_10_end: /**/; _oldEntry = _nextOldEntry; z7 = (_oldEntry != 0); } while (z7); } } }; }; } } }; #line 205 "IntTable.m3" EXPORT t2 _IntTable__Delete (_table, _key, _value) t6 _table; t9 _key; t11 * _value; { t9 z2; t9 z1; t6 z3; t9 z5; t9 z0; t9 z4; t15 z6; t14 z7; t2 z8; t5 z9; t5 z10; #line 205 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t14 _i; auto t5 _entry; auto t5 _prevEntry; auto t2 __result; #line 205 { ZERO1 (& _i); ZERO1 (& _entry); ZERO1 (& _prevEntry); #line 205 ZERO1B (& __result); CHECKSTACKOVERFLOW; z2 = _key * -1664117991 ; z1 = - 32 ; NILCHECKA (z3 = _table); z5 = z1 + ((*((t17*) z3))._logSize); z1 = z2; z4 = z5; z0 = (((z4 <= -32) || (z4 >= 32)) ? 0 : #line 215 ((z4 < 0) ? (((unsigned)z1) >> -(z4)) : (((unsigned) z1) << z4))); z1 = z0; if (z1 < 0) RANGEFAULT; _i = z1; _prevEntry = (t5) 0; NILCHECKA (z3 = _table); NILCHECKB (z6 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z6)); z7 = _i; #line 219 if (z7 >= (array->size[0])) RANGEFAULT; z2 = (int)(array->elts + (z7 * 4)); }; _entry = (*(t5*)z2); loop_3:; z8 = (_entry == 0); if (z8) { goto loop_exit_3; }; NILCHECKA (z9 = _entry); z8 = (_key < ((*((t19*) z9))._key)); if (z8) { goto loop_exit_3; }; NILCHECKA (z9 = _entry); z8 = (_key == ((*((t19*) z9))._key)); if (z8) { NILCHECKA (z9 = _entry); (*_value) = ((*((t19*) z9))._value); z8 = (_prevEntry == 0); if (z8) { NILCHECKA (z9 = _entry); NILCHECKA (z3 = _table); NILCHECKB (z6 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z6)); #line 227 z7 = _i; if (z7 >= (array->size[0])) RANGEFAULT; z4 = (int)(array->elts + (z7 * 4)); }; (*(t5*)z4) = ((*((t19*) z9))._nextEntry); NILCHECKA (z9 = _entry); z8 = (((*((t19*) z9))._nextEntry) == 0); if (z8) { NILCHECKA (z3 = _table); z4 = ((*((t17*) z3))._nonEmptyBuckets) - 1 ; z0 = z4; if (z0 < 0) RANGEFAULT; #line 229 NILCHECKA (z3 = _table); ((*((t17*) z3))._nonEmptyBuckets) = z0; goto if_15_end; }; if_15_end: /**/; #line 229 goto if_14_end; }; NILCHECKA (z9 = _entry); NILCHECKA (z10 = _prevEntry); ((*((t19*) z10))._nextEntry) = ((*((t19*) z9))._nextEntry); if_14_end: /**/; NILCHECKA (z3 = _table); z4 = ((*((t17*) z3))._entries) - 1 ; z0 = z4; if (z0 < 0) RANGEFAULT; NILCHECKA (z3 = _table); #line 234 ((*((t17*) z3))._entries) = z0; __result = 1 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; }; _prevEntry = _entry; NILCHECKA (z9 = _entry); _entry = ((*((t19*) z9))._nextEntry); goto loop_3; loop_exit_3: /**/; (*_value) = (t11) 0; __result = 0 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 243 }; }; #line 247 "IntTable.m3" EXPORT t31 _IntTable__Clear (_table) t6 _table; { t9 z0; t6 z2; t15 z4; t9 z3; t9 z5; #line 247 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { { CHECKSTACKOVERFLOW; { int from, to, index; from = 0 ; NILCHECKA (z2 = _table); NILCHECKB (z4 = ((*((t17*) z2))._buckets)); z0 = (*((t18*) z4)).size[0] - 1; #line 249 to = z0; { auto t9 _i; { for (index = from; index <= to; index += 1) { _i = (t9) index; NILCHECKA (z2 = _table); NILCHECKB (z4 = ((*((t17*) z2))._buckets)); { register t20* array = & (*((t18*) z4)); #line 250 z5 = _i; if (z5 >= (array->size[0])) RANGEFAULT; z3 = (int)(array->elts + (z5 * 4)); }; (*(t5*)z3) = (t5) 0; #line 250 } } }; }; NILCHECKA (z2 = _table); ((*((t17*) z2))._entries) = 0 ; NILCHECKA (z2 = _table); ((*((t17*) z2))._nonEmptyBuckets) = 0 ; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 253 }; }; #line 257 "IntTable.m3" EXPORT t6 _IntTable__Copy (_table) t6 _table; { t6 z0; t6 z1; t6 z3; t15 z2; t14 z4; t15 z5; t9 z6; t9 z7; t2 z8; t5 z9; t5 z10; #line 257 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t6 _newTable; auto t5 _entry; auto t5 _newEntry; auto t5 _lastEntry; #line 257 auto t6 __result; { ZERO1 (& _newTable); ZERO1 (& _entry); ZERO1 (& _newEntry); ZERO1 (& _lastEntry); #line 257 ZERO1 (& __result); CHECKSTACKOVERFLOW; { register t17* ptr = (t17*) TNEW (TC6); z0 = (t6) ptr; }; _newTable = z0; NILCHECKB (z1 = _table); NILCHECKB (z3 = _newTable); (*((t17*) z3)) = (*((t17*) z1)); { register t20* ptr; int sz[1]; NILCHECKA (z1 = _table); NILCHECKB (z5 = ((*((t17*) z1))._buckets)); z4 = (*((t18*) z5)).size[0]; #line 267 sz[0] = z4; ptr = (t20*) TNEWA(TC15, 8 + sz[0] * 4); ptr->elts = (char*)(& ptr->size[1]); ptr->size[0] = sz[0]; #line 267 z2 = (t15) ptr; }; NILCHECKA (z1 = _newTable); ((*((t17*) z1))._buckets) = z2; { int from, to, index; from = 0 ; NILCHECKA (z1 = _table); NILCHECKB (z5 = ((*((t17*) z1))._buckets)); z6 = (*((t18*) z5)).size[0] - 1; #line 268 to = z6; { auto t9 _i; { for (index = from; index <= to; index += 1) { _i = (t9) index; NILCHECKA (z1 = _table); NILCHECKB (z5 = ((*((t17*) z1))._buckets)); { register t20* array = & (*((t18*) z5)); #line 269 z7 = _i; if (z7 >= (array->size[0])) RANGEFAULT; z6 = (int)(array->elts + (z7 * 4)); }; _entry = (*(t5*)z6); _lastEntry = (t5) 0; z8 = (_entry != 0); if (z8) do { { register t19* ptr = (t19*) TNEW (TC5); z9 = (t5) ptr; }; _newEntry = z9; NILCHECKA (z9 = _entry); NILCHECKA (z10 = _newEntry); ((*((t19*) z10))._key) = ((*((t19*) z9))._key); NILCHECKA (z9 = _entry); NILCHECKA (z10 = _newEntry); ((*((t19*) z10))._value) = ((*((t19*) z9))._value); z8 = (_lastEntry == 0); if (z8) { NILCHECKA (z3 = _newTable); NILCHECKB (z5 = ((*((t17*) z3))._buckets)); { register t20* array = & (*((t18*) z5)); #line 276 z7 = _i; if (z7 >= (array->size[0])) RANGEFAULT; z6 = (int)(array->elts + (z7 * 4)); }; (*(t5*)z6) = _newEntry; #line 276 goto if_16_end; }; NILCHECKA (z9 = _lastEntry); ((*((t19*) z9))._nextEntry) = _newEntry; if_16_end: /**/; _lastEntry = _newEntry; NILCHECKA (z9 = _entry); _entry = ((*((t19*) z9))._nextEntry); z8 = (_entry != 0); } while (z8); } #line 281 } }; }; __result = _newTable; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); #line 285 if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); }; }; #line 289 "IntTable.m3" EXPORT t2 _IntTable__Enumerate (_table, _proc, _procArg, _key, _value) t6 _table; t12 _proc; t11 _procArg; t9 * _key; t11 * _value; #line 289 { t9 z0; t6 z2; t15 z4; t6 z1; t15 z3; t9 z5; t9 z6; t2 z7; t5 z8; #line 289 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t5 _entry; auto t2 __result; { ZERO1 (& _entry); #line 289 ZERO1B (& __result); CHECKSTACKOVERFLOW; { int from, to, index; from = 0 ; NILCHECKA (z2 = _table); NILCHECKB (z4 = ((*((t17*) z2))._buckets)); z0 = (*((t18*) z4)).size[0] - 1; #line 299 to = z0; { auto t9 _i; { for (index = from; index <= to; index += 1) { _i = (t9) index; NILCHECKA (z1 = _table); NILCHECKB (z3 = ((*((t17*) z1))._buckets)); { register t20* array = & (*((t18*) z3)); #line 300 z6 = _i; if (z6 >= (array->size[0])) RANGEFAULT; z5 = (int)(array->elts + (z6 * 4)); }; _entry = (*(t5*)z5); z7 = (_entry != 0); if (z7) do { NILCHECKA (z8 = _entry); { t12 proc = _proc; if (!IS_CLOSURE(proc)) { z7 = proc (_procArg, ((*((t19*) z8))._key), ((*((t19*) z8))._value)); #line 302 } else { z7 = ((t12) CLOSURE_PROC(proc)) (CLOSURE_FRAME(proc), _procArg, ((*((t19*) z8))._key), ((*((t19*) z8))._value)); #line 302 }; }; if (z7) { NILCHECKA (z8 = _entry); (*_key) = ((*((t19*) z8))._key); NILCHECKA (z8 = _entry); (*_value) = ((*((t19*) z8))._value); __result = 1 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; }; NILCHECKA (z8 = _entry); _entry = ((*((t19*) z8))._nextEntry); z7 = (_entry != 0); } while (z7); } #line 307 } }; }; __result = 0 ; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 310 }; }; #line 314 "IntTable.m3" EXPORT t4 _IntTable__ToValuesList (_table) t6 _table; { t9 z0; t6 z2; t15 z4; t6 z1; t15 z3; t9 z5; t9 z6; t2 z7; t5 z8; #line 314 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t5 _entry; auto t4 _l; auto t4 __result; { ZERO1 (& _entry); ZERO1 (& _l); #line 314 ZERO1 (& __result); CHECKSTACKOVERFLOW; _l = (t4) 0; { int from, to, index; from = 0 ; NILCHECKA (z2 = _table); NILCHECKB (z4 = ((*((t17*) z2))._buckets)); z0 = (*((t18*) z4)).size[0] - 1; #line 320 to = z0; { auto t9 _i; { for (index = from; index <= to; index += 1) { _i = (t9) index; NILCHECKA (z1 = _table); NILCHECKB (z3 = ((*((t17*) z1))._buckets)); { register t20* array = & (*((t18*) z3)); #line 321 z6 = _i; if (z6 >= (array->size[0])) RANGEFAULT; z5 = (int)(array->elts + (z6 * 4)); }; _entry = (*(t5*)z5); z7 = (_entry != 0); if (z7) do { NILCHECKA (z8 = _entry); _List__Push (&_l, ((*((t19*) z8))._value)); NILCHECKA (z8 = _entry); _entry = ((*((t19*) z8))._nextEntry); z7 = (_entry != 0); } while (z7); } #line 324 } }; }; __result = _l; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 327 }; }; #line 332 "IntTable.m3" PRIVATE t8 _IntTable__NewInteger (_i) t9 _i; { t8 z0; t8 z2; #line 332 "IntTable.m3" { auto t8 _r; auto t8 __result; { ZERO1 (& _r); #line 332 ZERO1 (& __result); CHECKSTACKOVERFLOW; z0 = (t8) TNEW (TC8); _r = z0; NILCHECKB (z2 = _r); (*((t9*) z2)) = _i; __result = _r; return __result; } } }; #line 341 "IntTable.m3" EXPORT t4 _IntTable__ToAssocList (_table) t6 _table; { t9 z0; t6 z2; t15 z4; t6 z1; t15 z3; t9 z5; t9 z6; t2 z7; t5 z8; t8 z9; t4 z10; #line 341 "IntTable.m3" { HANDLER hproc_0; PUSH_RAISES (hproc_0, raises_1, proc_0); { auto t5 _entry; auto t4 _l; auto t4 __result; { ZERO1 (& _entry); ZERO1 (& _l); #line 341 ZERO1 (& __result); CHECKSTACKOVERFLOW; _l = (t4) 0; { int from, to, index; from = 0 ; NILCHECKA (z2 = _table); NILCHECKB (z4 = ((*((t17*) z2))._buckets)); z0 = (*((t18*) z4)).size[0] - 1; #line 347 to = z0; { auto t9 _i; { for (index = from; index <= to; index += 1) { _i = (t9) index; NILCHECKA (z1 = _table); NILCHECKB (z3 = ((*((t17*) z1))._buckets)); { register t20* array = & (*((t18*) z3)); #line 348 z6 = _i; if (z6 >= (array->size[0])) RANGEFAULT; z5 = (int)(array->elts + (z6 * 4)); }; _entry = (*(t5*)z5); z7 = (_entry != 0); if (z7) do { NILCHECKA (z8 = _entry); z9 = _IntTable__NewInteger (((*((t19*) z8))._key)); NILCHECKA (z8 = _entry); z10 = _List__List2 (z9, ((*((t19*) z8))._value)); #line 352 _List__Push (&_l, z10); NILCHECKA (z8 = _entry); _entry = ((*((t19*) z8))._nextEntry); z7 = (_entry != 0); } while (z7); } #line 353 } }; }; __result = _l; CUT_TO_NEXT_HANDLER (hproc_0); return __result; } } proc_0: CUT_TO_NEXT_HANDLER (hproc_0); if (hproc_0.exception != 0) RAISE_FOR_SURE (hproc_0.exception); #line 356 }; }; #line 359 "IntTable.m3" PRIVATE t31 _IntTable__ASSERT (_b, _t) t2 _b; t1 _t; { t2 z1; #line 359 "IntTable.m3" { { CHECKSTACKOVERFLOW; z1 = ! _b; if (z1) { RAISE (& _IntTable__ASSERT_FAILED, & _t, 4); }; } } }; PRIVATE int init_done = -1; #line 361 "IntTable.m3" PRIVATE void IntTable__initProc (g) int g; { #line 361 "IntTable.m3" if (init_done >= g) return; init_done = g; INITIALIZE (& IntTable__init); INITIALIZE (& Word__init); INITIALIZE (& List__init); #line 361 return; }; #line 361 "IntTable.m3" PRIVATE void t5_PrintProc (ref) t19* ref; { CHECKSTACKOVERFLOW; fprintf (stderr, "%s {", TC5->brand); fprintf (stderr, "^ = { "); #line 361 fprintf (stderr, "nextEntry = %#x", (*ref)._nextEntry); fprintf (stderr, "key = %d", (*ref)._key); fprintf (stderr, "value = %#x", (*ref)._value); #line 361 fprintf (stderr, "}"); fprintf (stderr, "}\n"); }; #line 361 "IntTable.m3" PRIVATE void t8_PrintProc (ref) t9* ref; { CHECKSTACKOVERFLOW; fprintf (stderr, "%s {", TC8->brand); fprintf (stderr, "^ = %d", (*ref)); #line 361 fprintf (stderr, "}\n"); }; #line 361 "IntTable.m3" PRIVATE void t15_PrintProc (ref) t18* ref; { CHECKSTACKOVERFLOW; fprintf (stderr, "%s {", TC15->brand); fprintf (stderr, "^ = array"); #line 361 fprintf (stderr, "}\n"); }; #line 361 "IntTable.m3" PRIVATE void t16_PrintProc (ref) t17* ref; { CHECKSTACKOVERFLOW; fprintf (stderr, "%s {", TC16->brand); fprintf (stderr, "^ = { "); #line 361 fprintf (stderr, "buckets = %#x", (*ref)._buckets); fprintf (stderr, "logSize = %d", (*ref)._logSize); fprintf (stderr, "entries = %d", (*ref)._entries); #line 361 fprintf (stderr, "nonEmptyBuckets = %d", (*ref)._nonEmptyBuckets); fprintf (stderr, "maxChainLength = %d", (*ref)._maxChainLength); #line 361 fprintf (stderr, "}"); fprintf (stderr, "}\n"); }; #line 361 "IntTable.m3" PRIVATE void t23_PrintProc (ref) t24* ref; { CHECKSTACKOVERFLOW; fprintf (stderr, "%s {", TC23->brand); fprintf (stderr, "^ = array"); #line 361 fprintf (stderr, "}\n"); }; PRIVATE void t4_MapProc (p, r, c) void (*p) (); register t29* r; ADDRESS c; { CHECKSTACKOVERFLOW; #line 361 p (& ((*r)._first), r, c); p (& ((*r)._tail), r, c); }; PRIVATE void t5_MapProc (p, r, c) void (*p) (); register t19* r; #line 361 ADDRESS c; { CHECKSTACKOVERFLOW; p (& ((*r)._nextEntry), r, c); p (& ((*r)._value), r, c); }; PRIVATE void t15_MapProc (p, r, c) #line 361 void (*p) (); register t18* r; ADDRESS c; { CHECKSTACKOVERFLOW; { int i1, j; t20* zz; t5* aptr; zz = & ((*r)); j = zz->size[0]; #line 361 aptr = (t5*) zz->elts; for (i1 = 0; i1 < j; i1++) { p (& (aptr[i1]), r, c); }; }; }; PRIVATE void t16_MapProc (p, r, c) #line 361 void (*p) (); register t17* r; ADDRESS c; { CHECKSTACKOVERFLOW; p (& ((*r)._buckets), r, c); }; PRIVATE void t23_MapProc (p, r, c) #line 361 void (*p) (); register t24* r; ADDRESS c; { CHECKSTACKOVERFLOW; { int i1, j; t20* zz; t11* aptr; zz = & ((*r)); j = zz->size[0]; #line 361 aptr = (t11*) zz->elts; for (i1 = 0; i1 < j; i1++) { p (& (aptr[i1]), r, c); }; }; }; PRIVATE INITLINK me_0 ={(INITLINK*)NIL, 0, IntTable__initProc}; static char* VSimports[] = { &VS_Word__Shift__e50a3c672927c57d, &VS_List__T__c661f0b12f626d56, &VS_List__List2__88dbdaa322c8e005, &VS_List__Push__699e02922bc37610, &VS_IntTable__T__e38bb59132b51757, NIL }; void IntTable__MLink (phase) int phase; { switch (phase) { case 0: { me_0.link = IntTable__init; IntTable__init = & me_0; t5_TC = t5_TC_init; REGISTERTYPE (TC5); t8_TC = t8_TC_init; REGISTERTYPE (TC8); t15_TC = t15_TC_init; REGISTERTYPE (TC15); t16_TC = t16_TC_init; REGISTERTYPE (TC16); t23_TC = t23_TC_init; REGISTERTYPE (TC23); break; }; case 1: { #line 30 "IntTable.m3" IDENTIFYTYPES (TC6, TC16); break; }; case 2: { break; }; }; };