use reduce version of function from analysis during macro execution
[scilab.git] / scilab / modules / ast / includes / types / callable.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
4  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #ifndef __CALLABLE_HXX__
18 #define __CALLABLE_HXX__
19
20 #include <stdint.h>
21 #include <string>
22 #include "internal.hxx"
23
24 #include "visitor.hxx"
25
26 //disable warnings about exports STL items
27 #ifdef _MSC_VER
28 #pragma warning (disable : 4251)
29 #endif
30
31 namespace types
32 {
33 class EXTERN_AST Callable : public InternalType
34 {
35 public :
36     enum ReturnValue
37     {
38         OK,
39         OK_NoResult,
40         Error
41     };
42
43     Callable() : InternalType(), m_iFirstLine(0), m_iLastLine(0), m_functionId(-1) {}
44
45     virtual             ~Callable() {}
46
47     bool                isCallable()
48     {
49         return true;
50     }
51
52     virtual ReturnValue call(typed_list &in, optional_list &opt, int _iRetCount, typed_list &out) = 0;
53
54     virtual bool invoke(typed_list & in, optional_list & opt, int _iRetCount, typed_list & out, const ast::Exp & e)  override;
55
56     virtual bool isInvokable() const
57     {
58         return true;
59     }
60
61     virtual bool hasInvokeOption() const
62     {
63         return true;
64     }
65
66     virtual int getInvokeNbIn()
67     {
68         return getNbInputArgument();
69     }
70
71     virtual int getInvokeNbOut()
72     {
73         return getNbOutputArgument();
74     }
75
76     void                  setName(const std::wstring& _wstName)
77     {
78         m_wstName = _wstName;
79     }
80     const std::wstring&   getName()
81     {
82         return m_wstName;
83     }
84     void                  setModule(const std::wstring& _wstModule)
85     {
86         m_wstModule = _wstModule;
87     }
88     std::wstring        getModule()
89     {
90         return m_wstModule;
91     }
92
93     /* return type as string ( double, int, cell, list, ... )*/
94     virtual std::wstring  getTypeStr() const
95     {
96         return L"callable";
97     }
98     /* return type as short string ( s, i, ce, l, ... )*/
99     virtual std::wstring  getShortTypeStr() const = 0;
100     virtual InternalType* clone(void) = 0;
101
102     virtual bool        isAssignable(void)
103     {
104         return true;
105     }
106
107     virtual int        getNbInputArgument(void)
108     {
109         return -1;
110     }
111
112     virtual int        getNbOutputArgument(void)
113     {
114         return -1;
115     }
116
117     virtual int        getFirstLine(void)
118     {
119         return m_iFirstLine;
120     }
121
122     virtual int        getLastLine(void)
123     {
124         return m_iLastLine;
125     }
126
127     virtual void       setLines(int _iFirstLine, int _iLastLine)
128     {
129         m_iFirstLine = _iFirstLine;
130         m_iLastLine  = _iLastLine;
131     }
132
133 protected :
134     std::wstring            m_wstName;
135     std::string             m_stName;
136     std::wstring            m_wstModule;
137     int                     m_iFirstLine;
138     int                     m_iLastLine;
139     uint64_t                m_functionId;
140 };
141 }
142
143
144 #endif /* !__CALLABLE_HXX__ */