using separately malloced struct for C struct constructors

This commit is contained in:
Alex Shinn 2010-01-24 02:09:23 +09:00
parent dd8846de76
commit 49174f31ba

View file

@ -1113,11 +1113,16 @@
" struct " (type-name name) " *r;\n" " struct " (type-name name) " *r;\n"
" sexp_gc_var1(res);\n" " sexp_gc_var1(res);\n"
" sexp_gc_preserve1(ctx, res);\n" " sexp_gc_preserve1(ctx, res);\n"
" res = sexp_alloc_tagged(ctx, sexp_sizeof(cpointer) + sizeof(struct " (type-name name) "), " ;; " res = sexp_alloc_tagged(ctx, sexp_sizeof(cpointer) + sizeof(struct " (type-name name) "), "
;; (type-id-name name)
;; ");\n"
;; " r = sexp_cpointer_value(res) = sexp_cpointer_body(res);\n"
" res = sexp_alloc_tagged(ctx, sexp_sizeof(cpointer), "
(type-id-name name) (type-id-name name)
");\n" ");\n"
" sexp_cpointer_value(res) = sexp_cpointer_body(res);\n" " r = sexp_cpointer_value(res) = malloc(sizeof(struct "
" r = sexp_cpointer_value(res);\n" (type-name name) "));\n"
" sexp_freep(res) = 1;\n"
(lambda () (lambda ()
(let lp ((ls args) (i 0)) (let lp ((ls args) (i 0))
(cond (cond
@ -1127,7 +1132,7 @@
(any (lambda (f) (and (pair? f) (eq? a (cadr f)))) (any (lambda (f) (and (pair? f) (eq? a (cadr f))))
(cddr x)))) (cddr x))))
(if field (if field
(cat " r." (cadr field) " = " (cat " r->" (cadr field) " = "
(lambda () (lambda ()
(scheme->c-converter (scheme->c-converter
(car field) (car field)