all expression forms tested for zo-marshal
svn: r13998
original commit: 282a404ada
This commit is contained in:
parent
c350bac4dd
commit
bd5bfaba1c
|
@ -129,14 +129,14 @@
|
||||||
[(struct primval (id))
|
[(struct primval (id))
|
||||||
(void)]
|
(void)]
|
||||||
[(struct assign (id rhs undef-ok?))
|
[(struct assign (id rhs undef-ok?))
|
||||||
(traverse-expr rhs)]
|
(traverse-expr rhs visit)]
|
||||||
[(struct localref (unbox? offset clear? other-clears?))
|
[(struct localref (unbox? offset clear? other-clears?))
|
||||||
(void)]
|
(void)]
|
||||||
[(? lam?)
|
[(? lam?)
|
||||||
(traverse-lam expr visit)]
|
(traverse-lam expr visit)]
|
||||||
[(struct case-lam (name lams))
|
[(struct case-lam (name lams))
|
||||||
(traverse-data name visit)
|
(traverse-data name visit)
|
||||||
(for-each (lambda (lam) (traverse-lam expr visit)) lams)]
|
(for-each (lambda (lam) (traverse-lam lam visit)) lams)]
|
||||||
[(struct let-one (rhs body))
|
[(struct let-one (rhs body))
|
||||||
(traverse-expr rhs visit)
|
(traverse-expr rhs visit)
|
||||||
(traverse-expr body visit)]
|
(traverse-expr body visit)]
|
||||||
|
@ -212,6 +212,7 @@
|
||||||
(define variable-type-num 24)
|
(define variable-type-num 24)
|
||||||
(define top-type-num 87)
|
(define top-type-num 87)
|
||||||
(define case-lambda-sequence-type-num 96)
|
(define case-lambda-sequence-type-num 96)
|
||||||
|
(define begin0-sequence-type-num 97)
|
||||||
(define prefix-type-num 103)
|
(define prefix-type-num 103)
|
||||||
|
|
||||||
(define-syntax define-enum
|
(define-syntax define-enum
|
||||||
|
@ -300,6 +301,7 @@
|
||||||
#f))
|
#f))
|
||||||
|
|
||||||
(define-struct case-seq (name lams))
|
(define-struct case-seq (name lams))
|
||||||
|
(define-struct (seq0 seq) ())
|
||||||
|
|
||||||
(define-struct out (s shared-index))
|
(define-struct out (s shared-index))
|
||||||
|
|
||||||
|
@ -414,6 +416,8 @@
|
||||||
*dummy*
|
*dummy*
|
||||||
ids))
|
ids))
|
||||||
out)]
|
out)]
|
||||||
|
[(struct seq0 (forms))
|
||||||
|
(out-marshaled begin0-sequence-type-num (map protect-quote forms) out)]
|
||||||
[(struct seq (forms))
|
[(struct seq (forms))
|
||||||
(out-marshaled sequence-type-num (map protect-quote forms) out)]
|
(out-marshaled sequence-type-num (map protect-quote forms) out)]
|
||||||
[(struct splice (forms))
|
[(struct splice (forms))
|
||||||
|
@ -425,12 +429,14 @@
|
||||||
(match expr
|
(match expr
|
||||||
[(struct toplevel (depth pos const? ready?))
|
[(struct toplevel (depth pos const? ready?))
|
||||||
(out-marshaled toplevel-type-num
|
(out-marshaled toplevel-type-num
|
||||||
(if (or const? ready?)
|
(cons
|
||||||
(cons pos
|
depth
|
||||||
(bitwise-ior
|
(if (or const? ready?)
|
||||||
(if const? #x1 0)
|
(cons pos
|
||||||
(if ready? #x2 0)))
|
(bitwise-ior
|
||||||
pos)
|
(if const? #x1 0)
|
||||||
|
(if ready? #x2 0)))
|
||||||
|
pos))
|
||||||
out)]
|
out)]
|
||||||
[(struct topsyntax (depth pos midpt))
|
[(struct topsyntax (depth pos midpt))
|
||||||
(out-marshaled quote-syntax-type-num
|
(out-marshaled quote-syntax-type-num
|
||||||
|
@ -464,8 +470,17 @@
|
||||||
[(? lam?)
|
[(? lam?)
|
||||||
(out-lam expr out)]
|
(out-lam expr out)]
|
||||||
[(struct case-lam (name lams))
|
[(struct case-lam (name lams))
|
||||||
(out-syntax CASE_LAMBDA_EXPD
|
(let ([seq (make-case-seq name lams)])
|
||||||
(make-case-seq name lams))]
|
;; If all closures are empy, generate a case sequence directly
|
||||||
|
(if (andmap (lambda (lam)
|
||||||
|
(or (closure? lam)
|
||||||
|
(and (lam? lam)
|
||||||
|
(equal? (lam-closure-map lam) #()))))
|
||||||
|
lams)
|
||||||
|
(out-data seq out)
|
||||||
|
(out-syntax CASE_LAMBDA_EXPD
|
||||||
|
seq
|
||||||
|
out)))]
|
||||||
[(struct case-seq (name lams))
|
[(struct case-seq (name lams))
|
||||||
(out-marshaled case-lambda-sequence-type-num
|
(out-marshaled case-lambda-sequence-type-num
|
||||||
(cons (or name null)
|
(cons (or name null)
|
||||||
|
@ -526,7 +541,7 @@
|
||||||
(out-form expr out)]
|
(out-form expr out)]
|
||||||
[(struct beg0 (exprs))
|
[(struct beg0 (exprs))
|
||||||
(out-syntax BEGIN0_EXPD
|
(out-syntax BEGIN0_EXPD
|
||||||
(make-seq exprs)
|
(make-seq0 exprs)
|
||||||
out)]
|
out)]
|
||||||
[(struct with-cont-mark (key val body))
|
[(struct with-cont-mark (key val body))
|
||||||
(out-marshaled wcm-type-num
|
(out-marshaled wcm-type-num
|
||||||
|
@ -539,6 +554,10 @@
|
||||||
(out-lam expr out)]
|
(out-lam expr out)]
|
||||||
[(struct indirect (val))
|
[(struct indirect (val))
|
||||||
(out-expr val out)]
|
(out-expr val out)]
|
||||||
|
[(struct varref (expr))
|
||||||
|
(out-syntax REF_EXPD
|
||||||
|
expr
|
||||||
|
out)]
|
||||||
[else (out-value expr out)]))
|
[else (out-value expr out)]))
|
||||||
|
|
||||||
(define (out-lam expr out)
|
(define (out-lam expr out)
|
||||||
|
@ -549,7 +568,9 @@
|
||||||
expr
|
expr
|
||||||
out
|
out
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(out-lam expr out)))]
|
(out-byte CPT_CLOSURE out)
|
||||||
|
(out-number ((out-shared-index out) expr) out)
|
||||||
|
(out-lam lam out)))]
|
||||||
[(struct lam (name flags num-params param-types rest? closure-map max-let-depth body))
|
[(struct lam (name flags num-params param-types rest? closure-map max-let-depth body))
|
||||||
(let* ([l (protect-quote body)]
|
(let* ([l (protect-quote body)]
|
||||||
[any-refs? (ormap (lambda (t) (eq? t 'ref)) param-types)]
|
[any-refs? (ormap (lambda (t) (eq? t 'ref)) param-types)]
|
||||||
|
@ -594,6 +615,8 @@
|
||||||
(define (out-data expr out)
|
(define (out-data expr out)
|
||||||
(cond
|
(cond
|
||||||
[(prefix? expr) (out-prefix expr out)]
|
[(prefix? expr) (out-prefix expr out)]
|
||||||
|
[(global-bucket? expr) (out-toplevel expr out)]
|
||||||
|
[(module-variable? expr) (out-toplevel expr out)]
|
||||||
[else (out-form expr out)]))
|
[else (out-form expr out)]))
|
||||||
|
|
||||||
(define (out-value expr out)
|
(define (out-value expr out)
|
||||||
|
@ -666,6 +689,11 @@
|
||||||
(let ([vec (svector-vec expr)])
|
(let ([vec (svector-vec expr)])
|
||||||
(for ([n (in-range (sub1 (vector-length vec)) -1 -1)])
|
(for ([n (in-range (sub1 (vector-length vec)) -1 -1)])
|
||||||
(out-number (vector-ref vec n) out)))]
|
(out-number (vector-ref vec n) out)))]
|
||||||
|
[(module-path-index? expr)
|
||||||
|
(out-byte CPT_MODULE_INDEX out)
|
||||||
|
(let-values ([(name base) (module-path-index-split expr)])
|
||||||
|
(out-data name out)
|
||||||
|
(out-data base out))]
|
||||||
[else
|
[else
|
||||||
(out-byte CPT_QUOTE out)
|
(out-byte CPT_QUOTE out)
|
||||||
(let ([s (open-output-bytes)])
|
(let ([s (open-output-bytes)])
|
||||||
|
|
|
@ -214,7 +214,7 @@
|
||||||
(define (read-apply-values v)
|
(define (read-apply-values v)
|
||||||
(make-apply-values (car v) (cdr v)))
|
(make-apply-values (car v) (cdr v)))
|
||||||
(define (read-splice v)
|
(define (read-splice v)
|
||||||
(make-splice v))
|
(make-splice (seq-forms v)))
|
||||||
|
|
||||||
(define (read-module v)
|
(define (read-module v)
|
||||||
(match v
|
(match v
|
||||||
|
|
Loading…
Reference in New Issue
Block a user