caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] end-of-block CAMLreturn?
@ 2003-08-21 23:21 Chris Hecker
  2003-08-26 13:56 ` Xavier Leroy
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Hecker @ 2003-08-21 23:21 UTC (permalink / raw)
  To: caml-list


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
}

Make sense?

Chris


-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] end-of-block CAMLreturn?
  2003-08-21 23:21 [Caml-list] end-of-block CAMLreturn? Chris Hecker
@ 2003-08-26 13:56 ` Xavier Leroy
  2003-08-28 13:22   ` [Caml-list] Sys.command Christophe Raffalli
  0 siblings, 1 reply; 3+ messages in thread
From: Xavier Leroy @ 2003-08-26 13:56 UTC (permalink / raw)
  To: Chris Hecker; +Cc: caml-list

> 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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Caml-list] Sys.command
  2003-08-26 13:56 ` Xavier Leroy
@ 2003-08-28 13:22   ` Christophe Raffalli
  0 siblings, 0 replies; 3+ messages in thread
From: Christophe Raffalli @ 2003-08-28 13:22 UTC (permalink / raw)
  Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 2384 bytes --]


It seems that Sys.commd always returns 0 on Windows 98 (even if the 
command does not exist) ?
(it works on XP and Linux).

Is this a Bug or a Windows 98 limitation ?

-- 
Christophe Raffalli
Université de Savoie
Batiment Le Chablais, bureau 21
73376 Le Bourget-du-Lac Cedex

tél: (33) 4 79 75 81 03
fax: (33) 4 79 75 87 42
mail: Christophe.Raffalli@univ-savoie.fr
www: http://www.lama.univ-savoie.fr/~RAFFALLI
---------------------------------------------
IMPORTANT: this mail is signed using PGP/MIME
At least Enigmail/Mozilla, mutt or evolution
can check this signature
---------------------------------------------
re 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

-- 
Christophe Raffalli
Université de Savoie
Batiment Le Chablais, bureau 21
73376 Le Bourget-du-Lac Cedex

tél: (33) 4 79 75 81 03
fax: (33) 4 79 75 87 42
mail: Christophe.Raffalli@univ-savoie.fr
www: http://www.lama.univ-savoie.fr/~RAFFALLI
---------------------------------------------
IMPORTANT: this mail is signed using PGP/MIME
At least Enigmail/Mozilla, mutt or evolution
can check this signature
---------------------------------------------

[-- Attachment #2: Type: application/pgp-signature, Size: 252 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-08-28 13:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-21 23:21 [Caml-list] end-of-block CAMLreturn? Chris Hecker
2003-08-26 13:56 ` Xavier Leroy
2003-08-28 13:22   ` [Caml-list] Sys.command Christophe Raffalli

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).