|
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