You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 2946 Reporter: administrator Status: closed Resolution: fixed Priority: normal Severity: minor Category: ~DO NOT USE (was: OCaml general)
CAMLprim value caml_obj_tag(value arg)
{
if (Is_long (arg)){
return 1000;
}else if (Is_young (arg) || Is_in_heap (arg)){
return Val_int(Tag_val(arg));
}else{
return 1001;
}
}
Le cas Is_atom(arg) N'EST PAS géré !!!
Autre bug :
On a dans Obj.ml les constantes suivantes :
Obj.out_of_heap_tag;;
: int = 1001
Obj.int_tag;;
: int = 1000
Ce qui bien sur ne convient pas a cause de
l'absence de Val_int(...) dans les deux
return concernés de caml_obj_tag.
Exemple :
Obj.tag (Obj.repr 42);;
: int = 500
Mon avis sur la question :-)
En rajontant ces cas, caml_obj_tag
devient IMHO /trop/ couteuse ! Pourquoi
proteger des fonctions de Obj.ml des seg
fault ? Le "but" de ce module est d'etre
unsafe, non ?
ON NE DEVRAIT PAS POUVOIR ECRIRE :
Obj.tag (Obj.repr 42);;
MAIS ON DEVRAIT ECRIRE :
let safe_tag v = if is_block v then tag v else ...
Retournons donc au bon vieux :
CAMLprim value caml_obj_tag(value arg)
{
return Val_int(Tag_val(arg));
}
Nota Bene : j'ai besoin de ce type de fonction
car j'ecris un interpret en Ocaml pour la phase
de prototypage.
Cordialement,
Yoann
The text was updated successfully, but these errors were encountered:
Original bug ID: 2946
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)
Bug description
Full_Name: Yoann Fabre
Version: 3.08 Alpha2
OS: Win2000 SP4 + Cygwin
Submission from: nas-p19-3-62-147-34-225.dial.proxad.net (62.147.34.225)
Bonjour,
Voici donc le bug de Obj.tag :
let u = Obj.repr [| |];;
val u : Obj.t =
size u;;
tag u;;
is_block u;;
Cause du bug :
-- obj.c --
CAMLprim value caml_obj_tag(value arg)
{
if (Is_long (arg)){
return 1000;
}else if (Is_young (arg) || Is_in_heap (arg)){
return Val_int(Tag_val(arg));
}else{
return 1001;
}
}
Le cas Is_atom(arg) N'EST PAS géré !!!
Autre bug :
On a dans Obj.ml les constantes suivantes :
Obj.out_of_heap_tag;;
Obj.int_tag;;
Ce qui bien sur ne convient pas a cause de
l'absence de Val_int(...) dans les deux
return concernés de caml_obj_tag.
Exemple :
Obj.tag (Obj.repr 42);;
Mon avis sur la question :-)
En rajontant ces cas, caml_obj_tag
devient IMHO /trop/ couteuse ! Pourquoi
proteger des fonctions de Obj.ml des seg
fault ? Le "but" de ce module est d'etre
unsafe, non ?
ON NE DEVRAIT PAS POUVOIR ECRIRE :
Obj.tag (Obj.repr 42);;
MAIS ON DEVRAIT ECRIRE :
let safe_tag v = if is_block v then tag v else ...
Retournons donc au bon vieux :
CAMLprim value caml_obj_tag(value arg)
{
return Val_int(Tag_val(arg));
}
Nota Bene : j'ai besoin de ce type de fonction
car j'ecris un interpret en Ocaml pour la phase
de prototypage.
Cordialement,
Yoann
The text was updated successfully, but these errors were encountered: