mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-14 00:17:33 +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"
|
||||
" sexp_gc_var1(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)
|
||||
");\n"
|
||||
" sexp_cpointer_value(res) = sexp_cpointer_body(res);\n"
|
||||
" r = sexp_cpointer_value(res);\n"
|
||||
" r = sexp_cpointer_value(res) = malloc(sizeof(struct "
|
||||
(type-name name) "));\n"
|
||||
" sexp_freep(res) = 1;\n"
|
||||
(lambda ()
|
||||
(let lp ((ls args) (i 0))
|
||||
(cond
|
||||
|
@ -1127,7 +1132,7 @@
|
|||
(any (lambda (f) (and (pair? f) (eq? a (cadr f))))
|
||||
(cddr x))))
|
||||
(if field
|
||||
(cat " r." (cadr field) " = "
|
||||
(cat " r->" (cadr field) " = "
|
||||
(lambda ()
|
||||
(scheme->c-converter
|
||||
(car field)
|
||||
|
|
Loading…
Add table
Reference in a new issue