License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / ast / src / cpp / ast / consoledebugger.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - 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 "consoledebugger.hxx"
17 #include "debugmanager.hxx"
18 #include "printvisitor.hxx"
19
20 extern "C"
21 {
22 #include "sciprint.h"
23 #include "prompt.h"
24 }
25
26 namespace debugger
27 {
28 void ConsoleDebugger::onStop(int index)
29 {
30     if (index >= 0)
31     {
32         debugger::DebuggerMagager* manager = debugger::DebuggerMagager::getInstance();
33         debugger::Breakpoint* bp = manager->getBreakPoint(index);
34         if (bp)
35         {
36             sciprint(_("debugger stop on breakpoint(%d) in function %ls line %d\n"), index, bp->getFunctioName().data(), bp->getMacroLine());
37         }
38     }
39
40     printExp();
41 }
42
43 void ConsoleDebugger::onResume()
44 {
45     //sciprint("ConsoleDebugger::onResume.\n");
46 }
47
48 void ConsoleDebugger::onAbort()
49 {
50     sciprint(_("Execution aborted.\n"));
51 }
52
53 void ConsoleDebugger::onErrorInFile(const std::wstring& filename)
54 {
55     debugger::DebuggerMagager* manager = debugger::DebuggerMagager::getInstance();
56     ast::Exp* exp = manager->getExp();
57     sciprint(_("debugger stop on error in file %ls line %d\n"), filename.data(), exp->getLocation().first_line);
58     printExp();
59 }
60
61 void ConsoleDebugger::onErrorInScript(const std::wstring& funcname)
62 {
63     debugger::DebuggerMagager* manager = debugger::DebuggerMagager::getInstance();
64     ast::Exp* exp = manager->getExp();
65     sciprint(_("debugger stop on error in function %ls line %d\n"), funcname.data(), exp->getLocation().first_line);
66     printExp();
67 }
68
69 void ConsoleDebugger::onQuit()
70 {
71     sciprint(_("Leave debugger.\n"));
72 }
73
74 void ConsoleDebugger::updateBreakpoints()
75 {
76     debugger::DebuggerMagager* manager = debugger::DebuggerMagager::getInstance();
77     debugger::Breakpoints& brks = manager->getAllBreakPoint();
78
79     if (brks.size() == 0)
80     {
81         sciprint("No breakpoint\n");
82         return;
83     }
84
85     sciprint("% 3ls % 7ls %24ls % 5ls %ls\n\n", L"num", L"enable", L"function", L"line", L"condition");
86     int i = 0;
87     for (const auto& b : brks)
88     {
89         if (b->isMacro())
90         {
91             std::wstring condition = b->getCondition();
92             sciprint("% 3d % 7s %24ls % 5d %ls\n", i, b->isEnable() ? "true" : "false", b->getFunctioName().c_str(), b->getMacroLine(),
93                      condition.size() < 30 ? condition.c_str() :
94                      (std::wstring(condition.begin(), condition.begin() + 27) + L"...").c_str());
95         }
96
97         ++i;
98     }
99 }
100
101 void ConsoleDebugger::printExp()
102 {
103     debugger::DebuggerMagager* manager = debugger::DebuggerMagager::getInstance();
104     std::wostringstream ostr;
105     ast::PrintVisitor pp(ostr, true, true, true);
106     manager->getExp()->accept(pp);
107     sciprint("%s%ls\n", SCIPROMPT_PAUSE, ostr.str().data());
108 }
109 }