mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-14 08:27:34 +02:00
using separately malloced struct for C struct constructors
This commit is contained in:
parent
dd8846de76
commit
49174f31ba
1 changed files with 9 additions and 4 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue