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