Command line debugger first version
[scilab.git] / scilab / modules / ast / includes / types / macro.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2009-2010 - DIGITEO - Bruno JOFRET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifndef __MACRO_HXX__
14 #define __MACRO_HXX__
15
16 #include <list>
17 #include <string>
18 #include "context.hxx"
19 #include "types.hxx"
20 #include "callable.hxx"
21 #include "double.hxx"
22 #include "seqexp.hxx"
23
24 namespace types
25 {
26 class EXTERN_AST Macro : public Callable
27 {
28 public :
29     Macro() : Callable(),
30         m_Nargin(symbol::Context::getInstance()->getOrCreate(symbol::Symbol(L"nargin"))),
31         m_Nargout(symbol::Context::getInstance()->getOrCreate(symbol::Symbol(L"nargout"))),
32         m_Varargin(symbol::Context::getInstance()->getOrCreate(symbol::Symbol(L"varargin"))),
33         m_Varargout(symbol::Context::getInstance()->getOrCreate(symbol::Symbol(L"varargout")))
34     {
35     }
36
37     Macro(const std::wstring& _stName, std::list<symbol::Variable*> &_inputArgs, std::list<symbol::Variable*> &_outputArgs, ast::SeqExp &_body, const std::wstring& _stModule);
38     virtual                     ~Macro();
39
40     // FIXME : Should not return NULL;
41     InternalType*               clone();
42
43     inline ScilabType           getType(void)
44     {
45         return ScilabMacro;
46     }
47     inline ScilabId             getId(void)
48     {
49         return IdMacro;
50     }
51     bool                        isMacro()
52     {
53         return true;
54     }
55
56     void                        whoAmI();
57
58     bool                        toString(std::wostringstream& ostr);
59
60     Callable::ReturnValue       call(typed_list &in, optional_list &opt, int _iRetCount, typed_list &out) override;
61
62     inline void cleanCall(symbol::Context * pContext, int oldPromptMode);
63
64     ast::SeqExp*                getBody();
65
66     /* return type as string ( double, int, cell, list, ... )*/
67     virtual std::wstring        getTypeStr()
68     {
69         return L"function";
70     }
71     /* return type as short string ( s, i, ce, l, ... )*/
72     virtual std::wstring        getShortTypeStr()
73     {
74         return L"function";
75     }
76
77     const std::wstring&         getFileName()
78     {
79         return m_stPath;
80     }
81
82     void                        setFileName(const std::wstring& _fileName)
83     {
84         m_stPath = _fileName;
85     }
86
87     std::list<symbol::Variable*>*   getInputs();
88     std::list<symbol::Variable*>*   getOutputs();
89
90     virtual int getNbInputArgument(void);
91     virtual int getNbOutputArgument(void);
92
93     bool operator==(const InternalType& it);
94
95     void add_submacro(const symbol::Symbol& s, Macro* macro);
96
97 private :
98     std::list<symbol::Variable*>*   m_inputArgs;
99     std::list<symbol::Variable*>*   m_outputArgs;
100     ast::SeqExp*                    m_body;
101     bool                            bAutoAlloc;
102     symbol::Variable*               m_Nargin;
103     symbol::Variable*               m_Nargout;
104     symbol::Variable*               m_Varargin;
105     symbol::Variable*               m_Varargout;
106     Double*                         m_pDblArgIn;
107     Double*                         m_pDblArgOut;
108     std::map<symbol::Variable*, Macro*> m_submacro;
109     std::wstring                    m_stPath;
110 };
111 }
112
113
114 #endif /* !__MACRO_HXX__ */