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