caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Xavier Leroy <xavier.leroy@inria.fr>
To: Chris Hecker <checker@d6.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] end-of-block CAMLreturn?
Date: Tue, 26 Aug 2003 15:56:58 +0200	[thread overview]
Message-ID: <20030826155658.A10130@pauillac.inria.fr> (raw)
In-Reply-To: <Pine.BSF.4.44.0308211915060.30466-100000@arda.pair.com>; from checker@d6.com on Thu, Aug 21, 2003 at 07:21:20PM -0400

> Is there a way to do a CAMLreturn without the return?  From looking at
> memory.h it appears not, but it appears it would be easy to make a
> macro to do it (#define CAMLendblock local_roots = caml__frame; or
> something like that should work).
> 
> In other words, I want to have a loop that calls back to caml, but I
> don't want to keep shoving more stuff on the roots list, since I don't
> care about the previous loop's allocations:
> 
> for(i=0;i<n;++i) {
>    CAMLlocal(foo,bar);
>    // use foo bar
>    // callback to caml with foo bar, maybe somebody stores them somewhere
>    CAMLendblock();  // want this
> }

If I follow you correctly, there are two ways to achieve the desired
behavior.  One is to use the older API for GC root registration:
Begin_roots and End_roots.  (There is some documentation in comments
in file <caml/memory.h>.)

  for(i=0;i<n;++i) {
    foo = bar = Val_unit;
    Begin_roots(foo,bar);
    // use foo bar
    // callback to caml with foo bar, maybe somebody stores them somewhere
    End_roots();
  }

The other way, perhaps preferable, is to move the root registration
outside the loop:

  CAMLlocal(foo,bar);
  for(i=0;i<n;++i) {
    // use foo bar
    // callback to caml with foo bar, maybe somebody stores them somewhere
    foo = bar = Val_unit;  /* don't keep roots longer than necessary
  }
  CAMLreturn(whatever);

Hope this helps,

- Xavier Leroy

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2003-08-26 13:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-21 23:21 Chris Hecker
2003-08-26 13:56 ` Xavier Leroy [this message]
2003-08-28 13:22   ` [Caml-list] Sys.command Christophe Raffalli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030826155658.A10130@pauillac.inria.fr \
    --to=xavier.leroy@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=checker@d6.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).