kernel modules Wiedervereinigung
[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, ast::ConstVisitor* execFunc);
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     std::list<symbol::Variable*>*   inputs_get();
78     std::list<symbol::Variable*>*   outputs_get();
79
80     virtual int getNbInputArgument(void);
81     virtual int getNbOutputArgument(void);
82
83     bool operator==(const InternalType& it);
84
85 private :
86     std::list<symbol::Variable*>*   m_inputArgs;
87     std::list<symbol::Variable*>*   m_outputArgs;
88     ast::SeqExp*                    m_body;
89     bool                            bAutoAlloc;
90     symbol::Variable*               m_Nargin;
91     symbol::Variable*               m_Nargout;
92     symbol::Variable*               m_Varargin;
93     symbol::Variable*               m_Varargout;
94     Double*                         m_pDblArgIn;
95     Double*                         m_pDblArgOut;
96
97 };
98 }
99
100
101 #endif /* !__MACRO_HXX__ */