From dd8846de76854de72dea3ebe43353359edb622f1 Mon Sep 17 00:00:00 2001
From: Alex Shinn <ashinn@users.noreply.github.com>
Date: Sun, 24 Jan 2010 01:46:25 +0900
Subject: [PATCH] GC preserving result in C struct constructors.

---
 tools/genstubs.scm | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/genstubs.scm b/tools/genstubs.scm
index 5d4a89f1..d3c1892c 100755
--- a/tools/genstubs.scm
+++ b/tools/genstubs.scm
@@ -1111,7 +1111,9 @@
                              (lp (cdr ls) (+ i 1))))))
                   ") {\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)
                   ");\n"
                   "  sexp_cpointer_value(res) = sexp_cpointer_body(res);\n"
@@ -1133,6 +1135,7 @@
                                                      (number->string i))))
                                    ";\n"))
                           (lp (cdr ls) (+ i 1)))))))
+                  "  sexp_gc_release1(ctx);\n"
                   "  return res;\n"
                   "}\n\n")
              (set! *funcs*