This trivial code

        process = ffunction(float func(float), "","");

compiled with "-fx" results in

        output0[i0] = FAUSTFLOAT(nil(fixpoint_t(input0[i0])));

because ffname() always returns "nil" with -fx.

Why is that?

        const char* ffname(Tree t)
        {
            Tree namelist = nth(ffsignature(t), 1);
            return tree2str(nth(namelist, gGlobal->gFloatSize - 1));
        }

assumes that "signature" in compiler/parser/faustparser.y creates the "name"
for every gFloatSize, but the gFloatSize == 4 case is not covered.

The patch below seems to fix the problem, but needs more documentation. With
this patch you can do

        ffunction(float fun_single|fun_double|fun_quad|fun_fixpoint (...), ...);

IOW, you can also specify the name of "fixpoint" variant of foreign function.

Oleg.

diff --git a/compiler/parser/faustparser.y b/compiler/parser/faustparser.y
index ce1b60858..cc88db4a4 100644
--- a/compiler/parser/faustparser.y
+++ b/compiler/parser/faustparser.y
@@ -719,13 +719,15 @@ soundfile         : SOUNDFILE LPAR uqstring PAR argument 
RPAR
 /* Description of foreign functions */
 /* float sinhf|sinh|sinhl(float) */
 
-signature              : type fun LPAR typelist RPAR               { $$ = 
cons($1, cons(cons($2,cons($2,cons($2,gGlobal->nil))), $4)); }
-                | type fun OR fun LPAR typelist RPAR        { $$ = cons($1, 
cons(cons($2,cons($4,cons($4,gGlobal->nil))), $6)); }
-                | type fun OR fun OR fun LPAR typelist RPAR    { $$ = cons($1, 
cons(cons($2,cons($4,cons($6,gGlobal->nil))), $8)); }
-
-                | type fun LPAR RPAR                        { $$ = cons($1, 
cons(cons($2,cons($2,cons($2,gGlobal->nil))), gGlobal->nil)); }
-                | type fun OR fun LPAR RPAR                 { $$ = cons($1, 
cons(cons($2,cons($4,cons($4,gGlobal->nil))), gGlobal->nil)); }
-                | type fun OR fun OR fun LPAR RPAR                     { $$ = 
cons($1, cons(cons($2,cons($4,cons($6,gGlobal->nil))), gGlobal->nil)); }
+signature              : type fun                      LPAR typelist RPAR { $$ 
= cons($1, cons(cons($2,cons($2,cons($2,cons($2,gGlobal->nil)))),  $4)); }
+                | type fun OR fun               LPAR typelist RPAR { $$ = 
cons($1, cons(cons($2,cons($4,cons($4,cons($4,gGlobal->nil)))),  $6)); }
+                | type fun OR fun OR fun        LPAR typelist RPAR { $$ = 
cons($1, cons(cons($2,cons($4,cons($6,cons($6,gGlobal->nil)))),  $8)); }
+                | type fun OR fun OR fun OR fun LPAR typelist RPAR { $$ = 
cons($1, cons(cons($2,cons($4,cons($6,cons($8,gGlobal->nil)))), $10)); }
+
+                | type fun                      LPAR          RPAR { $$ = 
cons($1, cons(cons($2,cons($2,cons($2,cons($2,gGlobal->nil)))), gGlobal->nil)); 
}
+                | type fun OR fun               LPAR          RPAR { $$ = 
cons($1, cons(cons($2,cons($4,cons($4,cons($4,gGlobal->nil)))), gGlobal->nil)); 
}
+                | type fun OR fun OR fun        LPAR          RPAR { $$ = 
cons($1, cons(cons($2,cons($4,cons($6,cons($6,gGlobal->nil)))), gGlobal->nil)); 
}
+                | type fun OR fun OR fun OR fun LPAR          RPAR { $$ = 
cons($1, cons(cons($2,cons($4,cons($6,cons($8,gGlobal->nil)))), gGlobal->nil)); 
}
                 ;
 
 fun                            : IDENT                                         
        { $$ = tree(FAUSTtext); }



_______________________________________________
Faudiostream-devel mailing list
Faudiostream-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-devel

Reply via email to