Use a stack to manage "where" location
[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  *  This file must be used under the terms of the CeCILL.
7  *  This source file is licensed as described in the file COPYING, which
8  *  you should have received as part of this distribution.  The terms
9  *  are also available at
10  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 #ifndef __CALLABLE_HXX__
15 #define __CALLABLE_HXX__
16
17 #include <string>
18 #include "internal.hxx"
19
20 #include "visitor.hxx"
21
22 //disable warnings about exports STL items
23 #ifdef _MSC_VER
24 #pragma warning (disable : 4251)
25 #endif
26
27 namespace types
28 {
29 class EXTERN_AST Callable : public InternalType
30 {
31 public :
32     enum ReturnValue
33     {
34         OK,
35         OK_NoResult,
36         Error
37     };
38
39     Callable(): InternalType()
40     {
41         m_iFirstLine = 0;
42     }
43     virtual             ~Callable() {}
44
45     bool                isCallable()
46     {
47         return true;
48     }
49
50     virtual ReturnValue   call(typed_list &in, optional_list &opt, int _iRetCount, typed_list &out, ast::ConstVisitor* execFunc) = 0;
51
52     virtual bool invoke(typed_list & in, optional_list & opt, int _iRetCount, typed_list & out, ast::ConstVisitor & execFunc, const ast::Exp & e);
53
54     virtual bool isInvokable() const
55     {
56         return true;
57     }
58
59     virtual bool hasInvokeOption() const
60     {
61         return true;
62     }
63
64     virtual int getInvokeNbIn()
65     {
66         return getNbInputArgument();
67     }
68
69     virtual int getInvokeNbOut()
70     {
71         return getNbOutputArgument();
72     }
73
74     void                  setName(std::wstring _wstName)
75     {
76         m_wstName = _wstName;
77     }
78     const std::wstring&   getName()
79     {
80         return m_wstName;
81     }
82     void                  setModule(std::wstring _wstModule)
83     {
84         m_wstModule = _wstModule;
85     }
86     std::wstring        getModule()
87     {
88         return m_wstModule;
89     }
90
91     /* return type as string ( double, int, cell, list, ... )*/
92     virtual std::wstring  getTypeStr()
93     {
94         return L"callable";
95     }
96     /* return type as short string ( s, i, ce, l, ... )*/
97     virtual std::wstring  getShortTypeStr() = 0;
98     virtual InternalType* clone(void) = 0;
99
100     virtual bool        isAssignable(void)
101     {
102         return true;
103     }
104
105     virtual int        getNbInputArgument(void)
106     {
107         return -1;
108     }
109
110     virtual int        getNbOutputArgument(void)
111     {
112         return -1;
113     }
114
115     virtual int        getFirstLine(void)
116     {
117         return m_iFirstLine;
118     }
119
120     virtual void       setFirstLine(int _iFirstLine)
121     {
122         m_iFirstLine = _iFirstLine;
123     }
124
125 protected :
126     std::wstring           m_wstName;
127     std::wstring           m_wstModule;
128     int                    m_iFirstLine;
129 };
130 }
131
132
133 #endif /* !__CALLABLE_HXX__ */