e41df61187e2e67a47d02c75d817a6b68e5a0f8b
[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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "core_gw.hxx"
17 #include "function.hxx"
18 #include "callable.hxx"
19 #include "context.hxx"
20 #include "string.hxx"
21 #include "bool.hxx"
22
23 extern "C"
24 {
25 #include "Scierror.h"
26 #include "localization.h"
27 }
28
29 types::Function::ReturnValue sci_isglobal(types::typed_list &in, int _iRetCount, types::typed_list &out)
30 {
31     types::typed_list::iterator inIterator;
32     int iWrongType = 1;
33
34     if (in.size() != 1)
35     {
36         Scierror(77, _("%s: Wrong number of input argument(s): %d expected.\n"), "isglobal", 1);
37         return types::Function::Error;
38     }
39     else
40     {
41         if (in[0]->isString() == false)
42         {
43             Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "isglobal", 1);
44             return types::Function::Error;
45         }
46
47         types::String* pS = in[0]->getAs<types::String>();
48         if (pS->isScalar() == false)
49         {
50             Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "isglobal", 1);
51             return types::Function::Error;
52         }
53
54         if (symbol::Context::getInstance()->isGlobalVisible(symbol::Symbol(pS->get(0))))
55         {
56             out.push_back(new types::Bool(1));
57         }
58         else
59         {
60             out.push_back(new types::Bool(0));
61         }
62     }
63     return types::Function::OK;
64 }