@@ -67,7 +67,7 @@ setTreeNodeValue(Thread* t, GcTreeNode* n, object value)
67
67
{
68
68
intptr_t red = alias (n, TreeNodeValue) & (~PointerMask);
69
69
70
- set (t, reinterpret_cast <object>(n), TreeNodeValue , value);
70
+ n-> setValue (t , value);
71
71
72
72
alias (n, TreeNodeValue) |= red;
73
73
}
@@ -142,12 +142,12 @@ treeFind(Thread* t, TreeContext* c, GcTreeNode* old, intptr_t key, GcTreeNode* n
142
142
if (difference < 0 ) {
143
143
old = old->left ();
144
144
GcTreeNode* n = cloneTreeNode (t, old);
145
- set (t, new_, TreeNodeLeft , n);
145
+ new_-> setLeft (t , n);
146
146
new_ = n;
147
147
} else if (difference > 0 ) {
148
148
old = old->right ();
149
149
GcTreeNode* n = cloneTreeNode (t, old);
150
- set (t, new_, TreeNodeRight , n);
150
+ new_-> setRight (t , n);
151
151
new_ = n;
152
152
} else {
153
153
c->fresh = false ;
@@ -179,8 +179,8 @@ leftRotate(Thread* t, GcTreeNode* n)
179
179
PROTECT (t, n);
180
180
181
181
GcTreeNode* child = cloneTreeNode (t, n->right ());
182
- set (t, n, TreeNodeRight , child->left ());
183
- set (t, child, TreeNodeLeft , n);
182
+ n-> setRight (t , child->left ());
183
+ child-> setLeft (t , n);
184
184
return child;
185
185
}
186
186
@@ -190,8 +190,8 @@ rightRotate(Thread* t, GcTreeNode* n)
190
190
PROTECT (t, n);
191
191
192
192
GcTreeNode* child = cloneTreeNode (t, n->left ());
193
- set (t, n, TreeNodeLeft , child->right ());
194
- set (t, child, TreeNodeRight , n);
193
+ n-> setLeft (t , child->right ());
194
+ child-> setRight (t , n);
195
195
return child;
196
196
}
197
197
@@ -218,7 +218,7 @@ treeAdd(Thread* t, TreeContext* c)
218
218
GcTreeNode* n = cloneTreeNode
219
219
(t, c->ancestors ->next ->item ->right ());
220
220
221
- set (t, c->ancestors ->next ->item , TreeNodeRight , n);
221
+ c->ancestors ->next ->item -> setRight (t , n);
222
222
223
223
setTreeNodeRed (t, c->ancestors ->next ->item ->right (), false );
224
224
@@ -234,9 +234,9 @@ treeAdd(Thread* t, TreeContext* c)
234
234
GcTreeNode* n = leftRotate (t, new_);
235
235
236
236
if (new_ == c->ancestors ->item ->right ()) {
237
- set (t, c->ancestors ->item , TreeNodeRight , n);
237
+ c->ancestors ->item -> setRight (t , n);
238
238
} else {
239
- set (t, c->ancestors ->item , TreeNodeLeft , n);
239
+ c->ancestors ->item -> setLeft (t , n);
240
240
}
241
241
c->ancestors = path (c, n, c->ancestors );
242
242
}
@@ -249,9 +249,9 @@ treeAdd(Thread* t, TreeContext* c)
249
249
} else if (c->ancestors ->next ->next ->item ->right ()
250
250
== c->ancestors ->next ->item )
251
251
{
252
- set (t, c->ancestors ->next ->next ->item , TreeNodeRight , n);
252
+ c->ancestors ->next ->next ->item -> setRight (t , n);
253
253
} else {
254
- set (t, c->ancestors ->next ->next ->item , TreeNodeLeft , n);
254
+ c->ancestors ->next ->next ->item -> setLeft (t , n);
255
255
}
256
256
// done
257
257
}
@@ -265,7 +265,7 @@ treeAdd(Thread* t, TreeContext* c)
265
265
GcTreeNode* n = cloneTreeNode
266
266
(t, c->ancestors ->next ->item ->left ());
267
267
268
- set (t, c->ancestors ->next ->item , TreeNodeLeft , n);
268
+ c->ancestors ->next ->item -> setLeft (t , n);
269
269
270
270
setTreeNodeRed (t, c->ancestors ->next ->item ->left (), false );
271
271
@@ -281,9 +281,9 @@ treeAdd(Thread* t, TreeContext* c)
281
281
GcTreeNode* n = rightRotate (t, new_);
282
282
283
283
if (new_ == c->ancestors ->item ->left ()) {
284
- set (t, c->ancestors ->item , TreeNodeLeft , n);
284
+ c->ancestors ->item -> setLeft (t , n);
285
285
} else {
286
- set (t, c->ancestors ->item , TreeNodeRight , n);
286
+ c->ancestors ->item -> setRight (t , n);
287
287
}
288
288
c->ancestors = path (c, n, c->ancestors );
289
289
}
@@ -296,9 +296,9 @@ treeAdd(Thread* t, TreeContext* c)
296
296
} else if (c->ancestors ->next ->next ->item ->left ()
297
297
== c->ancestors ->next ->item )
298
298
{
299
- set (t, c->ancestors ->next ->next ->item , TreeNodeLeft , n);
299
+ c->ancestors ->next ->next ->item -> setLeft (t , n);
300
300
} else {
301
- set (t, c->ancestors ->next ->next ->item , TreeNodeRight , n);
301
+ c->ancestors ->next ->next ->item -> setRight (t , n);
302
302
}
303
303
// done
304
304
}
@@ -383,14 +383,14 @@ hashMapResize(Thread* t, GcHashMap* map, uint32_t (*hash)(Thread*, object),
383
383
384
384
unsigned index = hash (t, k) & (newLength - 1 );
385
385
386
- set (t, reinterpret_cast <object>(p), TripleThird , newArray->body ()[index]);
387
- set (t, newArray, ArrayBody + ( index * BytesPerWord), p );
386
+ p-> setThird (t , newArray->body ()[index]);
387
+ newArray-> setBodyElement (t, index, reinterpret_cast <object>(p) );
388
388
}
389
389
}
390
390
}
391
391
}
392
392
393
- set (t, map, HashMapArray , newArray);
393
+ map-> setArray (t , newArray);
394
394
}
395
395
396
396
void
@@ -427,8 +427,9 @@ hashMapInsert(Thread* t, GcHashMap* map, object key, object value,
427
427
PROTECT (t, value);
428
428
429
429
GcWeakReference* r = makeWeakReference (t, 0 , 0 , 0 , 0 );
430
- r->target () = key;
431
- r->vmNext () = reinterpret_cast <object>(t->m ->weakReferences );
430
+
431
+ r->setTarget (t, key);
432
+ r->setVmNext (t, reinterpret_cast <object>(t->m ->weakReferences ));
432
433
t->m ->weakReferences = r->as <GcJreference>(t);
433
434
k = reinterpret_cast <object>(r);
434
435
@@ -441,8 +442,8 @@ hashMapInsert(Thread* t, GcHashMap* map, object key, object value,
441
442
442
443
unsigned index = h & (array->length () - 1 );
443
444
444
- set (t, reinterpret_cast <object>(n), TripleThird , array->body ()[index]);
445
- set (t, array, ArrayBody + ( index * BytesPerWord), n );
445
+ n-> setThird (t , array->body ()[index]);
446
+ array-> setBodyElement (t, index, reinterpret_cast <object>(n) );
446
447
447
448
if (map->size () <= array->length () / 3 ) {
448
449
// this might happen if nodes were removed during GC in which case
@@ -452,13 +453,12 @@ hashMapInsert(Thread* t, GcHashMap* map, object key, object value,
452
453
}
453
454
454
455
GcTriple*
455
- hashMapRemoveNode (Thread* t, GcHashMap* map, unsigned index, object p, GcTriple* n)
456
+ hashMapRemoveNode (Thread* t, GcHashMap* map, unsigned index, GcTriple* p, GcTriple* n)
456
457
{
457
458
if (p) {
458
- set (t, p, TripleThird , n->third ());
459
+ p-> setThird (t , n->third ());
459
460
} else {
460
- set (t, reinterpret_cast <object>(map->array ()), ArrayBody + (index * BytesPerWord),
461
- n->third ());
461
+ map->array ()->setBodyElement (t, index, n->third ());
462
462
}
463
463
-- map->size ();
464
464
return n;
@@ -475,7 +475,7 @@ hashMapRemove(Thread* t, GcHashMap* map, object key,
475
475
object o = 0 ;
476
476
if (array) {
477
477
unsigned index = hash (t, key) & (array->length () - 1 );
478
- object p = 0 ;
478
+ GcTriple* p = 0 ;
479
479
for (GcTriple* n = cast<GcTriple>(t, array->body ()[index]); n;) {
480
480
object k = n->first ();
481
481
if (weak) {
@@ -490,7 +490,7 @@ hashMapRemove(Thread* t, GcHashMap* map, object key,
490
490
o = hashMapRemoveNode (t, map, index, p, n)->second ();
491
491
break ;
492
492
} else {
493
- p = reinterpret_cast <object>(n) ;
493
+ p = n ;
494
494
n = cast<GcTriple>(t, n->third ());
495
495
}
496
496
}
@@ -515,11 +515,11 @@ listAppend(Thread* t, GcList* list, object value)
515
515
516
516
object p = reinterpret_cast <object>(makePair (t, value, 0 ));
517
517
if (list->front ()) {
518
- set (t, list->rear (), PairSecond , p);
518
+ cast<GcPair> (t, list->rear ())-> setSecond (t , p);
519
519
} else {
520
- set (t, reinterpret_cast <object>(list), ListFront , p);
520
+ list-> setFront (t , p);
521
521
}
522
- set (t, reinterpret_cast <object>(list), ListRear , p);
522
+ list-> setRear (t , p);
523
523
}
524
524
525
525
GcVector*
@@ -533,15 +533,15 @@ vectorAppend(Thread* t, GcVector* vector, object value)
533
533
(t, vector->size (), max (16 , vector->size () * 2 ));
534
534
535
535
if (vector->size ()) {
536
- memcpy (newVector-> body (). begin (),
537
- vector->body (). begin (),
538
- vector-> size () * BytesPerWord);
536
+ for ( size_t i = 0 ; i < vector-> size (); i++) {
537
+ newVector-> setBodyElement (t, i, vector->body ()[i]);
538
+ }
539
539
}
540
540
541
541
vector = newVector;
542
542
}
543
543
544
- set (t, reinterpret_cast <object>( vector), VectorBody + (vector ->size () * BytesPerWord ), value);
544
+ vector-> setBodyElement (t, vector->size (), value);
545
545
++ vector->size ();
546
546
return vector;
547
547
}
@@ -555,8 +555,9 @@ growArray(Thread* t, GcArray* array)
555
555
(t, array == 0 ? 16 : (array->length () * 2 ));
556
556
557
557
if (array) {
558
- memcpy (newArray->body ().begin (), array->body ().begin (),
559
- array->length ());
558
+ for (size_t i = 0 ; i < array->length (); i++) {
559
+ newArray->setBodyElement (t, i, array->body ()[i]);
560
+ }
560
561
}
561
562
562
563
return newArray;
0 commit comments