reforge symbol/context management
[scilab.git] / scilab / modules / core / sci_gateway / cpp / sci_isglobal.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Antoine ELIAS
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 #include "core_gw.hxx"
14 #include "function.hxx"
15 #include "callable.hxx"
16 #include "context.hxx"
17 #include "string.hxx"
18 #include "bool.hxx"
19
20 extern "C"
21 {
22 #include "Scierror.h"
23 #include "localization.h"
24 }
25
26 using namespace types;
27
28 Function::ReturnValue sci_isglobal(types::typed_list &in, int _iRetCount, types::typed_list &out)
29 {
30     types::typed_list::iterator inIterator;
31     int iWrongType = 1;
32
33     if (in.size() != 1)
34     {
35         Scierror(77, _("%s: Wrong number of input argument(s): %d expected.\n"), "isglobal", 1);
36         return Function::Error;
37     }
38     else
39     {
40         if (in[0]->isString() == false)
41         {
42             Scierror(999, _("%s: Wrong type for input argument #%d: Single string expected.\n"), "isglobal", 1);
43             return Function::Error;
44         }
45
46         String* pS = in[0]->getAs<types::String>();
47         if (pS->isScalar() == false)
48         {
49             Scierror(999, _("%s: Wrong type for input argument #%d: Single string expected.\n"), "isglobal", 1);
50             return Function::Error;
51         }
52
53         if (symbol::Context::getInstance()->isGlobalExists(symbol::Symbol(pS->get(0))))
54         {
55             out.push_back(new types::Bool(1));
56         }
57         else
58         {
59             out.push_back(new types::Bool(0));
60         }
61     }
62     return Function::OK;
63 }