Skip to content
Snippets Groups Projects

Add applicable records

Merged David Thompson requested to merge applicable-structs into main
1 unresolved thread
2 files
+ 50
16
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 4
16
@@ -100,22 +100,10 @@
@@ -100,22 +100,10 @@
(guile-vm
(guile-vm
(guile:record-type-parents rtd))
(guile:record-type-parents rtd))
(else
(else
(match (%inline-wasm
(%inline-wasm
'(func (param $vtable (ref $vtable)) (result (ref eq))
'(func (param $rtd (ref $vtable)) (result (ref eq))
(struct.get $vtable $parents (local.get $vtable)))
(call $record-type-parents (local.get $rtd)))
rtd)
rtd))))
((? vector? parentv) parentv)
(parent
(let ((grandparents (record-type-parents parent)))
(define parents
(make-vector (1+ (vector-length grandparents)) parent))
(vector-copy! parents 0 grandparents 0)
(%inline-wasm
'(func (param $vtable (ref $vtable)) (param $parentv (ref eq))
(struct.set $vtable $parents (local.get $vtable)
(local.get $parentv)))
rtd parents)
parents))))))
(define-syntax define-record-type
(define-syntax define-record-type
(lambda (stx)
(lambda (stx)
(define (acons x y z) (cons (cons x y) z))
(define (acons x y z) (cons (cons x y) z))
Loading