Browse Source

Minor extra cleanup to parsing.

merge-requests/365/head
eidheim 10 years ago
parent
commit
9f3ffcef56
  1. 18
      src/source_clang.cc
  2. 4
      src/source_clang.h

18
src/source_clang.cc

@ -111,7 +111,7 @@ void Source::ClangViewParse::parse_initialize() {
if(parse_thread.joinable()) if(parse_thread.joinable())
parse_thread.join(); parse_thread.join();
parse_process_state=ParseProcessState::STARTING; parse_process_state=ParseProcessState::STARTING;
parse_state=ParseState::WORKING; parse_state=ParseState::PROCESSING;
auto buffer=get_buffer()->get_text(); auto buffer=get_buffer()->get_text();
//Remove includes for first parse for initial syntax highlighting //Remove includes for first parse for initial syntax highlighting
@ -133,9 +133,9 @@ void Source::ClangViewParse::parse_initialize() {
set_status("parsing..."); set_status("parsing...");
parse_thread=std::thread([this]() { parse_thread=std::thread([this]() {
while(true) { while(true) {
while(parse_state==ParseState::WORKING && (parse_process_state==ParseProcessState::IDLE || parse_process_state==ParseProcessState::PREPROCESSING || parse_process_state==ParseProcessState::POSTPROCESSING)) while(parse_state==ParseState::PROCESSING && (parse_process_state==ParseProcessState::IDLE || parse_process_state==ParseProcessState::PREPROCESSING || parse_process_state==ParseProcessState::POSTPROCESSING))
std::this_thread::sleep_for(std::chrono::milliseconds(10)); std::this_thread::sleep_for(std::chrono::milliseconds(10));
if(parse_state!=ParseState::WORKING) if(parse_state!=ParseState::PROCESSING)
break; break;
auto expected=ParseProcessState::STARTING; auto expected=ParseProcessState::STARTING;
if(parse_process_state.compare_exchange_strong(expected, ParseProcessState::PREPROCESSING)) if(parse_process_state.compare_exchange_strong(expected, ParseProcessState::PREPROCESSING))
@ -169,7 +169,7 @@ void Source::ClangViewParse::parse_initialize() {
void Source::ClangViewParse::soft_reparse() { void Source::ClangViewParse::soft_reparse() {
parsed=false; parsed=false;
if(parse_state!=ParseState::WORKING) if(parse_state!=ParseState::PROCESSING)
return; return;
parse_process_state=ParseProcessState::IDLE; parse_process_state=ParseProcessState::IDLE;
delayed_reparse_connection.disconnect(); delayed_reparse_connection.disconnect();
@ -718,7 +718,7 @@ void Source::ClangViewAutocomplete::start_autocomplete() {
} }
void Source::ClangViewAutocomplete::autocomplete() { void Source::ClangViewAutocomplete::autocomplete() {
if(parse_state!=ParseState::WORKING) if(parse_state!=ParseState::PROCESSING)
return; return;
if(!autocomplete_starting) { if(!autocomplete_starting) {
@ -822,11 +822,11 @@ void Source::ClangViewAutocomplete::autocomplete() {
} }
autocomplete_thread=std::thread([this, ac_data, line_nr, column_nr, buffer](){ autocomplete_thread=std::thread([this, ac_data, line_nr, column_nr, buffer](){
parse_mutex.lock(); parse_mutex.lock();
if(parse_state==ParseState::WORKING) { if(parse_state==ParseState::PROCESSING) {
parse_process_state=ParseProcessState::IDLE; parse_process_state=ParseProcessState::IDLE;
*ac_data=get_autocomplete_suggestions(buffer->raw(), line_nr, column_nr); *ac_data=get_autocomplete_suggestions(buffer->raw(), line_nr, column_nr);
} }
if(parse_state==ParseState::WORKING) if(parse_state==ParseState::PROCESSING)
autocomplete_done(); autocomplete_done();
else else
autocomplete_fail(); autocomplete_fail();
@ -839,7 +839,7 @@ std::vector<Source::ClangViewAutocomplete::AutoCompleteData> Source::ClangViewAu
std::vector<AutoCompleteData> suggestions; std::vector<AutoCompleteData> suggestions;
auto results=clang_tu->get_code_completions(buffer, line_number, column); auto results=clang_tu->get_code_completions(buffer, line_number, column);
if(results.cx_results==NULL) { if(results.cx_results==NULL) {
auto expected=ParseState::WORKING; auto expected=ParseState::PROCESSING;
parse_state.compare_exchange_strong(expected, ParseState::RESTARTING); parse_state.compare_exchange_strong(expected, ParseState::RESTARTING);
return suggestions; return suggestions;
} }
@ -887,7 +887,7 @@ void Source::ClangViewAutocomplete::async_delete() {
bool Source::ClangViewAutocomplete::full_reparse() { bool Source::ClangViewAutocomplete::full_reparse() {
if(!full_reparse_running) { if(!full_reparse_running) {
auto expected=ParseState::WORKING; auto expected=ParseState::PROCESSING;
if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING)) { if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING)) {
expected=ParseState::RESTARTING; expected=ParseState::RESTARTING;
if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING)) if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING))

4
src/source_clang.h

@ -13,8 +13,8 @@
namespace Source { namespace Source {
class ClangViewParse : public View { class ClangViewParse : public View {
protected: protected:
enum class ParseState {PROCESSING, RESTARTING, STOP};
enum class ParseProcessState {IDLE, STARTING, PREPROCESSING, PROCESSING, POSTPROCESSING}; enum class ParseProcessState {IDLE, STARTING, PREPROCESSING, PROCESSING, POSTPROCESSING};
enum class ParseState {WORKING, RESTARTING, STOP};
public: public:
class TokenRange { class TokenRange {
public: public:
@ -50,8 +50,8 @@ namespace Source {
std::thread parse_thread; std::thread parse_thread;
std::mutex parse_mutex; std::mutex parse_mutex;
std::atomic<ParseProcessState> parse_process_state;
std::atomic<ParseState> parse_state; std::atomic<ParseState> parse_state;
std::atomic<ParseProcessState> parse_process_state;
sigc::connection parse_done_connection; sigc::connection parse_done_connection;
sigc::connection parse_start_connection; sigc::connection parse_start_connection;
sigc::connection parse_fail_connection; sigc::connection parse_fail_connection;

Loading…
Cancel
Save