Commit 3f34cfa4 authored by Erwan Jahier's avatar Erwan Jahier
Browse files

Fix a bug in Ezdl triggered by ocaml 4.02.0 that prevents C call to done correctly.

It was due to an uninitialized local var ; the bug was revealed by a change in
caml/mlvalues.h::CAMLparam() done in 4.02.0

nb : it also fixes (i don't really know why) a performance bug in the rabbit simu.
parent 0ee8b14c
*** Pour installer et compiler la version sous git
Pré-requis pour les tests de non-regression :
- lus2lic, ocaml* doivent être dans le PATH
- LUSTRE_INSTALL doit être correctement positionné
- HOSTTYPE doit être exporté (export en bash, setenv en csh)
1 - Le clonage
$ git clone ~jahier/lurette
2 - La construction des libraries utiles (bdd, polyedres, etc).
2 Construction des sources
* Variables à positionner
HOSTTYPE (si pas positionné)
LURETTE_PATH
$ export LURETTE_PATH=<le rep d'ou le git clone a été fait>/lurette
$ cd lurette
......@@ -17,18 +16,17 @@ $ make camlidl # *si* camlidl n'est pas dans le path (nécessite les droits sur
$ make build
then a
$ make test
should finish with a 0 exit code
3 - recompilation des sources
$ cd sources
$ make all
install des source dans le rep pre_release pour pouvoir lancer les tests de non-regression
4 - install des source dans le rep pre_release pour pouvoir lancer les tests de non-regression
$ make cp
% make test
then a
$ make test
should finish with a 0 exit code
......@@ -70,16 +70,12 @@ returns(x, y, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y: real ; freeze:bool) =
{ draw_params() &> escape() } fby
-- { draw_params() and keep_position() } fby
{
-- |1: loop [0,40] line() -- forward straigth ahead for a while
|1: loop [0,40] line() -- forward straigth ahead for a while
|3: loop [0,40] curve() -- forward by turning for a while
-- |3: loop [0,60] spiral() -- forward by turning for a while
|3: loop [0,60] spiral() -- forward by turning for a while
}
-- do escape()
-- nb: if it is inside the obstacle, it keeps its position until it can move
}
node xxx (x : real) returns(cosx: real) =
loop { cosx = sin(x) }
......@@ -121,7 +121,7 @@ let (step : Data.subst list -> Data.subst list)=
(is_inside(x,y,p1x,p1y,p2x,p2y,p3x,p3y,p4x,p4y))
then
(
ignore (Graphics.read_key ())
(* ignore (Graphics.read_key ()) *)
);
let p1xI = truncate p1x
......
......@@ -197,8 +197,8 @@ possibilit
//Le "dcodage" des arguments est commun
//extern void inspect_block(value);
CAMLprim value decode_args(
value handle, value args, long* largs, double* dargs
word decode_args(
value args, long* largs, double* dargs
) {
/*
Le "profil C" est cod sur 4*4 bits :
......@@ -208,8 +208,10 @@ Le "profil C" est cod
0x2 -> arg double
-> ca laisse plein de place pour la suite !
*/
CAMLparam2(handle, args);
CAMLlocal4(l,h,cstr,prof);
CAMLparam1(args);
CAMLlocal3(l,h,cstr);
word prof=0;
int cpt = 0;
for(l = args; l != Val_int(0); l = tail_list(l)){
......@@ -244,11 +246,11 @@ Le "profil C" est cod
}
cpt++;
}
CAMLreturn(prof);
return prof;
}
CAMLprim long call_long(long handle, word prof, long* L, double* D)
long call_long(long handle, word prof, long* L, double* D)
{
//On peut caster "surement" handle sur une fonction
//qui rend un long et qui prend en argument
......@@ -312,7 +314,7 @@ CAMLprim value c_cargs2i(value handle, value args) {
long res;
EZDL_ACCESS = "cargs2i";
prof_code = decode_args(handle, args, &ltab[0], &dtab[0]);
prof_code = decode_args(args, &ltab[0], &dtab[0]);
res = call_long(handle, prof_code, ltab, dtab);
......@@ -329,7 +331,7 @@ CAMLprim value c_cargs2s(value handle, value args) {
long res ;
EZDL_ACCESS = "cargs2s";
prof_code = decode_args(handle, args, &ltab[0], &dtab[0]);
prof_code = decode_args(args, &ltab[0], &dtab[0]);
res = call_long(handle, prof_code, ltab, dtab);
......@@ -343,6 +345,7 @@ double call_double( long handle, word prof, long* L, double* D)
//une combinaison de long/double selon le code de prof
double res ;
double (*f)() = (double(*)()) handle;
//printf("call_double, prof=0x%X\n", prof);
switch (prof){
//0 arg
case 0x0 : res = (*f)(); break;
......@@ -399,7 +402,7 @@ CAMLprim value c_cargs2f(value handle, value args) {
double res;
EZDL_ACCESS = "cargs2f";
prof_code = decode_args(handle, args, &ltab[0], &dtab[0]);
prof_code = decode_args(args, &ltab[0], &dtab[0]);
res = call_double( handle, prof_code, ltab, dtab);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment