GC preserving result in C struct constructors.

This commit is contained in:
Alex Shinn 2010-01-24 01:46:25 +09:00
parent bd1e861afa
commit dd8846de76

View file

@ -1111,7 +1111,9 @@
(lp (cdr ls) (+ i 1)))))) (lp (cdr ls) (+ i 1))))))
") {\n" ") {\n"
" struct " (type-name name) " *r;\n" " struct " (type-name name) " *r;\n"
" sexp res = sexp_alloc_tagged(ctx, sexp_sizeof(cpointer) + sizeof(struct " (type-name name) "), " " sexp_gc_var1(res);\n"
" sexp_gc_preserve1(ctx, res);\n"
" res = sexp_alloc_tagged(ctx, sexp_sizeof(cpointer) + sizeof(struct " (type-name name) "), "
(type-id-name name) (type-id-name name)
");\n" ");\n"
" sexp_cpointer_value(res) = sexp_cpointer_body(res);\n" " sexp_cpointer_value(res) = sexp_cpointer_body(res);\n"
@ -1133,6 +1135,7 @@
(number->string i)))) (number->string i))))
";\n")) ";\n"))
(lp (cdr ls) (+ i 1))))))) (lp (cdr ls) (+ i 1)))))))
" sexp_gc_release1(ctx);\n"
" return res;\n" " return res;\n"
"}\n\n") "}\n\n")
(set! *funcs* (set! *funcs*