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

4
src/source_clang.h

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

Loading…
Cancel
Save