Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
* A list of finalized values ?
@ 1999-05-06 20:36 Xavier.Redon
  1999-05-07 15:32 ` Xavier Leroy
  0 siblings, 1 reply; 2+ messages in thread
From: Xavier.Redon @ 1999-05-06 20:36 UTC (permalink / raw)
  To: caml-list

I try to build a list of finalized values in C and use it under Caml.
If I use alloc_final with used=0 and max=1, no problem, that works.
But if I try with used=1 and max=1000 the custom top level enter in
a endless loop (presumably in the GC).

There are the sources of an small example :
I must do a very basic error but I had spend a lot of time
seeking it ... If you have a hint send it also to Xavier.Redon@eudil.fr
I'm not sure I'm yet in the mailing list.

Essai.mli:
====================================
type t
val int_list : unit -> t list
val int_convert : t -> int                    
====================================

Essai.ml:
====================================
type entier

type t = entier

external int_list : unit -> entier list = "int_list" ;;
external int_convert : entier -> int = "int_get" ;;             
====================================

Essai.c:
====================================
#include <stdio.h>

#include <caml/mlvalues.h>
#include <caml/alloc.h>
#include <caml/memory.h>
#include <caml/fail.h>      

void int_free(value integer)
{
int *temp=(int *)Field(integer,1);
if(temp!=NULL) free(temp);
}

value int_list(void)
{
CAMLlocal1(result);
int i;

result=Val_int(0);
for(i=0;i<10;i++){
    CAMLlocal2(subelement,temp);
    int *integer=malloc(sizeof(int));

    *integer=i;
    subelement=alloc_final(2,int_free,1,100);
    Store_field(subelement,1,(value)integer);
    temp=alloc(2,0);
    Store_field(temp,0,subelement);
    Store_field(temp,1,result);
    result=temp;
    }

CAMLreturn result;
}

value int_get(value integer)
{
CAMLparam1(integer);
CAMLreturn Val_int(*(int *)Field(integer,1));
}
====================================

PS:

 The CAMLxxx macros generate a very long list of warnings when compiled
with -Wall. CAMLreturn is not very safe : try if(cond) CAMLreturn result :-)




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

end of thread, other threads:[~1999-05-07 17:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-05-06 20:36 A list of finalized values ? Xavier.Redon
1999-05-07 15:32 ` Xavier Leroy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox