bug fixes for record types

This commit is contained in:
Justin Ethier 2016-04-27 22:11:44 -04:00
parent 76a3778dda
commit 7276bcbacf
4 changed files with 35 additions and 12 deletions

View file

@ -1,7 +1,7 @@
;; A temporary test file
(import (scheme base)
(scheme write)
(srfi 9)
;(srfi 9)
)
;; TODO: seems begins are not spliced when part of an applied lambda??

View file

@ -17,16 +17,17 @@
; TODO: need filter for the next two. also, they really belong in SRFI-1, not here
;delete
;delete-duplicates
;; TODO: possibly relocating here in the future
;; Record types
define-record-type
record?
; register-simple-type
; make-type-predicate
; make-constructor
; make-getter
; make-setter
; slot-set!
; type-slot-offset
register-simple-type
make-type-predicate
make-constructor
make-getter
make-setter
slot-set!
type-slot-offset
;; END records
receive
abs
max
@ -1385,7 +1386,7 @@
new)))
(define (type-slot-offset name sym)
(let ((field-tags (vector-ref name 2)))
(list-index2 sym field-tags)))
(_list-index sym field-tags)))
(define (slot-set! name obj idx val)
(let ((vec obj)) ;; TODO: get actual slots from obj
(vector-set! (vector-ref vec 2) idx val)))
@ -1396,6 +1397,17 @@
(lambda (obj val)
(vector-set! (vector-ref obj 2) idx val)))
;; Find index of element in list, or -1 if not found
(define _list-index
(lambda (e lst)
(if (null? lst)
-1
(if (eq? (car lst) e)
0
(if (= (_list-index e (cdr lst)) -1)
-1
(+ 1 (_list-index e (cdr lst))))))))
(define (record? obj)
(and (vector? obj)
(> (vector-length obj) 0)

View file

@ -45,7 +45,7 @@
new)))
(define (type-slot-offset name sym)
(let ((field-tags (vector-ref name 2)))
(list-index2 sym field-tags)))
(_list-index sym field-tags)))
(define (slot-set! name obj idx val)
(let ((vec obj)) ;; TODO: get actual slots from obj
(vector-set! (vector-ref vec 2) idx val)))
@ -61,6 +61,17 @@
(> (vector-length obj) 0)
(equal? record-marker (vector-ref obj 0))))
;; Find index of element in list, or -1 if not found
(define _list-index
(lambda (e lst)
(if (null? lst)
-1
(if (eq? (car lst) e)
0
(if (= (_list-index e (cdr lst)) -1)
-1
(+ 1 (_list-index e (cdr lst))))))))
(define-syntax define-record-type
(er-macro-transformer
(lambda (expr rename compare)

View file

@ -5,7 +5,7 @@
(scheme read)
(scheme write)
(scheme eval)
(srfi 9)
;(srfi 9)
)
(define *num-passed* 0)