|
44 | 44 | (TYPE-FLOAT-RT-VALUE #b100111)
|
45 | 45 | (TYPE-CHAR-RT-VALUE #b101111)
|
46 | 46 | (TYPE-MAX-ATOMIC-RT-VALUE #b111111)
|
| 47 | + (TYPE-HASHCONS-INDEX-INDEX 0) |
| 48 | + (TYPE-HASHCONS-HASHCODE-INDEX 1) |
47 | 49 |
|
48 | 50 | (HC-PRJ-TAG-MASK #b10)
|
49 | 51 | (HC-INJ-TAG-MASK #b01)
|
|
393 | 395 | [(op$ <= ty TYPE-MAX-ATOMIC-RT-VALUE) ty]
|
394 | 396 | [else
|
395 | 397 | (begin$
|
396 |
| - (assign$ hcode (calculate-type-hashcode ty)) |
| 398 | + (assign$ hcode (calculate-type-hashcode ty)) |
397 | 399 | (assign$ hty (op$ Types-hashcons! ty hcode))
|
398 |
| - (cond$ |
399 |
| - [(op$ = ty hty) |
400 |
| - (begin$ |
401 |
| - (assign$ index (op$ Types-gen-index!)) |
402 |
| - (assign$ tag (sr-get-tag ty TYPE-TAG-MASK)) |
403 |
| - (case$ tag |
404 |
| - [(data:TYPE-GREF-TAG) |
| 400 | + ;; Assumtion: All structural types have two fields in the front, |
| 401 | + ;; one for the index in the hashconsing table and one for the |
| 402 | + ;; hashcode. |
| 403 | + (when$ (op$ = ty hty) |
| 404 | + (assign$ index (op$ get-types-hashcons-index)) |
| 405 | + (assign$ _unused (op$ Types-gen-index!)) |
| 406 | + (assign$ tag (sr-get-tag ty TYPE-TAG-MASK)) |
405 | 407 | (sr-tagged-array-set!
|
406 |
| - hty TYPE-GREF-TAG TYPE-GREF-INDEX-INDEX index) |
| 408 | + hty tag TYPE-HASHCONS-INDEX-INDEX index) |
407 | 409 | (sr-tagged-array-set!
|
408 |
| - hty TYPE-GREF-TAG TYPE-GREF-HASH-INDEX hcode)] |
409 |
| - [(data:TYPE-GVECT-TAG) |
410 |
| - (sr-tagged-array-set! |
411 |
| - hty TYPE-GVECT-TAG TYPE-GVECT-INDEX-INDEX index) |
412 |
| - (sr-tagged-array-set! |
413 |
| - hty TYPE-GVECT-TAG TYPE-GVECT-HASH-INDEX hcode)] |
414 |
| - [(data:TYPE-MREF-TAG) |
415 |
| - (sr-tagged-array-set! |
416 |
| - hty TYPE-MREF-TAG TYPE-MREF-INDEX-INDEX index) |
417 |
| - (sr-tagged-array-set! |
418 |
| - hty TYPE-MREF-TAG TYPE-MREF-HASH-INDEX hcode)] |
419 |
| - [(data:TYPE-MVECT-TAG) |
420 |
| - (sr-tagged-array-set! |
421 |
| - hty TYPE-MVECT-TAG TYPE-MVECT-INDEX-INDEX index) |
422 |
| - (sr-tagged-array-set! |
423 |
| - hty TYPE-MVECT-TAG TYPE-MVECT-HASH-INDEX hcode)] |
424 |
| - [(data:TYPE-TUPLE-TAG) |
425 |
| - (sr-tagged-array-set! |
426 |
| - hty TYPE-TUPLE-TAG TYPE-TUPLE-INDEX-INDEX index) |
427 |
| - (sr-tagged-array-set! |
428 |
| - hty TYPE-TUPLE-TAG TYPE-TUPLE-HASH-INDEX hcode)] |
429 |
| - [(data:TYPE-FN-TAG) |
430 |
| - (sr-tagged-array-set! |
431 |
| - hty TYPE-FN-TAG TYPE-FN-INDEX-INDEX index) |
432 |
| - (sr-tagged-array-set! |
433 |
| - hty TYPE-FN-TAG TYPE-FN-HASH-INDEX hcode)] |
434 |
| - [(data:TYPE-MU-TAG) |
435 |
| - (sr-tagged-array-set! |
436 |
| - hty TYPE-MU-TAG TYPE-MU-INDEX-INDEX index) |
437 |
| - (sr-tagged-array-set! |
438 |
| - hty TYPE-MU-TAG TYPE-MU-HASH-INDEX hcode)] |
439 |
| - [else (op$ Print err-msg) (op$ Exit (Quote 1)) UNDEF-IMDT]) |
440 |
| - hty)] |
441 |
| - [else hty]))]))) |
| 410 | + hty tag TYPE-HASHCONS-HASHCODE-INDEX hcode)) |
| 411 | + hty)]))) |
442 | 412 | (add-new-code! (cons hashcons-type runtime-code))
|
443 | 413 | (set-box! hashcons-type-code-label? hashcons-type-code-label)
|
444 | 414 | (App-Code hashcons-type-code-label (list ty))]))
|
|
0 commit comments