1 /************************************************************************
2  ************************************************************************
3     FAUST compiler
4     Copyright (C) 2003-2018 GRAME, Centre National de Creation Musicale
5     ---------------------------------------------------------------------
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10 
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  ************************************************************************
20  ************************************************************************/
21 
22 #include <stdlib.h>
23 
24 #include "prim2.hh"
25 #include "global.hh"
26 
ffunction(Tree signature,Tree incfile,Tree libfile)27 Tree ffunction(Tree signature, Tree incfile, Tree libfile)
28 {
29     return tree(gGlobal->FFUN, signature, incfile, libfile);
30 }
31 
isffunction(Tree t)32 bool isffunction(Tree t)
33 {
34     return t->node() == Node(gGlobal->FFUN);
35 }
36 
ffsignature(Tree ff)37 Tree ffsignature(Tree ff)
38 {
39     return ff->branch(0);
40 }
41 
ffincfile(Tree ff)42 const char* ffincfile(Tree ff)
43 {
44     return tree2str(ff->branch(1));
45 }
46 
fflibfile(Tree ff)47 const char* fflibfile(Tree ff)
48 {
49     return tree2str(ff->branch(2));
50 }
51 
ffrestype(Tree t)52 int ffrestype(Tree t)
53 {
54     return tree2int(hd(ffsignature(t)));
55 }
56 
ffname(Tree t)57 const char* ffname(Tree t)
58 {
59     Tree namelist = nth(ffsignature(t), 1);
60     // cerr << "ffname " << tree2str(nth(namelist,gFloatSize-1)) << endl;
61     return tree2str(nth(namelist, gGlobal->gFloatSize - 1));
62 }
63 
ffarity(Tree t)64 int ffarity(Tree t)
65 {
66     return len(ffsignature(t)) - 2;
67 }
68 
ffargtype(Tree t,int i)69 int ffargtype(Tree t, int i)
70 {
71     return tree2int(nth(ffsignature(t), i + 2));
72 }
73