loom

Форк
0
/
DebugLogistics.cpp 
85 строк · 2.3 Кб
1
#include "DebugLogistics.h"
2

3
#include "simodo/ast/Node.h"
4
#include "simodo/interpret/Interpret_interface.h"
5

6
namespace simodo 
7
{
8
    interpret::Direction DebugLogistics::checkDirection(const interpret::Interpret_interface & interpret)
9
    {
10
        if(_next_step_behavior == interpret::NextStepBehaviour::Run)
11
            return interpret::Direction::Next;
12

13
        const ast::Node * p_node = interpret.lookupOperationNode();
14

15
        if (p_node) {
16
            std::unique_lock<std::mutex> locker(_debug_mutex);
17

18
            if (p_node->token().location().uri_index() == _last_uri_index
19
             && p_node->token().location().range().start().line() == _last_line)
20
                return interpret::Direction::Next;
21

22
            _last_uri_index = p_node->token().location().uri_index();
23
            _last_line      = p_node->token().location().range().start().line();
24

25
            return _function_nesting <= _expected_function_nest
26
                    ? interpret::Direction::Pause
27
                    : interpret::Direction::Next;
28
        }
29

30
        return interpret::Direction::Next;
31
    }
32

33
    void DebugLogistics::setNextStepBehaviour(interpret::NextStepBehaviour behavior)
34
    {
35
        std::unique_lock<std::mutex> locker(_debug_mutex);
36

37
        _next_step_behavior = behavior;
38

39
        switch(behavior)
40
        {
41
        case interpret::NextStepBehaviour::In:
42
            _expected_function_nest = _function_nesting + 1;
43
            break;
44
        case interpret::NextStepBehaviour::Out:
45
            _expected_function_nest = _function_nesting - 1;
46
            break;
47
        case interpret::NextStepBehaviour::Step:
48
            _expected_function_nest = _function_nesting;
49
            break;
50
        default:
51
            break;
52
        }
53
    }
54

55
    void DebugLogistics::onEnterFunction()
56
    {
57
        _function_nesting ++;
58
    }
59

60
    void DebugLogistics::onExitFunction()
61
    {
62
        _function_nesting --;
63
    }
64

65
    engine::Breakpoint DebugLogistics::add(const engine::Breakpoint & breakpoint)
66
    {
67
        return breakpoint;
68
    }
69

70
    bool DebugLogistics::remove(const engine::Breakpoint & /*breakpoint*/)
71
    {
72
        return false;
73
    }
74

75
    void DebugLogistics::clear()
76
    {
77

78
    }
79

80
    std::vector<engine::Breakpoint> DebugLogistics::breakpoints() const
81
    {
82
        return {};
83
    }
84

85
}
86

87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.