From 49174f31ba6d8175f298c6e3f2be05aa7818d153 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sun, 24 Jan 2010 02:09:23 +0900 Subject: [PATCH] using separately malloced struct for C struct constructors --- tools/genstubs.scm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/genstubs.scm b/tools/genstubs.scm index d3c1892c..581ea2c1 100755 --- a/tools/genstubs.scm +++ b/tools/genstubs.scm @@ -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)